On 2020-05-17 21:48, Paul Procacci wrote:
You can check this yourself by looking at the QAST nodes after the static analyzer has had its fill:

# diff -u <(perl6 --target=optimize -e '"test".IO.e') <(perl6 --target=optimize -e '"test".IO.e.Bool')

Huh.  Not sure what I am looking at


$ diff -u <(perl6 --target=optimize -e 'say if "test".IO.d') <(perl6 --target=optimize -e 'say "test".IO.d.Bool')
===SORRY!=== Error while compiling -e
Unsupported use of bare "say"; in Raku please use .say if you meant to call it as a method on $_, or use an explicit invocant or argument, or use &say to refer to the function as a noun
at -e:1
------> say⏏ if "test".IO.d
--- /dev/fd/63  2020-05-17 22:01:37.947790677 -0700
+++ /dev/fd/62  2020-05-17 22:01:37.948790659 -0700
@@ -0,0 +1,98 @@
+- QAST::CompUnit  :W<?> :UNIT<?> :CAN_LOWER_TOPIC<?>
+  [pre_deserialize]
+    - QAST::Stmt
+      - QAST::Stmt
+        - QAST::Op(loadbytecode)
+          - QAST::VM
+            [moar]
+              - QAST::SVal(ModuleLoader.moarvm)
+            [jvm]
+              - QAST::SVal(ModuleLoader.class)
+            [js]
+              - QAST::SVal(ModuleLoader)
+        - QAST::Op(callmethod load_module)
+          - QAST::Op(gethllsym)
+            - QAST::SVal(nqp)
+            - QAST::SVal(ModuleLoader)
+          - QAST::SVal(Perl6::ModuleLoader)
+      - QAST::Op(forceouterctx)
+        - QAST::BVal(2)
+        - QAST::Op(callmethod load_setting)
+          - QAST::Op(getcurhllsym)
+            - QAST::SVal(ModuleLoader)
+          - QAST::SVal(CORE.d)
+  [post_deserialize]
+    - QAST::Stmts
+      - QAST::Op(bind)
+        - QAST::Var(attribute $!do)
+          - QAST::WVal(Block)
+          - QAST::WVal(Code)
+        - QAST::BVal(1)
+    - QAST::Op(bindcurhllsym)
+      - QAST::SVal(GLOBAL)
+      - QAST::WVal(GLOBAL)
+  [load]
+    - QAST::Op(call)
+      - QAST::BVal(2)
+  [children]
+    - QAST::Block(:cuid(2))  :in_stmt_mod<?> say \"test\".IO.d.Bool
+    │ - QAST::Var(local __args__ :decl(param))
+    │ - QAST::Stmts  say \"test\".IO.d.Bool
+    │ - QAST::Op(call)
+ │ - QAST::Block(:cuid(1) :blocktype(declaration_static)) :outer<?> :in_stmt_mod<?> :code_object<?> :IN_DECL<mainline>
+    │   │ - QAST::Stmts  say \"test\".IO.d.Bool
+    │   │   - QAST::Var(lexical $¢ :decl(contvar))
+    │   │   - QAST::Var(lexical $! :decl(contvar))
+    │   │   - QAST::Var(lexical $/ :decl(contvar))
+    │   │   - QAST::Op(null)
+    │   │   - QAST::Var(lexical GLOBALish :decl(static))
+    │   │   - QAST::Var(lexical EXPORT :decl(static))
+    │   │   - QAST::Var(lexical $?PACKAGE :decl(static))
+    │   │   - QAST::Var(lexical ::?PACKAGE :decl(static))
+    │   │   - QAST::Var(lexical $=finish :decl(static))
+    │   │   - QAST::Var(lexical $=pod :decl(static))
+    │   │     [value]
+    │   │       -
+    │   │   - QAST::Var(lexical !UNIT_MARKER :decl(static))
+    │   │ - QAST::Stmts
+    │   │   - QAST::Op(bind)
+    │   │     - QAST::Var(local ctxsave :decl(var))
+    │   │     - QAST::Var(contextual $*CTXSAVE)
+    │   │   - QAST::Op(unless)
+    │   │     - QAST::Op(isnull)
+    │   │       - QAST::Var(local ctxsave)
+    │   │     - QAST::Op(if)
+    │   │       - QAST::Op(can)
+    │   │         - QAST::Var(local ctxsave)
+    │   │         - QAST::SVal(ctxsave)
+    │   │       - QAST::Op(callmethod ctxsave)
+    │   │         - QAST::Var(local ctxsave)
+    │   │ - QAST::Stmts
+    │   │   - QAST::WVal(Array)
+    │   │   - QAST::Stmt <sunk final> say \"test\".IO.d.Bool
+    │   │     - QAST::Want <sunk>
+ │ │ - QAST::Op(callstatic &say) <sunk> :statement_id<1> say \"test\".IO.d.Bool
+    │   │         - QAST::Op(hllize) <wanted>
+    │   │           - QAST::Op(callmethod Bool)  Bool
+    │   │             - QAST::Op(hllize) <wanted>
+    │   │               - QAST::Op(callmethod d)  d
+    │   │                 - QAST::Op(hllize) <wanted>
+    │   │                   - QAST::Op(callmethod IO)  IO
+    │   │                     - QAST::Want <wanted> test
+    │   │                       - QAST::WVal(Str)
+    │   │                       - Ss
+    │   │                       - QAST::SVal(test)
+    │   │       - v
+    │   │       - QAST::Op(p6sink)
+ │ │ - QAST::Op(callstatic &say) <sunk> :statement_id<1> say \"test\".IO.d.Bool
+    │   │           - QAST::Op(hllize) <wanted>
+    │   │             - QAST::Op(callmethod Bool)  Bool
+    │   │               - QAST::Op(hllize) <wanted>
+    │   │                 - QAST::Op(callmethod d)  d
+    │   │                   - QAST::Op(hllize) <wanted>
+    │   │                     - QAST::Op(callmethod IO)  IO
+    │   │                       - QAST::Want <wanted> test
+    │   │                         - QAST::WVal(Str)
+    │   │                         - Ss
+    │   │                         - QAST::SVal(test)
+    │   │   - QAST::WVal(Nil)

Reply via email to