# Pastebin fz0XhcxN $ perl6 -Ilib bin/berna --print-code --print-match --print-ast --print-list --print-runtime -e=' Function Number fat Number num Number ret 1 If not equal num 1 Set ret mul num fat sub num 1 ret print toString fat 5 ' CODE: Function Number fat Number num Number ret 1 If not equal num 1 Set ret mul num fat sub num 1 ret print toString fat 5 ------------ MATCH: 「 Function Number fat Number num Number ret 1 If not equal num 1 Set ret mul num fat sub num 1 ret print toString fat 5 」 line => 「Function Number fat Number num Number ret 1 If not equal num 1 Set ret mul num fat sub num 1 ret」 statement => 「Function Number fat Number num Number ret 1 If not equal num 1 Set ret mul num fat sub num 1 ret」 declare => 「Function Number fat Number num Number ret 1 If not equal num 1 Set ret mul num fat sub num 1 ret」 decl-func => 「Function Number fat Number num Number ret 1 If not equal num 1 Set ret mul num fat sub num 1 ret」 func-proto => 「Function Number fat Number num」 func-keyword => 「Function」 type-name => 「Number」 name => 「fat」 pair-args => 「Number num」 type-name => 「Number」 name => 「num」 new-indent => 「 」 body => 「Number ret 1 If not equal num 1 Set ret mul num fat sub num 1 ret」 statement => 「Number ret 1」 declare => 「Number ret 1」 type-name => 「Number」 name => 「ret」 statement => 「1」 value-ret => 「1」 value => 「1」 line => 「 If not equal num 1 Set ret mul num fat sub num 1」 statement => 「If not equal num 1 Set ret mul num fat sub num 1」 control => 「If not equal num 1 Set ret mul num fat sub num 1」 sym => 「If」 wanted => 「not equal num 1」 value-ret => 「not equal num 1」 func-name => 「not」 func => 「not」 arg-list => 「equal num 1」 wanted => 「equal num 1」 value-ret => 「equal num 1」 func-name => 「equal」 func => 「equal」 arg-list => 「num 1」 wanted => 「num」 value-ret => 「num」 var-name => 「num」 var => 「num」 wanted => 「1」 value-ret => 「1」 value => 「1」 new-indent => 「 」 body => 「Set ret mul num fat sub num 1」 statement => 「Set ret mul num fat sub num 1」 name => 「ret」 wanted => 「mul num fat sub num 1」 value-ret => 「mul num fat sub num 1」 func-name => 「mul」 func => 「mul」 arg-list => 「num fat sub num 1」 wanted => 「num」 value-ret => 「num」 var-name => 「num」 var => 「num」 wanted => 「fat sub num 1」 value-ret => 「fat sub num 1」 func-name => 「fat」 func => 「fat」 arg-list => 「sub num 1」 wanted => 「sub num 1」 value-ret => 「sub num 1」 func-name => 「sub」 func => 「sub」 arg-list => 「num 1」 wanted => 「num」 value-ret => 「num」 var-name => 「num」 var => 「num」 wanted => 「1」 value-ret => 「1」 value => 「1」 line => 「 ret」 statement => 「ret」 value-ret => 「ret」 var-name => 「ret」 var => 「ret」 line => 「print toString fat 5」 statement => 「print toString fat 5」 value-ret => 「print toString fat 5」 func-name => 「print」 func => 「print」 arg-list => 「toString fat 5」 wanted => 「toString fat 5」 value-ret => 「toString fat 5」 func-name => 「toString」 func => 「toString」 arg-list => 「fat 5」 wanted => 「fat 5」 value-ret => 「fat 5」 func-name => 「fat」 func => 「fat」 arg-list => 「5」 wanted => 「5」 value-ret => 「5」 value => 「5」 ------------ AST: Use of uninitialized value of type Str in string context. Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful. in method gist at /Users/fernando/Documents/Projects/berna/lib/Berna/AST.pm6 (Berna::AST) line 51 Berna::AST::Function :name(fat): :signature[ Berna::AST::Param.new(name => "num", type => "Number") ] :body[ Berna::AST::DeclareVariable :variable-name(ret) :type(Number) Berna::AST::NVal :value(1) Berna::AST::If: :condition[ Berna::AST::CallFunction :function-name(not): Berna::AST::CallFunction :function-name(equal): Berna::AST::VariableVal :variable-name(num) :type(Number) Berna::AST::NVal :value(1) ] :if[ Berna::AST::SetVariable :variable-name(ret) :type() Berna::AST::CallFunction :function-name(mul): Berna::AST::VariableVal :variable-name(num) :type(Number) Berna::AST::CallFunction :function-name(fat): Berna::AST::CallFunction :function-name(sub): Berna::AST::VariableVal :variable-name(num) :type(Number) Berna::AST::NVal :value(1) ] :else[ ] Berna::AST::VariableVal :variable-name(ret) :type(Number) ] Berna::AST::CallFunction :function-name(print): Berna::AST::CallFunction :function-name(toString): Berna::AST::CallFunction :function-name(fat): Berna::AST::NVal :value(5) ------------ LIST: 0: [DECLARE-FUNC fat Number] 1: [PUSH-CONST 4] 2: [SET-FUNC fat] 3: [GOTO 29] 4: [DECLARE-VAR num Number] 5: [SET-VAR num] 6: [DECLARE-VAR ret Number] 7: [PUSH-CONST 1] 8: [SET-VAR ret] 9: [PUSH-CONST 15] 10: [PUSH-CONST 14] 11: [PUSH-CONST 1] 12: [GET-VAR num] 13: [CALL-FUNC equal 2] 14: [CALL-FUNC not 1] 15: [PUSH-CONST 27] 16: [JUMP-IF-FALSE] 17: [PUSH-CONST 26] 18: [PUSH-CONST 24] 19: [PUSH-CONST 23] 20: [PUSH-CONST 1] 21: [GET-VAR num] 22: [CALL-FUNC sub 2] 23: [CALL-FUNC fat 1] 24: [GET-VAR num] 25: [CALL-FUNC mul 2] 26: [SET-VAR ret] 27: [GET-VAR ret] 28: [RETURN] 29: [PUSH-CONST 36] 30: [PUSH-CONST 35] 31: [PUSH-CONST 34] 32: [PUSH-CONST 5] 33: [CALL-FUNC fat 1] 34: [CALL-FUNC toString 1] 35: [CALL-FUNC print 1] ------------ CMD: [DECLARE-FUNC fat Number] STACK: [] POSITION: 1 CMD: [PUSH-CONST 4] STACK: [4] POSITION: 2 CMD: [SET-FUNC fat] STACK: [] POSITION: 3 CMD: [GOTO 29] STACK: [] POSITION: 29 CMD: [PUSH-CONST 36] STACK: [36] POSITION: 30 CMD: [PUSH-CONST 35] STACK: [36 35] POSITION: 31 CMD: [PUSH-CONST 34] STACK: [36 35 34] POSITION: 32 CMD: [PUSH-CONST 5] STACK: [36 35 34 5] POSITION: 33 CMD: [CALL-FUNC fat 1] STACK: [36 35 34 5] POSITION: 4 CMD: [DECLARE-VAR num Number] STACK: [36 35 34 5] POSITION: 5 CMD: [SET-VAR num] STACK: [36 35 34] POSITION: 6 CMD: [DECLARE-VAR ret Number] STACK: [36 35 34] POSITION: 7 CMD: [PUSH-CONST 1] STACK: [36 35 34 1] POSITION: 8 CMD: [SET-VAR ret] STACK: [36 35 34] POSITION: 9 CMD: [PUSH-CONST 15] STACK: [36 35 34 15] POSITION: 10 CMD: [PUSH-CONST 14] STACK: [36 35 34 15 14] POSITION: 11 CMD: [PUSH-CONST 1] STACK: [36 35 34 15 14 1] POSITION: 12 CMD: [GET-VAR num] STACK: [36 35 34 15 14 1 5] POSITION: 13 CMD: [CALL-FUNC equal 2] STACK: [36 35 34 15 False] POSITION: 14 CMD: [CALL-FUNC not 1] STACK: [36 35 34 True] POSITION: 15 CMD: [PUSH-CONST 27] STACK: [36 35 34 True 27] POSITION: 16 CMD: [JUMP-IF-FALSE] STACK: [36 35 34] POSITION: 17 CMD: [PUSH-CONST 26] STACK: [36 35 34 26] POSITION: 18 CMD: [PUSH-CONST 24] STACK: [36 35 34 26 24] POSITION: 19 CMD: [PUSH-CONST 23] STACK: [36 35 34 26 24 23] POSITION: 20 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 23 1] POSITION: 21 CMD: [GET-VAR num] STACK: [36 35 34 26 24 23 1 5] POSITION: 22 CMD: [CALL-FUNC sub 2] STACK: [36 35 34 26 24 4] POSITION: 23 CMD: [CALL-FUNC fat 1] STACK: [36 35 34 26 24 4] POSITION: 4 CMD: [DECLARE-VAR num Number] STACK: [36 35 34 26 24 4] POSITION: 5 CMD: [SET-VAR num] STACK: [36 35 34 26 24] POSITION: 6 CMD: [DECLARE-VAR ret Number] STACK: [36 35 34 26 24] POSITION: 7 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 1] POSITION: 8 CMD: [SET-VAR ret] STACK: [36 35 34 26 24] POSITION: 9 CMD: [PUSH-CONST 15] STACK: [36 35 34 26 24 15] POSITION: 10 CMD: [PUSH-CONST 14] STACK: [36 35 34 26 24 15 14] POSITION: 11 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 15 14 1] POSITION: 12 CMD: [GET-VAR num] STACK: [36 35 34 26 24 15 14 1 4] POSITION: 13 CMD: [CALL-FUNC equal 2] STACK: [36 35 34 26 24 15 False] POSITION: 14 CMD: [CALL-FUNC not 1] STACK: [36 35 34 26 24 True] POSITION: 15 CMD: [PUSH-CONST 27] STACK: [36 35 34 26 24 True 27] POSITION: 16 CMD: [JUMP-IF-FALSE] STACK: [36 35 34 26 24] POSITION: 17 CMD: [PUSH-CONST 26] STACK: [36 35 34 26 24 26] POSITION: 18 CMD: [PUSH-CONST 24] STACK: [36 35 34 26 24 26 24] POSITION: 19 CMD: [PUSH-CONST 23] STACK: [36 35 34 26 24 26 24 23] POSITION: 20 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 26 24 23 1] POSITION: 21 CMD: [GET-VAR num] STACK: [36 35 34 26 24 26 24 23 1 4] POSITION: 22 CMD: [CALL-FUNC sub 2] STACK: [36 35 34 26 24 26 24 3] POSITION: 23 CMD: [CALL-FUNC fat 1] STACK: [36 35 34 26 24 26 24 3] POSITION: 4 CMD: [DECLARE-VAR num Number] STACK: [36 35 34 26 24 26 24 3] POSITION: 5 CMD: [SET-VAR num] STACK: [36 35 34 26 24 26 24] POSITION: 6 CMD: [DECLARE-VAR ret Number] STACK: [36 35 34 26 24 26 24] POSITION: 7 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 26 24 1] POSITION: 8 CMD: [SET-VAR ret] STACK: [36 35 34 26 24 26 24] POSITION: 9 CMD: [PUSH-CONST 15] STACK: [36 35 34 26 24 26 24 15] POSITION: 10 CMD: [PUSH-CONST 14] STACK: [36 35 34 26 24 26 24 15 14] POSITION: 11 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 26 24 15 14 1] POSITION: 12 CMD: [GET-VAR num] STACK: [36 35 34 26 24 26 24 15 14 1 3] POSITION: 13 CMD: [CALL-FUNC equal 2] STACK: [36 35 34 26 24 26 24 15 False] POSITION: 14 CMD: [CALL-FUNC not 1] STACK: [36 35 34 26 24 26 24 True] POSITION: 15 CMD: [PUSH-CONST 27] STACK: [36 35 34 26 24 26 24 True 27] POSITION: 16 CMD: [JUMP-IF-FALSE] STACK: [36 35 34 26 24 26 24] POSITION: 17 CMD: [PUSH-CONST 26] STACK: [36 35 34 26 24 26 24 26] POSITION: 18 CMD: [PUSH-CONST 24] STACK: [36 35 34 26 24 26 24 26 24] POSITION: 19 CMD: [PUSH-CONST 23] STACK: [36 35 34 26 24 26 24 26 24 23] POSITION: 20 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 26 24 26 24 23 1] POSITION: 21 CMD: [GET-VAR num] STACK: [36 35 34 26 24 26 24 26 24 23 1 3] POSITION: 22 CMD: [CALL-FUNC sub 2] STACK: [36 35 34 26 24 26 24 26 24 2] POSITION: 23 CMD: [CALL-FUNC fat 1] STACK: [36 35 34 26 24 26 24 26 24 2] POSITION: 4 CMD: [DECLARE-VAR num Number] STACK: [36 35 34 26 24 26 24 26 24 2] POSITION: 5 CMD: [SET-VAR num] STACK: [36 35 34 26 24 26 24 26 24] POSITION: 6 CMD: [DECLARE-VAR ret Number] STACK: [36 35 34 26 24 26 24 26 24] POSITION: 7 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 26 24 26 24 1] POSITION: 8 CMD: [SET-VAR ret] STACK: [36 35 34 26 24 26 24 26 24] POSITION: 9 CMD: [PUSH-CONST 15] STACK: [36 35 34 26 24 26 24 26 24 15] POSITION: 10 CMD: [PUSH-CONST 14] STACK: [36 35 34 26 24 26 24 26 24 15 14] POSITION: 11 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 26 24 26 24 15 14 1] POSITION: 12 CMD: [GET-VAR num] STACK: [36 35 34 26 24 26 24 26 24 15 14 1 2] POSITION: 13 CMD: [CALL-FUNC equal 2] STACK: [36 35 34 26 24 26 24 26 24 15 False] POSITION: 14 CMD: [CALL-FUNC not 1] STACK: [36 35 34 26 24 26 24 26 24 True] POSITION: 15 CMD: [PUSH-CONST 27] STACK: [36 35 34 26 24 26 24 26 24 True 27] POSITION: 16 CMD: [JUMP-IF-FALSE] STACK: [36 35 34 26 24 26 24 26 24] POSITION: 17 CMD: [PUSH-CONST 26] STACK: [36 35 34 26 24 26 24 26 24 26] POSITION: 18 CMD: [PUSH-CONST 24] STACK: [36 35 34 26 24 26 24 26 24 26 24] POSITION: 19 CMD: [PUSH-CONST 23] STACK: [36 35 34 26 24 26 24 26 24 26 24 23] POSITION: 20 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 26 24 26 24 26 24 23 1] POSITION: 21 CMD: [GET-VAR num] STACK: [36 35 34 26 24 26 24 26 24 26 24 23 1 2] POSITION: 22 CMD: [CALL-FUNC sub 2] STACK: [36 35 34 26 24 26 24 26 24 26 24 1] POSITION: 23 CMD: [CALL-FUNC fat 1] STACK: [36 35 34 26 24 26 24 26 24 26 24 1] POSITION: 4 CMD: [DECLARE-VAR num Number] STACK: [36 35 34 26 24 26 24 26 24 26 24 1] POSITION: 5 CMD: [SET-VAR num] STACK: [36 35 34 26 24 26 24 26 24 26 24] POSITION: 6 CMD: [DECLARE-VAR ret Number] STACK: [36 35 34 26 24 26 24 26 24 26 24] POSITION: 7 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 26 24 26 24 26 24 1] POSITION: 8 CMD: [SET-VAR ret] STACK: [36 35 34 26 24 26 24 26 24 26 24] POSITION: 9 CMD: [PUSH-CONST 15] STACK: [36 35 34 26 24 26 24 26 24 26 24 15] POSITION: 10 CMD: [PUSH-CONST 14] STACK: [36 35 34 26 24 26 24 26 24 26 24 15 14] POSITION: 11 CMD: [PUSH-CONST 1] STACK: [36 35 34 26 24 26 24 26 24 26 24 15 14 1] POSITION: 12 CMD: [GET-VAR num] STACK: [36 35 34 26 24 26 24 26 24 26 24 15 14 1 1] POSITION: 13 CMD: [CALL-FUNC equal 2] STACK: [36 35 34 26 24 26 24 26 24 26 24 15 True] POSITION: 14 CMD: [CALL-FUNC not 1] STACK: [36 35 34 26 24 26 24 26 24 26 24 False] POSITION: 15 CMD: [PUSH-CONST 27] STACK: [36 35 34 26 24 26 24 26 24 26 24 False 27] POSITION: 16 CMD: [JUMP-IF-FALSE] STACK: [36 35 34 26 24 26 24 26 24 26 24] POSITION: 27 CMD: [GET-VAR ret] STACK: [36 35 34 26 24 26 24 26 24 26 24 1] POSITION: 28 CMD: [RETURN] STACK: [36 35 34 26 24 26 24 26 24 26 1] POSITION: 24 CMD: [GET-VAR num] STACK: [36 35 34 26 24 26 24 26 24 26 1 2] POSITION: 25 CMD: [CALL-FUNC mul 2] STACK: [36 35 34 26 24 26 24 26 24 2] POSITION: 26 CMD: [SET-VAR ret] STACK: [36 35 34 26 24 26 24 26 24] POSITION: 27 CMD: [GET-VAR ret] STACK: [36 35 34 26 24 26 24 26 24 2] POSITION: 28 CMD: [RETURN] STACK: [36 35 34 26 24 26 24 26 2] POSITION: 24 CMD: [GET-VAR num] STACK: [36 35 34 26 24 26 24 26 2 3] POSITION: 25 CMD: [CALL-FUNC mul 2] STACK: [36 35 34 26 24 26 24 6] POSITION: 26 CMD: [SET-VAR ret] STACK: [36 35 34 26 24 26 24] POSITION: 27 CMD: [GET-VAR ret] STACK: [36 35 34 26 24 26 24 6] POSITION: 28 CMD: [RETURN] STACK: [36 35 34 26 24 26 6] POSITION: 24 CMD: [GET-VAR num] STACK: [36 35 34 26 24 26 6 4] POSITION: 25 CMD: [CALL-FUNC mul 2] STACK: [36 35 34 26 24 24] POSITION: 26 CMD: [SET-VAR ret] STACK: [36 35 34 26 24] POSITION: 27 CMD: [GET-VAR ret] STACK: [36 35 34 26 24 24] POSITION: 28 CMD: [RETURN] STACK: [36 35 34 26 24] POSITION: 24 CMD: [GET-VAR num] STACK: [36 35 34 26 24 5] POSITION: 25 CMD: [CALL-FUNC mul 2] STACK: [36 35 34 120] POSITION: 26 CMD: [SET-VAR ret] STACK: [36 35 34] POSITION: 27 CMD: [GET-VAR ret] STACK: [36 35 34 120] POSITION: 28 CMD: [RETURN] STACK: [36 35 120] POSITION: 34 CMD: [CALL-FUNC toString 1] STACK: [36 120] POSITION: 35 CMD: [CALL-FUNC print 1] 120 STACK: [] POSITION: 36