{"body":"$ perl6 -Ilib bin/berna --print-code --print-match --print-ast --print-list --print-runtime -e='\n\nFunction Number fat Number num\n   Number ret 1\n   If not equal num 1\n      Set ret mul num fat sub num 1\n   ret\nprint toString fat 5\n'\nCODE:\n\n\nFunction Number fat Number num\n   Number ret 1\n   If not equal num 1\n      Set ret mul num fat sub num 1\n   ret\nprint toString fat 5\n\n------------\n\nMATCH:\n｢\n\nFunction Number fat Number num\n   Number ret 1\n   If not equal num 1\n      Set ret mul num fat sub num 1\n   ret\nprint toString fat 5\n｣\n line => ｢Function Number fat Number num\n   Number ret 1\n   If not equal num 1\n      Set ret mul num fat sub num 1\n   ret｣\n  statement => ｢Function Number fat Number num\n   Number ret 1\n   If not equal num 1\n      Set ret mul num fat sub num 1\n   ret｣\n   declare => ｢Function Number fat Number num\n   Number ret 1\n   If not equal num 1\n      Set ret mul num fat sub num 1\n   ret｣\n    decl-func => ｢Function Number fat Number num\n   Number ret 1\n   If not equal num 1\n      Set ret mul num fat sub num 1\n   ret｣\n     func-proto => ｢Function Number fat Number num｣\n      func-keyword => ｢Function｣\n      type-name => ｢Number｣\n      name => ｢fat｣\n      pair-args => ｢Number num｣\n       type-name => ｢Number｣\n       name => ｢num｣\n     new-indent => ｢   ｣\n     body => ｢Number ret 1\n   If not equal num 1\n      Set ret mul num fat sub num 1\n   ret｣\n      statement => ｢Number ret 1｣\n       declare => ｢Number ret 1｣\n        type-name => ｢Number｣\n        name => ｢ret｣\n        statement => ｢1｣\n         value-ret => ｢1｣\n          value => ｢1｣\n      line => ｢   If not equal num 1\n      Set ret mul num fat sub num 1｣\n       statement => ｢If not equal num 1\n      Set ret mul num fat sub num 1｣\n        control => ｢If not equal num 1\n      Set ret mul num fat sub num 1｣\n         sym => ｢If｣\n         wanted => ｢not equal num 1｣\n          value-ret => ｢not equal num 1｣\n           func-name => ｢not｣\n            func => ｢not｣\n           arg-list => ｢equal num 1｣\n            wanted => ｢equal num 1｣\n             value-ret => ｢equal num 1｣\n              func-name => ｢equal｣\n               func => ｢equal｣\n              arg-list => ｢num 1｣\n               wanted => ｢num｣\n                value-ret => ｢num｣\n                 var-name => ｢num｣\n                  var => ｢num｣\n               wanted => ｢1｣\n                value-ret => ｢1｣\n                 value => ｢1｣\n         new-indent => ｢      ｣\n         body => ｢Set ret mul num fat sub num 1｣\n          statement => ｢Set ret mul num fat sub num 1｣\n           name => ｢ret｣\n           wanted => ｢mul num fat sub num 1｣\n            value-ret => ｢mul num fat sub num 1｣\n             func-name => ｢mul｣\n              func => ｢mul｣\n             arg-list => ｢num fat sub num 1｣\n              wanted => ｢num｣\n               value-ret => ｢num｣\n                var-name => ｢num｣\n                 var => ｢num｣\n              wanted => ｢fat sub num 1｣\n               value-ret => ｢fat sub num 1｣\n                func-name => ｢fat｣\n                 func => ｢fat｣\n                arg-list => ｢sub num 1｣\n                 wanted => ｢sub num 1｣\n                  value-ret => ｢sub num 1｣\n                   func-name => ｢sub｣\n                    func => ｢sub｣\n                   arg-list => ｢num 1｣\n                    wanted => ｢num｣\n                     value-ret => ｢num｣\n                      var-name => ｢num｣\n                       var => ｢num｣\n                    wanted => ｢1｣\n                     value-ret => ｢1｣\n                      value => ｢1｣\n      line => ｢   ret｣\n       statement => ｢ret｣\n        value-ret => ｢ret｣\n         var-name => ｢ret｣\n          var => ｢ret｣\n line => ｢print toString fat 5｣\n  statement => ｢print toString fat 5｣\n   value-ret => ｢print toString fat 5｣\n    func-name => ｢print｣\n     func => ｢print｣\n    arg-list => ｢toString fat 5｣\n     wanted => ｢toString fat 5｣\n      value-ret => ｢toString fat 5｣\n       func-name => ｢toString｣\n        func => ｢toString｣\n       arg-list => ｢fat 5｣\n        wanted => ｢fat 5｣\n         value-ret => ｢fat 5｣\n          func-name => ｢fat｣\n           func => ｢fat｣\n          arg-list => ｢5｣\n           wanted => ｢5｣\n            value-ret => ｢5｣\n             value => ｢5｣\n------------\nAST:\nUse of uninitialized value of type Str in string context.\nMethods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.\n  in method gist at /Users/fernando/Documents/Projects/berna/lib/Berna/AST.pm6 (Berna::AST) line 51\nBerna::AST::Function :name(fat):\n   :signature[\n      Berna::AST::Param.new(name => \"num\", type => \"Number\")\n   ]\n   :body[\n      Berna::AST::DeclareVariable :variable-name(ret) :type(Number)\n         Berna::AST::NVal :value(1)\n      Berna::AST::If:\n         :condition[\n            Berna::AST::CallFunction :function-name(not):\n               Berna::AST::CallFunction :function-name(equal):\n                  Berna::AST::VariableVal :variable-name(num) :type(Number)\n                  Berna::AST::NVal :value(1)\n         ]\n         :if[\n            Berna::AST::SetVariable :variable-name(ret) :type()\n               Berna::AST::CallFunction :function-name(mul):\n                  Berna::AST::VariableVal :variable-name(num) :type(Number)\n                  Berna::AST::CallFunction :function-name(fat):\n                     Berna::AST::CallFunction :function-name(sub):\n                        Berna::AST::VariableVal :variable-name(num) :type(Number)\n                        Berna::AST::NVal :value(1)\n         ]\n         :else[\n\n         ]\n      Berna::AST::VariableVal :variable-name(ret) :type(Number)\n   ]\nBerna::AST::CallFunction :function-name(print):\n   Berna::AST::CallFunction :function-name(toString):\n      Berna::AST::CallFunction :function-name(fat):\n         Berna::AST::NVal :value(5)\n------------\n\nLIST:\n0: \t[DECLARE-FUNC fat Number]\n1: \t[PUSH-CONST 4]\n2: \t[SET-FUNC fat]\n3: \t[GOTO 29]\n4: \t[DECLARE-VAR num Number]\n5: \t[SET-VAR num]\n6: \t[DECLARE-VAR ret Number]\n7: \t[PUSH-CONST 1]\n8: \t[SET-VAR ret]\n9: \t[PUSH-CONST 15]\n10: \t[PUSH-CONST 14]\n11: \t[PUSH-CONST 1]\n12: \t[GET-VAR num]\n13: \t[CALL-FUNC equal 2]\n14: \t[CALL-FUNC not 1]\n15: \t[PUSH-CONST 27]\n16: \t[JUMP-IF-FALSE]\n17: \t[PUSH-CONST 26]\n18: \t[PUSH-CONST 24]\n19: \t[PUSH-CONST 23]\n20: \t[PUSH-CONST 1]\n21: \t[GET-VAR num]\n22: \t[CALL-FUNC sub 2]\n23: \t[CALL-FUNC fat 1]\n24: \t[GET-VAR num]\n25: \t[CALL-FUNC mul 2]\n26: \t[SET-VAR ret]\n27: \t[GET-VAR ret]\n28: \t[RETURN]\n29: \t[PUSH-CONST 36]\n30: \t[PUSH-CONST 35]\n31: \t[PUSH-CONST 34]\n32: \t[PUSH-CONST 5]\n33: \t[CALL-FUNC fat 1]\n34: \t[CALL-FUNC toString 1]\n35: \t[CALL-FUNC print 1]\n------------\n\nCMD:     [DECLARE-FUNC fat Number]\nSTACK:   []\nPOSITION: 1\nCMD:     [PUSH-CONST 4]\nSTACK:   [4]\nPOSITION: 2\nCMD:     [SET-FUNC fat]\nSTACK:   []\nPOSITION: 3\nCMD:     [GOTO 29]\nSTACK:   []\nPOSITION: 29\nCMD:     [PUSH-CONST 36]\nSTACK:   [36]\nPOSITION: 30\nCMD:     [PUSH-CONST 35]\nSTACK:   [36 35]\nPOSITION: 31\nCMD:     [PUSH-CONST 34]\nSTACK:   [36 35 34]\nPOSITION: 32\nCMD:     [PUSH-CONST 5]\nSTACK:   [36 35 34 5]\nPOSITION: 33\nCMD:     [CALL-FUNC fat 1]\nSTACK:   [36 35 34 5]\nPOSITION: 4\nCMD:     [DECLARE-VAR num Number]\nSTACK:   [36 35 34 5]\nPOSITION: 5\nCMD:     [SET-VAR num]\nSTACK:   [36 35 34]\nPOSITION: 6\nCMD:     [DECLARE-VAR ret Number]\nSTACK:   [36 35 34]\nPOSITION: 7\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 1]\nPOSITION: 8\nCMD:     [SET-VAR ret]\nSTACK:   [36 35 34]\nPOSITION: 9\nCMD:     [PUSH-CONST 15]\nSTACK:   [36 35 34 15]\nPOSITION: 10\nCMD:     [PUSH-CONST 14]\nSTACK:   [36 35 34 15 14]\nPOSITION: 11\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 15 14 1]\nPOSITION: 12\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 15 14 1 5]\nPOSITION: 13\nCMD:     [CALL-FUNC equal 2]\nSTACK:   [36 35 34 15 False]\nPOSITION: 14\nCMD:     [CALL-FUNC not 1]\nSTACK:   [36 35 34 True]\nPOSITION: 15\nCMD:     [PUSH-CONST 27]\nSTACK:   [36 35 34 True 27]\nPOSITION: 16\nCMD:     [JUMP-IF-FALSE]\nSTACK:   [36 35 34]\nPOSITION: 17\nCMD:     [PUSH-CONST 26]\nSTACK:   [36 35 34 26]\nPOSITION: 18\nCMD:     [PUSH-CONST 24]\nSTACK:   [36 35 34 26 24]\nPOSITION: 19\nCMD:     [PUSH-CONST 23]\nSTACK:   [36 35 34 26 24 23]\nPOSITION: 20\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 23 1]\nPOSITION: 21\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 23 1 5]\nPOSITION: 22\nCMD:     [CALL-FUNC sub 2]\nSTACK:   [36 35 34 26 24 4]\nPOSITION: 23\nCMD:     [CALL-FUNC fat 1]\nSTACK:   [36 35 34 26 24 4]\nPOSITION: 4\nCMD:     [DECLARE-VAR num Number]\nSTACK:   [36 35 34 26 24 4]\nPOSITION: 5\nCMD:     [SET-VAR num]\nSTACK:   [36 35 34 26 24]\nPOSITION: 6\nCMD:     [DECLARE-VAR ret Number]\nSTACK:   [36 35 34 26 24]\nPOSITION: 7\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 1]\nPOSITION: 8\nCMD:     [SET-VAR ret]\nSTACK:   [36 35 34 26 24]\nPOSITION: 9\nCMD:     [PUSH-CONST 15]\nSTACK:   [36 35 34 26 24 15]\nPOSITION: 10\nCMD:     [PUSH-CONST 14]\nSTACK:   [36 35 34 26 24 15 14]\nPOSITION: 11\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 15 14 1]\nPOSITION: 12\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 15 14 1 4]\nPOSITION: 13\nCMD:     [CALL-FUNC equal 2]\nSTACK:   [36 35 34 26 24 15 False]\nPOSITION: 14\nCMD:     [CALL-FUNC not 1]\nSTACK:   [36 35 34 26 24 True]\nPOSITION: 15\nCMD:     [PUSH-CONST 27]\nSTACK:   [36 35 34 26 24 True 27]\nPOSITION: 16\nCMD:     [JUMP-IF-FALSE]\nSTACK:   [36 35 34 26 24]\nPOSITION: 17\nCMD:     [PUSH-CONST 26]\nSTACK:   [36 35 34 26 24 26]\nPOSITION: 18\nCMD:     [PUSH-CONST 24]\nSTACK:   [36 35 34 26 24 26 24]\nPOSITION: 19\nCMD:     [PUSH-CONST 23]\nSTACK:   [36 35 34 26 24 26 24 23]\nPOSITION: 20\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 26 24 23 1]\nPOSITION: 21\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 26 24 23 1 4]\nPOSITION: 22\nCMD:     [CALL-FUNC sub 2]\nSTACK:   [36 35 34 26 24 26 24 3]\nPOSITION: 23\nCMD:     [CALL-FUNC fat 1]\nSTACK:   [36 35 34 26 24 26 24 3]\nPOSITION: 4\nCMD:     [DECLARE-VAR num Number]\nSTACK:   [36 35 34 26 24 26 24 3]\nPOSITION: 5\nCMD:     [SET-VAR num]\nSTACK:   [36 35 34 26 24 26 24]\nPOSITION: 6\nCMD:     [DECLARE-VAR ret Number]\nSTACK:   [36 35 34 26 24 26 24]\nPOSITION: 7\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 26 24 1]\nPOSITION: 8\nCMD:     [SET-VAR ret]\nSTACK:   [36 35 34 26 24 26 24]\nPOSITION: 9\nCMD:     [PUSH-CONST 15]\nSTACK:   [36 35 34 26 24 26 24 15]\nPOSITION: 10\nCMD:     [PUSH-CONST 14]\nSTACK:   [36 35 34 26 24 26 24 15 14]\nPOSITION: 11\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 26 24 15 14 1]\nPOSITION: 12\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 26 24 15 14 1 3]\nPOSITION: 13\nCMD:     [CALL-FUNC equal 2]\nSTACK:   [36 35 34 26 24 26 24 15 False]\nPOSITION: 14\nCMD:     [CALL-FUNC not 1]\nSTACK:   [36 35 34 26 24 26 24 True]\nPOSITION: 15\nCMD:     [PUSH-CONST 27]\nSTACK:   [36 35 34 26 24 26 24 True 27]\nPOSITION: 16\nCMD:     [JUMP-IF-FALSE]\nSTACK:   [36 35 34 26 24 26 24]\nPOSITION: 17\nCMD:     [PUSH-CONST 26]\nSTACK:   [36 35 34 26 24 26 24 26]\nPOSITION: 18\nCMD:     [PUSH-CONST 24]\nSTACK:   [36 35 34 26 24 26 24 26 24]\nPOSITION: 19\nCMD:     [PUSH-CONST 23]\nSTACK:   [36 35 34 26 24 26 24 26 24 23]\nPOSITION: 20\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 26 24 26 24 23 1]\nPOSITION: 21\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 26 24 26 24 23 1 3]\nPOSITION: 22\nCMD:     [CALL-FUNC sub 2]\nSTACK:   [36 35 34 26 24 26 24 26 24 2]\nPOSITION: 23\nCMD:     [CALL-FUNC fat 1]\nSTACK:   [36 35 34 26 24 26 24 26 24 2]\nPOSITION: 4\nCMD:     [DECLARE-VAR num Number]\nSTACK:   [36 35 34 26 24 26 24 26 24 2]\nPOSITION: 5\nCMD:     [SET-VAR num]\nSTACK:   [36 35 34 26 24 26 24 26 24]\nPOSITION: 6\nCMD:     [DECLARE-VAR ret Number]\nSTACK:   [36 35 34 26 24 26 24 26 24]\nPOSITION: 7\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 26 24 26 24 1]\nPOSITION: 8\nCMD:     [SET-VAR ret]\nSTACK:   [36 35 34 26 24 26 24 26 24]\nPOSITION: 9\nCMD:     [PUSH-CONST 15]\nSTACK:   [36 35 34 26 24 26 24 26 24 15]\nPOSITION: 10\nCMD:     [PUSH-CONST 14]\nSTACK:   [36 35 34 26 24 26 24 26 24 15 14]\nPOSITION: 11\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 26 24 26 24 15 14 1]\nPOSITION: 12\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 26 24 26 24 15 14 1 2]\nPOSITION: 13\nCMD:     [CALL-FUNC equal 2]\nSTACK:   [36 35 34 26 24 26 24 26 24 15 False]\nPOSITION: 14\nCMD:     [CALL-FUNC not 1]\nSTACK:   [36 35 34 26 24 26 24 26 24 True]\nPOSITION: 15\nCMD:     [PUSH-CONST 27]\nSTACK:   [36 35 34 26 24 26 24 26 24 True 27]\nPOSITION: 16\nCMD:     [JUMP-IF-FALSE]\nSTACK:   [36 35 34 26 24 26 24 26 24]\nPOSITION: 17\nCMD:     [PUSH-CONST 26]\nSTACK:   [36 35 34 26 24 26 24 26 24 26]\nPOSITION: 18\nCMD:     [PUSH-CONST 24]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24]\nPOSITION: 19\nCMD:     [PUSH-CONST 23]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 23]\nPOSITION: 20\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 23 1]\nPOSITION: 21\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 23 1 2]\nPOSITION: 22\nCMD:     [CALL-FUNC sub 2]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 1]\nPOSITION: 23\nCMD:     [CALL-FUNC fat 1]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 1]\nPOSITION: 4\nCMD:     [DECLARE-VAR num Number]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 1]\nPOSITION: 5\nCMD:     [SET-VAR num]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24]\nPOSITION: 6\nCMD:     [DECLARE-VAR ret Number]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24]\nPOSITION: 7\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 1]\nPOSITION: 8\nCMD:     [SET-VAR ret]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24]\nPOSITION: 9\nCMD:     [PUSH-CONST 15]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 15]\nPOSITION: 10\nCMD:     [PUSH-CONST 14]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 15 14]\nPOSITION: 11\nCMD:     [PUSH-CONST 1]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 15 14 1]\nPOSITION: 12\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 15 14 1 1]\nPOSITION: 13\nCMD:     [CALL-FUNC equal 2]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 15 True]\nPOSITION: 14\nCMD:     [CALL-FUNC not 1]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 False]\nPOSITION: 15\nCMD:     [PUSH-CONST 27]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 False 27]\nPOSITION: 16\nCMD:     [JUMP-IF-FALSE]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24]\nPOSITION: 27\nCMD:     [GET-VAR ret]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 24 1]\nPOSITION: 28\nCMD:     [RETURN]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 1]\nPOSITION: 24\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 26 24 26 24 26 1 2]\nPOSITION: 25\nCMD:     [CALL-FUNC mul 2]\nSTACK:   [36 35 34 26 24 26 24 26 24 2]\nPOSITION: 26\nCMD:     [SET-VAR ret]\nSTACK:   [36 35 34 26 24 26 24 26 24]\nPOSITION: 27\nCMD:     [GET-VAR ret]\nSTACK:   [36 35 34 26 24 26 24 26 24 2]\nPOSITION: 28\nCMD:     [RETURN]\nSTACK:   [36 35 34 26 24 26 24 26 2]\nPOSITION: 24\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 26 24 26 2 3]\nPOSITION: 25\nCMD:     [CALL-FUNC mul 2]\nSTACK:   [36 35 34 26 24 26 24 6]\nPOSITION: 26\nCMD:     [SET-VAR ret]\nSTACK:   [36 35 34 26 24 26 24]\nPOSITION: 27\nCMD:     [GET-VAR ret]\nSTACK:   [36 35 34 26 24 26 24 6]\nPOSITION: 28\nCMD:     [RETURN]\nSTACK:   [36 35 34 26 24 26 6]\nPOSITION: 24\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 26 6 4]\nPOSITION: 25\nCMD:     [CALL-FUNC mul 2]\nSTACK:   [36 35 34 26 24 24]\nPOSITION: 26\nCMD:     [SET-VAR ret]\nSTACK:   [36 35 34 26 24]\nPOSITION: 27\nCMD:     [GET-VAR ret]\nSTACK:   [36 35 34 26 24 24]\nPOSITION: 28\nCMD:     [RETURN]\nSTACK:   [36 35 34 26 24]\nPOSITION: 24\nCMD:     [GET-VAR num]\nSTACK:   [36 35 34 26 24 5]\nPOSITION: 25\nCMD:     [CALL-FUNC mul 2]\nSTACK:   [36 35 34 120]\nPOSITION: 26\nCMD:     [SET-VAR ret]\nSTACK:   [36 35 34]\nPOSITION: 27\nCMD:     [GET-VAR ret]\nSTACK:   [36 35 34 120]\nPOSITION: 28\nCMD:     [RETURN]\nSTACK:   [36 35 120]\nPOSITION: 34\nCMD:     [CALL-FUNC toString 1]\nSTACK:   [36 120]\nPOSITION: 35\nCMD:     [CALL-FUNC print 1]\n120\nSTACK:   []\nPOSITION: 36","name":"","extension":"txt","url":"https://www.irccloud.com/pastebin/fz0XhcxN","modified":1546892147,"id":"fz0XhcxN","size":16041,"lines":605,"own_paste":false,"theme":"","date":1546892147}