diff --git a/scratch/first.txt b/scratch/first.txt new file mode 100644 index 0000000..26c0300 --- /dev/null +++ b/scratch/first.txt @@ -0,0 +1,249 @@ +=== vm run: test === +0000: [] (_,_,_,_,_,_,_,_) +0000: reset_match +0001: [] (_,_,_,_,_,_,_,_) +0001: constant 00000: 2 +0004: [->2<-] (_,_,_,_,_,_,_,_) +0004: match +0005: [->2<-] (_,_,_,_,_,_,_,_) +0005: panic_if_no_match +0006: [->2<-] (_,_,_,_,_,_,_,_) +0006: push_list +0007: [->2<-|[]] (_,_,_,_,_,_,_,_) +0007: constant 00001: 1 +0010: [->2<-|[]|1] (_,_,_,_,_,_,_,_) +0010: append_list +0011: [->2<-|[1]] (_,_,_,_,_,_,_,_) +0011: constant 00000: 2 +0014: [->2<-|[1]|2] (_,_,_,_,_,_,_,_) +0014: append_list +0015: [->2<-|[1, 2]] (_,_,_,_,_,_,_,_) +0015: constant 00002: 3 +0018: [->2<-|[1, 2]|3] (_,_,_,_,_,_,_,_) +0018: append_list +0019: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0019: ***entering loop with stack depth of 2 +0021: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0021: store_n 001 +0023: [->2<-] ([1, 2, 3],_,_,_,_,_,_,_) +0023: ***after store, stack depth is now 2 +0025: [->2<-] ([1, 2, 3],_,_,_,_,_,_,_) +0025: load +0026: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0026: ***after load, stack depth is now 2 +0028: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0028: reset_match +0029: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0029: match_depth 000 +0031: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0031: match_list 000 +0033: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0033: jump_if_no_match 00006 +0042: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0042: jump_if_no_match 00010 +0055: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0055: reset_match +0056: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0056: match_depth 000 +0058: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0058: match_list 001 +0060: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0060: jump_if_no_match 00012 +0075: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0075: jump_if_no_match 00030 +0108: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0108: reset_match +0109: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0109: match_depth 000 +0111: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0111: match_splatted_list 002 +0113: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0113: jump_if_no_match 00019 +0116: [->2<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0116: load_splatted_list 002 +0118: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0118: match_depth 001 +0120: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0120: match +0121: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0121: jump_if_no_match 00010 +0124: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0124: match_depth 000 +0126: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0126: match +0127: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0127: jump_if_no_match 00004 +0130: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0130: jump 00002 +0135: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0135: jump_if_no_match 00068 +0138: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0138: ***before visiting body, the stack depth is 4 +0140: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0140: ***calling function eq? stack depth: 4 +0142: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0142: ***calling function first stack depth: 4 +0144: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0144: resolving binding `xs` in test +0146: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0146: push_binding 003 +0148: [->2<-|[1, 2, 3]|1|[2, 3]|[2, 3]] (_,_,_,_,_,_,_,_) +0148: resolving binding `first` in test +0150: [->2<-|[1, 2, 3]|1|[2, 3]|[2, 3]] (_,_,_,_,_,_,_,_) +0150: constant 00004: :first +0153: [->2<-|[1, 2, 3]|1|[2, 3]|[2, 3]|:first] (_,_,_,_,_,_,_,_) +0153: push_global +0154: [->2<-|[1, 2, 3]|1|[2, 3]|[2, 3]|fn first] (_,_,_,_,_,_,_,_) +0154: ***after 1 args stack depth: 6 +0156: [->2<-|[1, 2, 3]|1|[2, 3]|[2, 3]|fn first] (_,_,_,_,_,_,_,_) +0156: call 001 +=== calling into fn first/1 === +0000: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0000: reset_match +0001: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0001: match_depth 000 +0003: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0003: match_list 000 +0005: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0005: jump_if_no_match 00006 +0014: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0014: jump_if_no_match 00003 +0020: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0020: jump_if_no_match 00005 +0028: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0028: match_depth 000 +0030: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0030: constant 00000: :list +0033: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|:list] (_,_,_,_,_,_,_,_) +0033: match_type +0034: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0034: jump_if_no_match 00003 +0037: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0037: jump 00000 +0040: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0040: jump_if_no_match 00024 +0043: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0043: ***accessing keyword: base :first stack depth: 1 +0045: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0045: resolving binding `base` in first +0047: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0047: get_upvalue 000 +0049: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|#{:rest fn rest/base...] (_,_,_,_,_,_,_,_) +0049: constant 00001: :first +0052: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|#{:rest fn rest/base...|:first] (_,_,_,_,_,_,_,_) +0052: get_key +0053: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|fn first/base] (_,_,_,_,_,_,_,_) +0053: ***after keyword access stack depth: 2 +0055: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|fn first/base] (_,_,_,_,_,_,_,_) +0055: stash +0056: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|fn first/base] (fn first/base,_,_,_,_,_,_,_) +0056: pop +0057: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (fn first/base,_,_,_,_,_,_,_) +0057: resolving binding `xs` in first +0059: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (fn first/base,_,_,_,_,_,_,_) +0059: push_binding 000 +0061: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|[2, 3]] (fn first/base,_,_,_,_,_,_,_) +0061: load +0062: [2|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|[2, 3]|fn first/base] (_,_,_,_,_,_,_,_) +0062: tail_call 001 +=== tail call into fn first/base/1 from first === +0158: [->2<-|[1, 2, 3]|1|[2, 3]|2] (_,_,_,_,_,_,_,_) +0158: resolving binding `test` in test +0160: [->2<-|[1, 2, 3]|1|[2, 3]|2] (_,_,_,_,_,_,_,_) +0160: push_binding 000 +0162: [->2<-|[1, 2, 3]|1|[2, 3]|2|2] (_,_,_,_,_,_,_,_) +0162: resolving binding `eq?` in test +0164: [->2<-|[1, 2, 3]|1|[2, 3]|2|2] (_,_,_,_,_,_,_,_) +0164: constant 00003: :eq? +0167: [->2<-|[1, 2, 3]|1|[2, 3]|2|2|:eq?] (_,_,_,_,_,_,_,_) +0167: push_global +0168: [->2<-|[1, 2, 3]|1|[2, 3]|2|2|fn eq?] (_,_,_,_,_,_,_,_) +0168: ***after 2 args stack depth: 7 +0170: [->2<-|[1, 2, 3]|1|[2, 3]|2|2|fn eq?] (_,_,_,_,_,_,_,_) +0170: call 002 +=== calling into fn eq?/2 === +0000: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0000: reset_match +0001: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0001: match_depth 001 +0003: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0003: match +0004: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0004: jump_if_no_match 00009 +0007: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0007: match_depth 000 +0009: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0009: match +0010: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0010: jump_if_no_match 00003 +0013: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0013: jump 00000 +0016: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0016: jump_if_no_match 00029 +0019: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0019: ***accessing keyword: base :eq? stack depth: 2 +0021: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0021: resolving binding `base` in eq? +0023: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (_,_,_,_,_,_,_,_) +0023: get_upvalue 000 +0025: [2|[1, 2, 3]|1|[2, 3]|->2<-|2|#{:rest fn rest/base...] (_,_,_,_,_,_,_,_) +0025: constant 00000: :eq? +0028: [2|[1, 2, 3]|1|[2, 3]|->2<-|2|#{:rest fn rest/base...|:eq?] (_,_,_,_,_,_,_,_) +0028: get_key +0029: [2|[1, 2, 3]|1|[2, 3]|->2<-|2|fn eq?/base] (_,_,_,_,_,_,_,_) +0029: ***after keyword access stack depth: 3 +0031: [2|[1, 2, 3]|1|[2, 3]|->2<-|2|fn eq?/base] (_,_,_,_,_,_,_,_) +0031: stash +0032: [2|[1, 2, 3]|1|[2, 3]|->2<-|2|fn eq?/base] (fn eq?/base,_,_,_,_,_,_,_) +0032: pop +0033: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (fn eq?/base,_,_,_,_,_,_,_) +0033: resolving binding `x` in eq? +0035: [2|[1, 2, 3]|1|[2, 3]|->2<-|2] (fn eq?/base,_,_,_,_,_,_,_) +0035: push_binding 000 +0037: [2|[1, 2, 3]|1|[2, 3]|->2<-|2|2] (fn eq?/base,_,_,_,_,_,_,_) +0037: resolving binding `y` in eq? +0039: [2|[1, 2, 3]|1|[2, 3]|->2<-|2|2] (fn eq?/base,_,_,_,_,_,_,_) +0039: push_binding 001 +0041: [2|[1, 2, 3]|1|[2, 3]|->2<-|2|2|2] (fn eq?/base,_,_,_,_,_,_,_) +0041: load +0042: [2|[1, 2, 3]|1|[2, 3]|->2<-|2|2|2|fn eq?/base] (_,_,_,_,_,_,_,_) +0042: tail_call 002 +=== tail call into fn eq?/base/2 from eq? === +0172: [->2<-|[1, 2, 3]|1|[2, 3]|true] (_,_,_,_,_,_,_,_) +0172: jump_if_false 00004 +0175: [->2<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0175: true +0176: [->2<-|[1, 2, 3]|1|[2, 3]|true] (_,_,_,_,_,_,_,_) +0176: jump 00018 +0197: [->2<-|[1, 2, 3]|1|[2, 3]|true] (_,_,_,_,_,_,_,_) +0197: ***after visiting loop body, the stack depth is 5 +0199: [->2<-|[1, 2, 3]|1|[2, 3]|true] (_,_,_,_,_,_,_,_) +0199: store +0200: [->2<-|[1, 2, 3]|1|[2, 3]|_] (true,_,_,_,_,_,_,_) +0200: pop +0201: [->2<-|[1, 2, 3]|1|[2, 3]] (true,_,_,_,_,_,_,_) +0201: pop +0202: [->2<-|[1, 2, 3]|1] (true,_,_,_,_,_,_,_) +0202: pop +0203: [->2<-|[1, 2, 3]] (true,_,_,_,_,_,_,_) +0203: jump 00001 +0207: [->2<-|[1, 2, 3]] (true,_,_,_,_,_,_,_) +0207: load +0208: [->2<-|[1, 2, 3]|true] (_,_,_,_,_,_,_,_) +0208: store +0209: [->2<-|[1, 2, 3]|_] (true,_,_,_,_,_,_,_) +0209: pop_n 002 +0211: [->2<-] (true,_,_,_,_,_,_,_) +0211: load +0212: [->2<-] (_,_,_,_,_,_,_,_) +true + +********** +********** + + + + + + + diff --git a/scratch/second.txt b/scratch/second.txt new file mode 100644 index 0000000..f327df0 --- /dev/null +++ b/scratch/second.txt @@ -0,0 +1,291 @@ +=== vm run: test === +0000: [] (_,_,_,_,_,_,_,_) +0000: reset_match +0001: [] (_,_,_,_,_,_,_,_) +0001: constant 00000: 4 +0004: [->4<-] (_,_,_,_,_,_,_,_) +0004: match +0005: [->4<-] (_,_,_,_,_,_,_,_) +0005: panic_if_no_match +0006: [->4<-] (_,_,_,_,_,_,_,_) +0006: push_list +0007: [->4<-|[]] (_,_,_,_,_,_,_,_) +0007: constant 00001: 1 +0010: [->4<-|[]|1] (_,_,_,_,_,_,_,_) +0010: append_list +0011: [->4<-|[1]] (_,_,_,_,_,_,_,_) +0011: constant 00002: 2 +0014: [->4<-|[1]|2] (_,_,_,_,_,_,_,_) +0014: append_list +0015: [->4<-|[1, 2]] (_,_,_,_,_,_,_,_) +0015: constant 00003: 3 +0018: [->4<-|[1, 2]|3] (_,_,_,_,_,_,_,_) +0018: append_list +0019: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0019: ***entering loop with stack depth of 2 +0021: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0021: store_n 001 +0023: [->4<-] ([1, 2, 3],_,_,_,_,_,_,_) +0023: ***after store, stack depth is now 2 +0025: [->4<-] ([1, 2, 3],_,_,_,_,_,_,_) +0025: load +0026: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0026: ***after load, stack depth is now 2 +0028: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0028: reset_match +0029: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0029: match_depth 000 +0031: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0031: match_list 000 +0033: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0033: jump_if_no_match 00006 +0042: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0042: jump_if_no_match 00010 +0055: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0055: reset_match +0056: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0056: match_depth 000 +0058: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0058: match_list 001 +0060: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0060: jump_if_no_match 00012 +0075: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0075: jump_if_no_match 00030 +0108: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0108: reset_match +0109: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0109: match_depth 000 +0111: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0111: match_splatted_list 002 +0113: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0113: jump_if_no_match 00019 +0116: [->4<-|[1, 2, 3]] (_,_,_,_,_,_,_,_) +0116: load_splatted_list 002 +0118: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0118: match_depth 001 +0120: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0120: match +0121: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0121: jump_if_no_match 00010 +0124: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0124: match_depth 000 +0126: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0126: match +0127: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0127: jump_if_no_match 00004 +0130: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0130: jump 00002 +0135: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0135: jump_if_no_match 00068 +0138: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0138: ***before visiting body, the stack depth is 4 +0140: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0140: ***calling function eq? stack depth: 4 +0142: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0142: ***calling function first stack depth: 4 +0144: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0144: resolving binding `xs` in test +0146: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0146: push_binding 003 +0148: [->4<-|[1, 2, 3]|1|[2, 3]|[2, 3]] (_,_,_,_,_,_,_,_) +0148: resolving binding `first` in test +0150: [->4<-|[1, 2, 3]|1|[2, 3]|[2, 3]] (_,_,_,_,_,_,_,_) +0150: constant 00005: :first +0153: [->4<-|[1, 2, 3]|1|[2, 3]|[2, 3]|:first] (_,_,_,_,_,_,_,_) +0153: push_global +0154: [->4<-|[1, 2, 3]|1|[2, 3]|[2, 3]|fn first] (_,_,_,_,_,_,_,_) +0154: ***after 1 args stack depth: 6 +0156: [->4<-|[1, 2, 3]|1|[2, 3]|[2, 3]|fn first] (_,_,_,_,_,_,_,_) +0156: call 001 +=== calling into fn first/1 === +0000: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0000: reset_match +0001: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0001: match_depth 000 +0003: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0003: match_list 000 +0005: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0005: jump_if_no_match 00006 +0014: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0014: jump_if_no_match 00003 +0020: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0020: jump_if_no_match 00005 +0028: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0028: match_depth 000 +0030: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0030: constant 00000: :list +0033: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|:list] (_,_,_,_,_,_,_,_) +0033: match_type +0034: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0034: jump_if_no_match 00003 +0037: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0037: jump 00000 +0040: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0040: jump_if_no_match 00024 +0043: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0043: ***accessing keyword: base :first stack depth: 1 +0045: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0045: resolving binding `base` in first +0047: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (_,_,_,_,_,_,_,_) +0047: get_upvalue 000 +0049: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|#{:append fn append/...] (_,_,_,_,_,_,_,_) +0049: constant 00001: :first +0052: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|#{:append fn append/...|:first] (_,_,_,_,_,_,_,_) +0052: get_key? +0053: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|fn first/base] (_,_,_,_,_,_,_,_) +0053: ***after keyword access stack depth: 2 +0055: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|fn first/base] (_,_,_,_,_,_,_,_) +0055: stash +0056: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|fn first/base] (fn first/base,_,_,_,_,_,_,_) +0056: pop +0057: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (fn first/base,_,_,_,_,_,_,_) +0057: resolving binding `xs` in first +0059: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-] (fn first/base,_,_,_,_,_,_,_) +0059: push_binding 000 +0061: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|[2, 3]] (fn first/base,_,_,_,_,_,_,_) +0061: load +0062: [4|[1, 2, 3]|1|[2, 3]|->[2, 3]<-|[2, 3]|fn first/base] (_,_,_,_,_,_,_,_) +0062: tail_call 001 +=== tail call into fn first/base/1 from first === +0158: [->4<-|[1, 2, 3]|1|[2, 3]|2] (_,_,_,_,_,_,_,_) +0158: resolving binding `test` in test +0160: [->4<-|[1, 2, 3]|1|[2, 3]|2] (_,_,_,_,_,_,_,_) +0160: push_binding 000 +0162: [->4<-|[1, 2, 3]|1|[2, 3]|2|4] (_,_,_,_,_,_,_,_) +0162: resolving binding `eq?` in test +0164: [->4<-|[1, 2, 3]|1|[2, 3]|2|4] (_,_,_,_,_,_,_,_) +0164: constant 00004: :eq? +0167: [->4<-|[1, 2, 3]|1|[2, 3]|2|4|:eq?] (_,_,_,_,_,_,_,_) +0167: push_global +0168: [->4<-|[1, 2, 3]|1|[2, 3]|2|4|fn eq?] (_,_,_,_,_,_,_,_) +0168: ***after 2 args stack depth: 7 +0170: [->4<-|[1, 2, 3]|1|[2, 3]|2|4|fn eq?] (_,_,_,_,_,_,_,_) +0170: call 002 +=== calling into fn eq?/2 === +0000: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0000: reset_match +0001: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0001: match_depth 001 +0003: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0003: match +0004: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0004: jump_if_no_match 00009 +0007: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0007: match_depth 000 +0009: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0009: match +0010: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0010: jump_if_no_match 00003 +0013: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0013: jump 00000 +0016: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0016: jump_if_no_match 00029 +0019: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0019: ***accessing keyword: base :eq? stack depth: 2 +0021: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0021: resolving binding `base` in eq? +0023: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (_,_,_,_,_,_,_,_) +0023: get_upvalue 000 +0025: [4|[1, 2, 3]|1|[2, 3]|->2<-|4|#{:append fn append/...] (_,_,_,_,_,_,_,_) +0025: constant 00000: :eq? +0028: [4|[1, 2, 3]|1|[2, 3]|->2<-|4|#{:append fn append/...|:eq?] (_,_,_,_,_,_,_,_) +0028: get_key +0029: [4|[1, 2, 3]|1|[2, 3]|->2<-|4|fn eq?/base] (_,_,_,_,_,_,_,_) +0029: ***after keyword access stack depth: 3 +0031: [4|[1, 2, 3]|1|[2, 3]|->2<-|4|fn eq?/base] (_,_,_,_,_,_,_,_) +0031: stash +0032: [4|[1, 2, 3]|1|[2, 3]|->2<-|4|fn eq?/base] (fn eq?/base,_,_,_,_,_,_,_) +0032: pop +0033: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (fn eq?/base,_,_,_,_,_,_,_) +0033: resolving binding `x` in eq? +0035: [4|[1, 2, 3]|1|[2, 3]|->2<-|4] (fn eq?/base,_,_,_,_,_,_,_) +0035: push_binding 000 +0037: [4|[1, 2, 3]|1|[2, 3]|->2<-|4|2] (fn eq?/base,_,_,_,_,_,_,_) +0037: resolving binding `y` in eq? +0039: [4|[1, 2, 3]|1|[2, 3]|->2<-|4|2] (fn eq?/base,_,_,_,_,_,_,_) +0039: push_binding 001 +0041: [4|[1, 2, 3]|1|[2, 3]|->2<-|4|2|4] (fn eq?/base,_,_,_,_,_,_,_) +0041: load +0042: [4|[1, 2, 3]|1|[2, 3]|->2<-|4|2|4|fn eq?/base] (_,_,_,_,_,_,_,_) +0042: tail_call 002 +=== tail call into fn eq?/base/2 from eq? === +0172: [->4<-|[1, 2, 3]|1|[2, 3]|false] (_,_,_,_,_,_,_,_) +0172: jump_if_false 00004 +0179: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0179: before visiting recur args the compiler thinks the stack depth is 5 +0181: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0181: recur arg: 0 +0183: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0183: resolving binding `xs` in test +0185: [->4<-|[1, 2, 3]|1|[2, 3]] (_,_,_,_,_,_,_,_) +0185: push_binding 003 +0187: [->4<-|[1, 2, 3]|1|[2, 3]|[2, 3]] (_,_,_,_,_,_,_,_) +0187: after visiting recur args the compiler thinks the stack depth is 6 +0189: [->4<-|[1, 2, 3]|1|[2, 3]|[2, 3]] (_,_,_,_,_,_,_,_) +0189: store_n 001 +0191: [->4<-|[1, 2, 3]|1|[2, 3]] ([2, 3],_,_,_,_,_,_,_) +0191: pop_n 004 +0193: [] ([2, 3],_,_,_,_,_,_,_) +0193: load +0194: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0194: jump_back 00168 +0026: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0026: ***after load, stack depth is now 2 +0028: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0028: reset_match +0029: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0029: match_depth 000 +0031: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0031: match_list 000 +0033: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0033: jump_if_no_match 00006 +0042: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0042: jump_if_no_match 00010 +0055: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0055: reset_match +0056: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0056: match_depth 000 +0058: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0058: match_list 001 +0060: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0060: jump_if_no_match 00012 +0075: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0075: jump_if_no_match 00030 +0108: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0108: reset_match +0109: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0109: match_depth 000 +0111: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0111: match_splatted_list 002 +0113: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0113: jump_if_no_match 00019 +0116: [->[2, 3]<-] (_,_,_,_,_,_,_,_) +0116: load_splatted_list 002 +0118: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0118: match_depth 001 +0120: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0120: match +0121: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0121: jump_if_no_match 00010 +0124: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0124: match_depth 000 +0126: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0126: match +0127: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0127: jump_if_no_match 00004 +0130: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0130: jump 00002 +0135: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0135: jump_if_no_match 00068 +0138: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0138: ***before visiting body, the stack depth is 4 +0140: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0140: ***calling function eq? stack depth: 4 +0142: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0142: ***calling function first stack depth: 4 +0144: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0144: resolving binding `xs` in test +0146: [->[2, 3]<-|2|[3]] (_,_,_,_,_,_,_,_) +0146: push_binding 003 +thread 'main' panicked at src/vm.rs:313:51: +index out of bounds: the len is 3 but the index is 3