diff --git a/compile.phi b/compile.phi index cedda74..8b978df 100644 --- a/compile.phi +++ b/compile.phi @@ -1,11 +1,12 @@ -(fn Emitter (ast filename) (do +(fn Emitter (ast initial_filename) (do (let output (list)) + (let filename initial_filename) - (let (enter_scope leave_scope define_sym get_sym print_syms) (Syms)) + (let syms (Syms)) - (let (let_node_reg_count let_node_reg_increment) (Counter)) (let (sym_id_count sym_id_increment) (Counter)) + (let (let_node_reg_count let_node_reg_increment) (Counter)) (let builtin_syms (list (list "format" "builtinFormat") @@ -33,6 +34,7 @@ (define_builtin ident builtin_id) )) + (enter_scope) (discover_syms ast) (emit_exprs ast) (return (strings_join output)) @@ -96,11 +98,17 @@ (emit (format "_%%" value sym_id)) ) (if (== sym_ty "param") (do (emit (format "_%%" value sym_id)) - ) (if (== sym_ty "let") (do + ) (if (== sym_ty "let") (do + (emit (format "_%%" value sym_id)) + ) (if (== sym_ty "imported") (do + // this might give problems in the future. + // the solution is to feed the imported symbol + // back into this code, so that stuff gets + // handled appropriately. (emit (format "_%%" value sym_id)) ) (do (panic "not implemented '%'" sym_ty) - ))))) + )))))) ) (do (panic "unknown expr type '%' on line %" ty line) ))))) @@ -115,7 +123,57 @@ (if (!= id_ty "ident") (do (panic "illegal function on line %" line) )) - (if (== id "fn") (do + (if (== id "import") (do + (let outer_filename filename) + (let (_ (_ _ inner_filename) (_ _ idents)) s) + (= filename inner_filename) + + (let text (read_text_file filename)) + (let tokens (tokenize text)) + (let parser (Parser tokens)) + (let (parse) parser) + (let ast (parse)) + (let (_ generate_imported) (Emitter ast filename)) + + (emit (format "runtime.setFile(\"%\");\n" filename)) + + (let outer_syms syms) + (= syms (Syms)) + (for (ident builtin_id) builtin_syms (do + (define_builtin ident builtin_id) + )) + + (enter_scope) + (discover_syms ast) + (emit_exprs ast) + (let sym_map (get_current_map)) + + (= syms outer_syms) + (= filename outer_filename) + + (emit (format "runtime.setFile(\"%\");\n" outer_filename)) + + (for (_ _ ident) idents (do + (let sym null) + (for (sym_ident found_sym) sym_map (do + (if (== sym_ident ident) (do + (= sym found_sym) + (break) + )) + )) + (if (== sym null) (do + (println "sym_map = %" sym_map) + (panic "no symbol '%' from imported '%'" ident filename) + )) + (let (_ sym_type) sym) + (if (== sym_type "imported") (do + (define_sym ident sym) + ) (do + (let (sym_id) sym) + (define_sym ident (list sym_id "imported" sym)) + )) + )) + ) (if (== id "fn") (do (let (_ (_ _ ident) (_ _ params) body) s) (let sym (get_sym ident)) @@ -138,7 +196,7 @@ (emit ") {\n") - (emit (format "runtime.pushCall(\"%\");\n" ident)) + (emit (format "runtime.pushCall(\"%\", \"%\");\n" ident filename)) (emit_expr body) (emit ";\nruntime.popCall();\nreturn { type: \"null\" };\n}") @@ -210,7 +268,7 @@ ) (if (== id "call") (do (let (_ callee) s) (let args (slice s 2)) - (emit (format "(runtime.setLine(%), " line)) + (emit (format "(%, " (rt_info line))) (emit_expr callee) (emit "(") @@ -235,7 +293,7 @@ (emit_assign_expr s line "-") ) (if (== id "or") (do (let (_ left right) s) - (emit (format "(runtime.setLine(%)" line)) + (emit (format "(%" (rt_info line) line)) (emit ", { type: \"bool\", value: runtime.truthy(") (emit_expr left) (emit ") || runtime.truthy(") @@ -243,7 +301,7 @@ (emit ") })") ) (if (== id "and") (do (let (_ left right) s) - (emit (format "(runtime.setLine(%)" line)) + (emit (format "(%" (rt_info line) line)) (emit ", { type: \"bool\", value: runtime.truthy(") (emit_expr left) (emit ") && runtime.truthy(") @@ -273,7 +331,7 @@ ) (do (let (callee) s) (let args (slice s 1)) - (emit (format "(runtime.setLine(%), " line)) + (emit (format "(%, " (rt_info line) line)) (emit_expr callee) (emit "(") @@ -288,7 +346,7 @@ )) (emit "))") - ))))))))))))))))))))))))) + )))))))))))))))))))))))))) )) (fn emit_list_literal (s) (do @@ -334,12 +392,16 @@ )) (fn emit_binary_op (s id) (do - (let (_ left right) s) - (emit (format "runtime.%(" id)) + (let ((_ line _) left right) s) + (emit (format "(%, runtime.%(" (rt_info line) id)) (emit_expr left) (emit ", ") (emit_expr right) - (emit ")") + (emit "))") + )) + + (fn rt_info (line) (do + (return (format "runtime.info(\"%\", %)" filename line)) )) (fn emit_assign_expr (s line id) (do @@ -410,6 +472,32 @@ (return sym_id) )) + // indirection for syms + (fn enter_scope () (do + (let (enter_scope) syms) + (enter_scope) + )) + (fn leave_scope () (do + (let (_ leave_scope) syms) + (leave_scope) + )) + (fn define_sym (ident sym) (do + (let (_ _ define_sym) syms) + (return (define_sym ident sym)) + )) + (fn get_sym (ident) (do + (let (_ _ _ get_sym) syms) + (return (get_sym ident)) + )) + (fn get_current_map () (do + (let (_ _ _ _ get_current_map) syms) + (return (get_current_map)) + )) + (fn print_syms () (do + (let (_ _ _ _ _ print_syms) syms) + (print_syms) + )) + (return (list generate)) )) @@ -439,7 +527,7 @@ (= syms parent) )) - (fn define (ident sym) (do + (fn define_sym (ident sym) (do (let (_ map) syms) (let i 0) (loop (do @@ -471,10 +559,15 @@ (return null) )) - (fn get (ident) (do + (fn get_sym (ident) (do (return (find_sym syms ident)) )) + (fn get_current_map () (do + (let (_ map) syms) + (return map) + )) + (fn print_syms_node (syms depth) (do (let (parent map) syms) (for (ident sym) map (do @@ -492,8 +585,9 @@ (return (list enter_scope leave_scope - define - get + define_sym + get_sym + get_current_map print_syms )) )) @@ -750,42 +844,15 @@ (return elems) )) -(let silent false) - (let (input_filename output_filename) (get_args)) -(if (not silent) (println "reading file '%'..." input_filename)) +(println "compiling '%'..." input_filename) (let text (read_text_file input_filename)) -//(println "=== text ===") -// (println text) -//(println (len text)) - -(if (not silent) (println "tokenizing...")) (let tokens (tokenize text)) - -//(println "=== tokens ===") -//(for elem tokens (do -// (let (tok line value) elem) -// (if (!= value null) (do -// (println "%\t%\t%" line tok value) -// ) (do -// (println "%\t%" line tok) -// )) -//)) -//(println (len tokens)) - -(if (not silent) (println "parsing...")) (let parser (Parser tokens)) (let (parse) parser) (let ast (parse)) - -// (println "=== ast ===") -// (for expr ast (do -// (print_expr expr 0) -// )) - -(if (not silent) (println "emitting...")) (let emitter (Emitter ast input_filename)) (let (emit) emitter) (let js_code (emit)) @@ -793,8 +860,8 @@ // (println "=== js ===") // (println js_code) -(if (not silent) (println "writing file '%'..." output_filename)) (write_text_file output_filename js_code) +(println "written '%'!" output_filename) diff --git a/runtime.js b/runtime.js index b498740..1b809df 100644 --- a/runtime.js +++ b/runtime.js @@ -16,7 +16,12 @@ export class Runtime { this.currentLine = line; } - pushCall(name, filename = this.filename, line = this.currentLine) { + info(filename, line) { + this.currentFilename = filename; + this.currentLine = line; + } + + pushCall(name, filename, line = this.currentLine) { this.callStack.push({ name, filename, line }); } @@ -41,8 +46,8 @@ export class Runtime { ` \x1b[90mat \x1b[37m${last.name} \x1b[90m(${this.currentFilename}:${this.currentLine})\x1b[0m`, ); for (let i = 0; i < reversedStack.length - 1 && i < 20; ++i) { - const name = reversedStack[i + 1].name; - const { filename, line } = reversedStack[i]; + const { name, filename } = reversedStack[i + 1]; + const { line } = reversedStack[i]; console.error( ` \x1b[90mat \x1b[37m${name} \x1b[90m(${filename}:${line})\x1b[0m`, ); diff --git a/stage2.js b/stage2.js index e2912aa..fb6734e 100644 --- a/stage2.js +++ b/stage2.js @@ -1,662 +1,834 @@ #!/usr/bin/env node import { Runtime } from "./runtime.js"; const runtime = new Runtime("compile.phi"); -function _Emitter14(_ast25, _filename26) { -runtime.pushCall("Emitter"); +function _Emitter14(_ast25, _initial_filename26) { +runtime.pushCall("Emitter", "compile.phi"); const r_0 = ({ type: "list", values: [] }); -let _output41 = r_0; -const r_1 = (runtime.setLine(5), _Syms16()); -const r_2 = r_1.values[0] ?? { type: "null"}; -let _enter_scope42 = r_2; -const r_3 = r_1.values[1] ?? { type: "null"}; -let _leave_scope43 = r_3; -const r_4 = r_1.values[2] ?? { type: "null"}; -let _define_sym44 = r_4; -const r_5 = r_1.values[3] ?? { type: "null"}; -let _get_sym45 = r_5; -const r_6 = r_1.values[4] ?? { type: "null"}; -let _print_syms46 = r_6; -const r_7 = (runtime.setLine(7), _Counter15()); -const r_8 = r_7.values[0] ?? { type: "null"}; -let _let_node_reg_count47 = r_8; -const r_9 = r_7.values[1] ?? { type: "null"}; -let _let_node_reg_increment48 = r_9; -const r_10 = (runtime.setLine(8), _Counter15()); -const r_11 = r_10.values[0] ?? { type: "null"}; -let _sym_id_count49 = r_11; -const r_12 = r_10.values[1] ?? { type: "null"}; -let _sym_id_increment50 = r_12; -const r_13 = ({ type: "list", values: [({ type: "list", values: [({ type: "string", value: "format" }), ({ type: "string", value: "builtinFormat" })] }), ({ type: "list", values: [({ type: "string", value: "print" }), ({ type: "string", value: "builtinPrint" })] }), ({ type: "list", values: [({ type: "string", value: "println" }), ({ type: "string", value: "builtinPrintln" })] }), ({ type: "list", values: [({ type: "string", value: "panic" }), ({ type: "string", value: "builtinPanic" })] }), ({ type: "list", values: [({ type: "string", value: "read_text_file" }), ({ type: "string", value: "builtinReadTextFile" })] }), ({ type: "list", values: [({ type: "string", value: "write_text_file" }), ({ type: "string", value: "builtinWriteTextFile" })] }), ({ type: "list", values: [({ type: "string", value: "push" }), ({ type: "string", value: "builtinPush" })] }), ({ type: "list", values: [({ type: "string", value: "at" }), ({ type: "string", value: "builtinAt" })] }), ({ type: "list", values: [({ type: "string", value: "set" }), ({ type: "string", value: "builtinSet" })] }), ({ type: "list", values: [({ type: "string", value: "len" }), ({ type: "string", value: "builtinLen" })] }), ({ type: "list", values: [({ type: "string", value: "string_to_int" }), ({ type: "string", value: "builtinStringToInt" })] }), ({ type: "list", values: [({ type: "string", value: "char_code" }), ({ type: "string", value: "builtinCharCode" })] }), ({ type: "list", values: [({ type: "string", value: "strings_join" }), ({ type: "string", value: "builtinStringsJoin" })] }), ({ type: "list", values: [({ type: "string", value: "get_args" }), ({ type: "string", value: "builtinGetArgs" })] })] }); -let _builtin_syms51 = r_13; +let _output48 = r_0; +const r_1 = _initial_filename26; +let _filename49 = r_1; +const r_2 = (runtime.info("compile.phi", 6), _Syms16()); +let _syms50 = r_2; +const r_3 = (runtime.info("compile.phi", 8), _Counter15()); +const r_4 = r_3.values[0] ?? { type: "null"}; +let _sym_id_count51 = r_4; +const r_5 = r_3.values[1] ?? { type: "null"}; +let _sym_id_increment52 = r_5; +const r_6 = (runtime.info("compile.phi", 9), _Counter15()); +const r_7 = r_6.values[0] ?? { type: "null"}; +let _let_node_reg_count53 = r_7; +const r_8 = r_6.values[1] ?? { type: "null"}; +let _let_node_reg_increment54 = r_8; +const r_9 = ({ type: "list", values: [({ type: "list", values: [({ type: "string", value: "format" }), ({ type: "string", value: "builtinFormat" })] }), ({ type: "list", values: [({ type: "string", value: "print" }), ({ type: "string", value: "builtinPrint" })] }), ({ type: "list", values: [({ type: "string", value: "println" }), ({ type: "string", value: "builtinPrintln" })] }), ({ type: "list", values: [({ type: "string", value: "panic" }), ({ type: "string", value: "builtinPanic" })] }), ({ type: "list", values: [({ type: "string", value: "read_text_file" }), ({ type: "string", value: "builtinReadTextFile" })] }), ({ type: "list", values: [({ type: "string", value: "write_text_file" }), ({ type: "string", value: "builtinWriteTextFile" })] }), ({ type: "list", values: [({ type: "string", value: "push" }), ({ type: "string", value: "builtinPush" })] }), ({ type: "list", values: [({ type: "string", value: "at" }), ({ type: "string", value: "builtinAt" })] }), ({ type: "list", values: [({ type: "string", value: "set" }), ({ type: "string", value: "builtinSet" })] }), ({ type: "list", values: [({ type: "string", value: "len" }), ({ type: "string", value: "builtinLen" })] }), ({ type: "list", values: [({ type: "string", value: "string_to_int" }), ({ type: "string", value: "builtinStringToInt" })] }), ({ type: "list", values: [({ type: "string", value: "char_code" }), ({ type: "string", value: "builtinCharCode" })] }), ({ type: "list", values: [({ type: "string", value: "strings_join" }), ({ type: "string", value: "builtinStringsJoin" })] }), ({ type: "list", values: [({ type: "string", value: "get_args" }), ({ type: "string", value: "builtinGetArgs" })] })] }); +let _builtin_syms55 = r_9; function _generate27() { -runtime.pushCall("generate"); -(runtime.setLine(28), _emit36(({ type: "string", value: "#!/usr/bin/env node\n" }))); -(runtime.setLine(29), _emit36(({ type: "string", value: "import { Runtime } from \"./runtime.js\";\n" }))); -(runtime.setLine(30), _emit36((runtime.setLine(30), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "const runtime = new Runtime(\"%\");\n" }), _filename26)))); -for (const r_14 of _builtin_syms51.values) {; -const r_15 = r_14.values[0] ?? { type: "null"}; -let _ident52 = r_15; -const r_16 = r_14.values[1] ?? { type: "null"}; -let _builtin_id53 = r_16; -(runtime.setLine(33), _define_builtin37(_ident52, _builtin_id53)); +runtime.pushCall("generate", "compile.phi"); +(runtime.info("compile.phi", 29), _emit37(({ type: "string", value: "#!/usr/bin/env node\n" }))); +(runtime.info("compile.phi", 30), _emit37(({ type: "string", value: "import { Runtime } from \"./runtime.js\";\n" }))); +(runtime.info("compile.phi", 31), _emit37((runtime.info("compile.phi", 31), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "const runtime = new Runtime(\"%\");\n" }), _filename49)))); +for (const r_10 of _builtin_syms55.values) {; +const r_11 = r_10.values[0] ?? { type: "null"}; +let _ident56 = r_11; +const r_12 = r_10.values[1] ?? { type: "null"}; +let _builtin_id57 = r_12; +(runtime.info("compile.phi", 34), _define_builtin38(_ident56, _builtin_id57)); }; -(runtime.setLine(36), _discover_syms29(_ast25)); -(runtime.setLine(37), _emit_exprs28(_ast25)); +(runtime.info("compile.phi", 37), _enter_scope42()); +(runtime.info("compile.phi", 38), _discover_syms29(_ast25)); +(runtime.info("compile.phi", 39), _emit_exprs28(_ast25)); runtime.popCall(); -return (runtime.setLine(38), ((...args) => runtime.builtinStringsJoin(...args))(_output41)); +return (runtime.info("compile.phi", 40), ((...args) => runtime.builtinStringsJoin(...args))(_output48)); ; runtime.popCall(); return { type: "null" }; }; -function _emit_exprs28(_exprs54) { -runtime.pushCall("emit_exprs"); -for (const r_17 of _exprs54.values) {; -let _expr55 = r_17; -(runtime.setLine(43), _emit_expr30(_expr55)); -(runtime.setLine(44), _emit36(({ type: "string", value: ";\n" }))); +function _emit_exprs28(_exprs58) { +runtime.pushCall("emit_exprs", "compile.phi"); +for (const r_13 of _exprs58.values) {; +let _expr59 = r_13; +(runtime.info("compile.phi", 45), _emit_expr30(_expr59)); +(runtime.info("compile.phi", 46), _emit37(({ type: "string", value: ";\n" }))); }; ; runtime.popCall(); return { type: "null" }; }; -function _discover_syms29(_exprs56) { -runtime.pushCall("discover_syms"); -for (const r_18 of _exprs56.values) {; -let _expr57 = r_18; -const r_19 = _expr57; -const r_20 = r_19.values[0] ?? { type: "null"}; -let _ty58 = r_20; -const r_21 = r_19.values[1] ?? { type: "null"}; -let _line59 = r_21; -if (runtime.truthy(runtime.opNe(_ty58, ({ type: "string", value: "list" })))) { +function _discover_syms29(_exprs60) { +runtime.pushCall("discover_syms", "compile.phi"); +for (const r_14 of _exprs60.values) {; +let _expr61 = r_14; +const r_15 = _expr61; +const r_16 = r_15.values[0] ?? { type: "null"}; +let _ty62 = r_16; +const r_17 = r_15.values[1] ?? { type: "null"}; +let _line63 = r_17; +if (runtime.truthy((runtime.info("compile.phi", 53), runtime.opNe(_ty62, ({ type: "string", value: "list" }))))) { runtime.popCall(); return { type: "null" }}; -const r_22 = _expr57; +const r_18 = _expr61; +const r_19 = r_18.values[0] ?? { type: "null"}; +const r_20 = r_18.values[1] ?? { type: "null"}; +const r_21 = r_18.values[2] ?? { type: "null"}; +let _s64 = r_21; +if (runtime.truthy((runtime.info("compile.phi", 55), runtime.opEq((runtime.info("compile.phi", 55), ((...args) => runtime.builtinLen(...args))(_s64)), ({ type: "int", value: 0 }))))) { +runtime.popCall(); +return { type: "null" }}; +const r_22 = _s64; const r_23 = r_22.values[0] ?? { type: "null"}; -const r_24 = r_22.values[1] ?? { type: "null"}; -const r_25 = r_22.values[2] ?? { type: "null"}; -let _s60 = r_25; -if (runtime.truthy(runtime.opEq((runtime.setLine(53), ((...args) => runtime.builtinLen(...args))(_s60)), ({ type: "int", value: 0 })))) { -runtime.popCall(); -return { type: "null" }}; -const r_26 = _s60; -const r_27 = r_26.values[0] ?? { type: "null"}; +const r_24 = r_23.values[0] ?? { type: "null"}; +const r_25 = r_23.values[1] ?? { type: "null"}; +const r_26 = r_23.values[2] ?? { type: "null"}; +let _id65 = r_26; +if (runtime.truthy((runtime.info("compile.phi", 57), runtime.opEq(_id65, ({ type: "string", value: "fn" }))))) { +const r_27 = _s64; const r_28 = r_27.values[0] ?? { type: "null"}; const r_29 = r_27.values[1] ?? { type: "null"}; -const r_30 = r_27.values[2] ?? { type: "null"}; -let _id61 = r_30; -if (runtime.truthy(runtime.opEq(_id61, ({ type: "string", value: "fn" })))) { -const r_31 = _s60; -const r_32 = r_31.values[0] ?? { type: "null"}; -const r_33 = r_31.values[1] ?? { type: "null"}; +const r_30 = r_29.values[0] ?? { type: "null"}; +const r_31 = r_29.values[1] ?? { type: "null"}; +const r_32 = r_29.values[2] ?? { type: "null"}; +let _ident66 = r_32; +const r_33 = r_27.values[2] ?? { type: "null"}; const r_34 = r_33.values[0] ?? { type: "null"}; const r_35 = r_33.values[1] ?? { type: "null"}; const r_36 = r_33.values[2] ?? { type: "null"}; -let _ident62 = r_36; -const r_37 = r_31.values[2] ?? { type: "null"}; -const r_38 = r_37.values[0] ?? { type: "null"}; -const r_39 = r_37.values[1] ?? { type: "null"}; -const r_40 = r_37.values[2] ?? { type: "null"}; -let _params63 = r_40; -const r_41 = r_31.values[3] ?? { type: "null"}; -let _body64 = r_41; -(runtime.setLine(57), _define_fn38(_ident62, _line59)); +let _params67 = r_36; +const r_37 = r_27.values[3] ?? { type: "null"}; +let _body68 = r_37; +(runtime.info("compile.phi", 59), _define_fn39(_ident66, _line63)); }; }; ; runtime.popCall(); return { type: "null" }; }; -function _emit_expr30(_expr65) { -runtime.pushCall("emit_expr"); -const r_42 = _expr65; -const r_43 = r_42.values[0] ?? { type: "null"}; -let _ty66 = r_43; -const r_44 = r_42.values[1] ?? { type: "null"}; -let _line67 = r_44; -if (runtime.truthy(runtime.opEq(_ty66, ({ type: "string", value: "list" })))) { -(runtime.setLine(65), _emit_list31(_expr65)); +function _emit_expr30(_expr69) { +runtime.pushCall("emit_expr", "compile.phi"); +const r_38 = _expr69; +const r_39 = r_38.values[0] ?? { type: "null"}; +let _ty70 = r_39; +const r_40 = r_38.values[1] ?? { type: "null"}; +let _line71 = r_40; +if (runtime.truthy((runtime.info("compile.phi", 66), runtime.opEq(_ty70, ({ type: "string", value: "list" }))))) { +(runtime.info("compile.phi", 67), _emit_list31(_expr69)); } else { -if (runtime.truthy(runtime.opEq(_ty66, ({ type: "string", value: "int" })))) { -const r_45 = _expr65; +if (runtime.truthy((runtime.info("compile.phi", 68), runtime.opEq(_ty70, ({ type: "string", value: "int" }))))) { +const r_41 = _expr69; +const r_42 = r_41.values[0] ?? { type: "null"}; +const r_43 = r_41.values[1] ?? { type: "null"}; +const r_44 = r_41.values[2] ?? { type: "null"}; +let _value72 = r_44; +(runtime.info("compile.phi", 70), _emit37((runtime.info("compile.phi", 70), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "({ type: \"int\", value: % })" }), _value72)))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 71), runtime.opEq(_ty70, ({ type: "string", value: "string" }))))) { +const r_45 = _expr69; const r_46 = r_45.values[0] ?? { type: "null"}; const r_47 = r_45.values[1] ?? { type: "null"}; const r_48 = r_45.values[2] ?? { type: "null"}; -let _value68 = r_48; -(runtime.setLine(68), _emit36((runtime.setLine(68), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "({ type: \"int\", value: % })" }), _value68)))); +let _value73 = r_48; +(runtime.info("compile.phi", 73), _emit37((runtime.info("compile.phi", 73), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "({ type: \"string\", value: \"%\" })" }), (runtime.info("compile.phi", 73), _string_escape17(_value73)))))); } else { -if (runtime.truthy(runtime.opEq(_ty66, ({ type: "string", value: "string" })))) { -const r_49 = _expr65; +if (runtime.truthy((runtime.info("compile.phi", 74), runtime.opEq(_ty70, ({ type: "string", value: "ident" }))))) { +const r_49 = _expr69; const r_50 = r_49.values[0] ?? { type: "null"}; const r_51 = r_49.values[1] ?? { type: "null"}; const r_52 = r_49.values[2] ?? { type: "null"}; -let _value69 = r_52; -(runtime.setLine(71), _emit36((runtime.setLine(71), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "({ type: \"string\", value: \"%\" })" }), (runtime.setLine(71), _string_escape17(_value69)))))); -} else { -if (runtime.truthy(runtime.opEq(_ty66, ({ type: "string", value: "ident" })))) { -const r_53 = _expr65; -const r_54 = r_53.values[0] ?? { type: "null"}; -const r_55 = r_53.values[1] ?? { type: "null"}; -const r_56 = r_53.values[2] ?? { type: "null"}; -let _value70 = r_56; -if (runtime.truthy(runtime.opEq(_value70, ({ type: "string", value: "null" })))) { -(runtime.setLine(76), _emit36(({ type: "string", value: "({ type: \"null\" })" }))); +let _value74 = r_52; +if (runtime.truthy((runtime.info("compile.phi", 77), runtime.opEq(_value74, ({ type: "string", value: "null" }))))) { +(runtime.info("compile.phi", 78), _emit37(({ type: "string", value: "({ type: \"null\" })" }))); runtime.popCall(); return { type: "null" }; } else { -if (runtime.truthy(runtime.opEq(_value70, ({ type: "string", value: "false" })))) { -(runtime.setLine(79), _emit36(({ type: "string", value: "({ type: \"bool\", value: false })" }))); +if (runtime.truthy((runtime.info("compile.phi", 80), runtime.opEq(_value74, ({ type: "string", value: "false" }))))) { +(runtime.info("compile.phi", 81), _emit37(({ type: "string", value: "({ type: \"bool\", value: false })" }))); runtime.popCall(); return { type: "null" }; } else { -if (runtime.truthy(runtime.opEq(_value70, ({ type: "string", value: "true" })))) { -(runtime.setLine(82), _emit36(({ type: "string", value: "({ type: \"bool\", value: true })" }))); +if (runtime.truthy((runtime.info("compile.phi", 83), runtime.opEq(_value74, ({ type: "string", value: "true" }))))) { +(runtime.info("compile.phi", 84), _emit37(({ type: "string", value: "({ type: \"bool\", value: true })" }))); runtime.popCall(); return { type: "null" }; }}}; -const r_57 = (runtime.setLine(86), _get_sym45(_value70)); -let _sym71 = r_57; -if (runtime.truthy(runtime.opEq(_sym71, ({ type: "null" })))) { -(runtime.setLine(88), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "undefined symbol '%' on line %" }), _value70, _line67)); +const r_53 = (runtime.info("compile.phi", 88), _get_sym45(_value74)); +let _sym75 = r_53; +if (runtime.truthy((runtime.info("compile.phi", 89), runtime.opEq(_sym75, ({ type: "null" }))))) { +(runtime.info("compile.phi", 90), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "undefined symbol '%' on line %" }), _value74, _line71)); }; -const r_58 = _sym71; -const r_59 = r_58.values[0] ?? { type: "null"}; -let _sym_id72 = r_59; -const r_60 = r_58.values[1] ?? { type: "null"}; -let _sym_ty73 = r_60; -if (runtime.truthy(runtime.opEq(_sym_ty73, ({ type: "string", value: "builtin" })))) { -const r_61 = _sym71; -const r_62 = r_61.values[0] ?? { type: "null"}; -const r_63 = r_61.values[1] ?? { type: "null"}; -const r_64 = r_61.values[2] ?? { type: "null"}; -let _id74 = r_64; -(runtime.setLine(94), _emit36((runtime.setLine(94), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "((...args) => runtime.%(...args))" }), _id74)))); +const r_54 = _sym75; +const r_55 = r_54.values[0] ?? { type: "null"}; +let _sym_id76 = r_55; +const r_56 = r_54.values[1] ?? { type: "null"}; +let _sym_ty77 = r_56; +if (runtime.truthy((runtime.info("compile.phi", 94), runtime.opEq(_sym_ty77, ({ type: "string", value: "builtin" }))))) { +const r_57 = _sym75; +const r_58 = r_57.values[0] ?? { type: "null"}; +const r_59 = r_57.values[1] ?? { type: "null"}; +const r_60 = r_57.values[2] ?? { type: "null"}; +let _id78 = r_60; +(runtime.info("compile.phi", 96), _emit37((runtime.info("compile.phi", 96), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "((...args) => runtime.%(...args))" }), _id78)))); } else { -if (runtime.truthy(runtime.opEq(_sym_ty73, ({ type: "string", value: "fn" })))) { -(runtime.setLine(96), _emit36((runtime.setLine(96), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _value70, _sym_id72)))); +if (runtime.truthy((runtime.info("compile.phi", 97), runtime.opEq(_sym_ty77, ({ type: "string", value: "fn" }))))) { +(runtime.info("compile.phi", 98), _emit37((runtime.info("compile.phi", 98), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _value74, _sym_id76)))); } else { -if (runtime.truthy(runtime.opEq(_sym_ty73, ({ type: "string", value: "param" })))) { -(runtime.setLine(98), _emit36((runtime.setLine(98), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _value70, _sym_id72)))); +if (runtime.truthy((runtime.info("compile.phi", 99), runtime.opEq(_sym_ty77, ({ type: "string", value: "param" }))))) { +(runtime.info("compile.phi", 100), _emit37((runtime.info("compile.phi", 100), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _value74, _sym_id76)))); } else { -if (runtime.truthy(runtime.opEq(_sym_ty73, ({ type: "string", value: "let" })))) { -(runtime.setLine(100), _emit36((runtime.setLine(100), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _value70, _sym_id72)))); +if (runtime.truthy((runtime.info("compile.phi", 101), runtime.opEq(_sym_ty77, ({ type: "string", value: "let" }))))) { +(runtime.info("compile.phi", 102), _emit37((runtime.info("compile.phi", 102), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _value74, _sym_id76)))); } else { -(runtime.setLine(102), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "not implemented '%'" }), _sym_ty73)); -}}}}; +if (runtime.truthy((runtime.info("compile.phi", 103), runtime.opEq(_sym_ty77, ({ type: "string", value: "imported" }))))) { +(runtime.info("compile.phi", 108), _emit37((runtime.info("compile.phi", 108), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _value74, _sym_id76)))); } else { -(runtime.setLine(105), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "unknown expr type '%' on line %" }), _ty66, _line67)); +(runtime.info("compile.phi", 110), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "not implemented '%'" }), _sym_ty77)); +}}}}}; +} else { +(runtime.info("compile.phi", 113), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "unknown expr type '%' on line %" }), _ty70, _line71)); }}}}; ; runtime.popCall(); return { type: "null" }; }; -function _emit_list31(_expr75) { -runtime.pushCall("emit_list"); -const r_65 = _expr75; +function _emit_list31(_expr79) { +runtime.pushCall("emit_list", "compile.phi"); +const r_61 = _expr79; +const r_62 = r_61.values[0] ?? { type: "null"}; +let _ty80 = r_62; +const r_63 = r_61.values[1] ?? { type: "null"}; +let _line81 = r_63; +const r_64 = r_61.values[2] ?? { type: "null"}; +let _s82 = r_64; +if (runtime.truthy((runtime.info("compile.phi", 119), runtime.opEq((runtime.info("compile.phi", 119), ((...args) => runtime.builtinLen(...args))(_s82)), ({ type: "int", value: 0 }))))) { +(runtime.info("compile.phi", 120), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "illegal function on line %" }), _line81)); +}; +const r_65 = _s82; const r_66 = r_65.values[0] ?? { type: "null"}; -let _ty76 = r_66; -const r_67 = r_65.values[1] ?? { type: "null"}; -let _line77 = r_67; -const r_68 = r_65.values[2] ?? { type: "null"}; -let _s78 = r_68; -if (runtime.truthy(runtime.opEq((runtime.setLine(111), ((...args) => runtime.builtinLen(...args))(_s78)), ({ type: "int", value: 0 })))) { -(runtime.setLine(112), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "illegal function on line %" }), _line77)); +const r_67 = r_66.values[0] ?? { type: "null"}; +let _id_ty83 = r_67; +const r_68 = r_66.values[1] ?? { type: "null"}; +const r_69 = r_66.values[2] ?? { type: "null"}; +let _id84 = r_69; +if (runtime.truthy((runtime.info("compile.phi", 123), runtime.opNe(_id_ty83, ({ type: "string", value: "ident" }))))) { +(runtime.info("compile.phi", 124), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "illegal function on line %" }), _line81)); }; -const r_69 = _s78; -const r_70 = r_69.values[0] ?? { type: "null"}; -const r_71 = r_70.values[0] ?? { type: "null"}; -let _id_ty79 = r_71; -const r_72 = r_70.values[1] ?? { type: "null"}; -const r_73 = r_70.values[2] ?? { type: "null"}; -let _id80 = r_73; -if (runtime.truthy(runtime.opNe(_id_ty79, ({ type: "string", value: "ident" })))) { -(runtime.setLine(116), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "illegal function on line %" }), _line77)); +if (runtime.truthy((runtime.info("compile.phi", 126), runtime.opEq(_id84, ({ type: "string", value: "import" }))))) { +const r_70 = _filename49; +let _outer_filename85 = r_70; +const r_71 = _s82; +const r_72 = r_71.values[0] ?? { type: "null"}; +const r_73 = r_71.values[1] ?? { type: "null"}; +const r_74 = r_73.values[0] ?? { type: "null"}; +const r_75 = r_73.values[1] ?? { type: "null"}; +const r_76 = r_73.values[2] ?? { type: "null"}; +let _inner_filename86 = r_76; +const r_77 = r_71.values[2] ?? { type: "null"}; +const r_78 = r_77.values[0] ?? { type: "null"}; +const r_79 = r_77.values[1] ?? { type: "null"}; +const r_80 = r_77.values[2] ?? { type: "null"}; +let _idents87 = r_80; +(_filename49 = _inner_filename86); +const r_81 = (runtime.info("compile.phi", 131), ((...args) => runtime.builtinReadTextFile(...args))(_filename49)); +let _text88 = r_81; +const r_82 = (runtime.info("compile.phi", 132), _tokenize19(_text88)); +let _tokens89 = r_82; +const r_83 = (runtime.info("compile.phi", 133), _Parser18(_tokens89)); +let _parser90 = r_83; +const r_84 = _parser90; +const r_85 = r_84.values[0] ?? { type: "null"}; +let _parse91 = r_85; +const r_86 = (runtime.info("compile.phi", 135), _parse91()); +let _ast92 = r_86; +const r_87 = (runtime.info("compile.phi", 136), _Emitter14(_ast92, _filename49)); +const r_88 = r_87.values[0] ?? { type: "null"}; +const r_89 = r_87.values[1] ?? { type: "null"}; +let _generate_imported93 = r_89; +(runtime.info("compile.phi", 138), _emit37((runtime.info("compile.phi", 138), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.setFile(\"%\");\n" }), _filename49)))); +const r_90 = _syms50; +let _outer_syms94 = r_90; +(_syms50 = (runtime.info("compile.phi", 141), _Syms16())); +for (const r_91 of _builtin_syms55.values) {; +const r_92 = r_91.values[0] ?? { type: "null"}; +let _ident95 = r_92; +const r_93 = r_91.values[1] ?? { type: "null"}; +let _builtin_id96 = r_93; +(runtime.info("compile.phi", 143), _define_builtin38(_ident95, _builtin_id96)); }; -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "fn" })))) { -const r_74 = _s78; -const r_75 = r_74.values[0] ?? { type: "null"}; -const r_76 = r_74.values[1] ?? { type: "null"}; -const r_77 = r_76.values[0] ?? { type: "null"}; -const r_78 = r_76.values[1] ?? { type: "null"}; -const r_79 = r_76.values[2] ?? { type: "null"}; -let _ident81 = r_79; -const r_80 = r_74.values[2] ?? { type: "null"}; -const r_81 = r_80.values[0] ?? { type: "null"}; -const r_82 = r_80.values[1] ?? { type: "null"}; -const r_83 = r_80.values[2] ?? { type: "null"}; -let _params82 = r_83; -const r_84 = r_74.values[3] ?? { type: "null"}; -let _body83 = r_84; -const r_85 = (runtime.setLine(121), _get_sym45(_ident81)); -let _sym84 = r_85; -const r_86 = _sym84; -const r_87 = r_86.values[0] ?? { type: "null"}; -let _sym_id85 = r_87; -(runtime.setLine(124), _emit36((runtime.setLine(124), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "function _%%(" }), _ident81, _sym_id85)))); -(runtime.setLine(126), _enter_scope42()); -const r_88 = ({ type: "bool", value: true }); -let _first86 = r_88; -for (const r_89 of _params82.values) {; -const r_90 = r_89.values[0] ?? { type: "null"}; -const r_91 = r_89.values[1] ?? { type: "null"}; -const r_92 = r_89.values[2] ?? { type: "null"}; -let _ident87 = r_92; -if (runtime.truthy(runtime.opNot(_first86))) { -(runtime.setLine(131), _emit36(({ type: "string", value: ", " }))); +(runtime.info("compile.phi", 146), _enter_scope42()); +(runtime.info("compile.phi", 147), _discover_syms29(_ast92)); +(runtime.info("compile.phi", 148), _emit_exprs28(_ast92)); +const r_94 = (runtime.info("compile.phi", 149), _get_current_map46()); +let _sym_map97 = r_94; +(_syms50 = _outer_syms94); +(_filename49 = _outer_filename85); +(runtime.info("compile.phi", 154), _emit37((runtime.info("compile.phi", 154), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.setFile(\"%\");\n" }), _outer_filename85)))); +for (const r_95 of _idents87.values) {; +const r_96 = r_95.values[0] ?? { type: "null"}; +const r_97 = r_95.values[1] ?? { type: "null"}; +const r_98 = r_95.values[2] ?? { type: "null"}; +let _ident98 = r_98; +const r_99 = ({ type: "null" }); +let _sym99 = r_99; +for (const r_100 of _sym_map97.values) {; +const r_101 = r_100.values[0] ?? { type: "null"}; +let _sym_ident100 = r_101; +const r_102 = r_100.values[1] ?? { type: "null"}; +let _found_sym101 = r_102; +if (runtime.truthy((runtime.info("compile.phi", 159), runtime.opEq(_sym_ident100, _ident98)))) { +(_sym99 = _found_sym101); +break; }; -(_first86 = ({ type: "bool", value: false })); -const r_93 = (runtime.setLine(135), _define_param39(_ident87, _line77)); -let _sym_id88 = r_93; -(runtime.setLine(136), _emit36((runtime.setLine(136), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _ident87, _sym_id88)))); }; -(runtime.setLine(140), _emit36(({ type: "string", value: ") {\n" }))); -(runtime.setLine(141), _emit36((runtime.setLine(141), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.pushCall(\"%\");\n" }), _ident81)))); -(runtime.setLine(143), _emit_expr30(_body83)); -(runtime.setLine(144), _emit36(({ type: "string", value: ";\nruntime.popCall();\nreturn { type: \"null\" };\n}" }))); -(runtime.setLine(146), _leave_scope43()); +if (runtime.truthy((runtime.info("compile.phi", 164), runtime.opEq(_sym99, ({ type: "null" }))))) { +(runtime.info("compile.phi", 165), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "sym_map = %" }), _sym_map97)); +(runtime.info("compile.phi", 166), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "no symbol '%' from imported '%'" }), _ident98, _filename49)); +}; +const r_103 = _sym99; +const r_104 = r_103.values[0] ?? { type: "null"}; +const r_105 = r_103.values[1] ?? { type: "null"}; +let _sym_type102 = r_105; +if (runtime.truthy((runtime.info("compile.phi", 169), runtime.opEq(_sym_type102, ({ type: "string", value: "imported" }))))) { +(runtime.info("compile.phi", 170), _define_sym44(_ident98, _sym99)); } else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "let" })))) { -const r_94 = _s78; -const r_95 = r_94.values[0] ?? { type: "null"}; -const r_96 = r_94.values[1] ?? { type: "null"}; -let _pat89 = r_96; -const r_97 = r_94.values[2] ?? { type: "null"}; -let _expr90 = r_97; -const r_98 = (runtime.setLine(149), _let_node_reg_count47()); -let _reg91 = r_98; -(runtime.setLine(150), _let_node_reg_increment48()); -(runtime.setLine(151), _emit36((runtime.setLine(151), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "const r_% = " }), _reg91)))); -(runtime.setLine(152), _emit_expr30(_expr90)); -(runtime.setLine(153), _emit_let_node33(_pat89, _reg91)); +const r_106 = _sym99; +const r_107 = r_106.values[0] ?? { type: "null"}; +let _sym_id103 = r_107; +(runtime.info("compile.phi", 173), _define_sym44(_ident98, ({ type: "list", values: [_sym_id103, ({ type: "string", value: "imported" }), _sym99] }))); +}; +}; } else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "do" })))) { -(runtime.setLine(155), _enter_scope42()); -(runtime.setLine(156), _discover_syms29((runtime.setLine(156), _slice24(_s78, ({ type: "int", value: 1 }))))); -(runtime.setLine(157), _emit_exprs28((runtime.setLine(157), _slice24(_s78, ({ type: "int", value: 1 }))))); -(runtime.setLine(158), _leave_scope43()); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "for" })))) { -const r_99 = _s78; -const r_100 = r_99.values[0] ?? { type: "null"}; -const r_101 = r_99.values[1] ?? { type: "null"}; -let _pat92 = r_101; -const r_102 = r_99.values[2] ?? { type: "null"}; -let _expr93 = r_102; -const r_103 = r_99.values[3] ?? { type: "null"}; -let _body94 = r_103; -const r_104 = (runtime.setLine(162), _let_node_reg_count47()); -let _reg95 = r_104; -(runtime.setLine(163), _let_node_reg_increment48()); -(runtime.setLine(164), _emit36((runtime.setLine(164), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "for (const r_% of " }), _reg95)))); -(runtime.setLine(165), _emit_expr30(_expr93)); -(runtime.setLine(166), _emit36(({ type: "string", value: ".values) {" }))); -(runtime.setLine(168), _enter_scope42()); -(runtime.setLine(169), _emit_let_node33(_pat92, _reg95)); -(runtime.setLine(170), _enter_scope42()); -(runtime.setLine(172), _emit36(({ type: "string", value: ";\n" }))); -(runtime.setLine(173), _emit_expr30(_body94)); -(runtime.setLine(174), _emit36(({ type: "string", value: "}" }))); -(runtime.setLine(176), _leave_scope43()); -(runtime.setLine(177), _leave_scope43()); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "loop" })))) { -const r_105 = _s78; -const r_106 = r_105.values[0] ?? { type: "null"}; -const r_107 = r_105.values[1] ?? { type: "null"}; -let _body96 = r_107; -(runtime.setLine(180), _emit36(({ type: "string", value: "while (true) {\n" }))); -(runtime.setLine(181), _emit_expr30(_body96)); -(runtime.setLine(182), _emit36(({ type: "string", value: "}" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "if" })))) { -const r_108 = _s78; +if (runtime.truthy((runtime.info("compile.phi", 176), runtime.opEq(_id84, ({ type: "string", value: "fn" }))))) { +const r_108 = _s82; const r_109 = r_108.values[0] ?? { type: "null"}; const r_110 = r_108.values[1] ?? { type: "null"}; -let _cond97 = r_110; -const r_111 = r_108.values[2] ?? { type: "null"}; -let _truthy98 = r_111; -const r_112 = r_108.values[3] ?? { type: "null"}; -let _falsy99 = r_112; -(runtime.setLine(185), _emit36(({ type: "string", value: "if (runtime.truthy(" }))); -(runtime.setLine(186), _emit_expr30(_cond97)); -(runtime.setLine(187), _emit36(({ type: "string", value: ")) {\n" }))); -(runtime.setLine(188), _emit_expr30(_truthy98)); -(runtime.setLine(189), _emit36(({ type: "string", value: "}" }))); -if (runtime.truthy(runtime.opNe(_falsy99, ({ type: "null" })))) { -(runtime.setLine(191), _emit36(({ type: "string", value: " else {\n" }))); -(runtime.setLine(192), _emit_expr30(_falsy99)); -(runtime.setLine(193), _emit36(({ type: "string", value: "}" }))); +const r_111 = r_110.values[0] ?? { type: "null"}; +const r_112 = r_110.values[1] ?? { type: "null"}; +const r_113 = r_110.values[2] ?? { type: "null"}; +let _ident104 = r_113; +const r_114 = r_108.values[2] ?? { type: "null"}; +const r_115 = r_114.values[0] ?? { type: "null"}; +const r_116 = r_114.values[1] ?? { type: "null"}; +const r_117 = r_114.values[2] ?? { type: "null"}; +let _params105 = r_117; +const r_118 = r_108.values[3] ?? { type: "null"}; +let _body106 = r_118; +const r_119 = (runtime.info("compile.phi", 179), _get_sym45(_ident104)); +let _sym107 = r_119; +const r_120 = _sym107; +const r_121 = r_120.values[0] ?? { type: "null"}; +let _sym_id108 = r_121; +(runtime.info("compile.phi", 182), _emit37((runtime.info("compile.phi", 182), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "function _%%(" }), _ident104, _sym_id108)))); +(runtime.info("compile.phi", 184), _enter_scope42()); +const r_122 = ({ type: "bool", value: true }); +let _first109 = r_122; +for (const r_123 of _params105.values) {; +const r_124 = r_123.values[0] ?? { type: "null"}; +const r_125 = r_123.values[1] ?? { type: "null"}; +const r_126 = r_123.values[2] ?? { type: "null"}; +let _ident110 = r_126; +if (runtime.truthy(runtime.opNot(_first109))) { +(runtime.info("compile.phi", 189), _emit37(({ type: "string", value: ", " }))); }; -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "return" })))) { -const r_113 = _s78; -const r_114 = r_113.values[0] ?? { type: "null"}; -const r_115 = r_113.values[1] ?? { type: "null"}; -let _value100 = r_115; -(runtime.setLine(197), _emit36(({ type: "string", value: "runtime.popCall();\n" }))); -(runtime.setLine(198), _emit36(({ type: "string", value: "return " }))); -if (runtime.truthy(runtime.opNe(_value100, ({ type: "null" })))) { -(runtime.setLine(200), _emit_expr30(_value100)); -} else { -(runtime.setLine(202), _emit36(({ type: "string", value: "{ type: \"null\" }" }))); +(_first109 = ({ type: "bool", value: false })); +const r_127 = (runtime.info("compile.phi", 193), _define_param40(_ident110, _line81)); +let _sym_id111 = r_127; +(runtime.info("compile.phi", 194), _emit37((runtime.info("compile.phi", 194), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _ident110, _sym_id111)))); }; +(runtime.info("compile.phi", 198), _emit37(({ type: "string", value: ") {\n" }))); +(runtime.info("compile.phi", 199), _emit37((runtime.info("compile.phi", 199), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.pushCall(\"%\", \"%\");\n" }), _ident104, _filename49)))); +(runtime.info("compile.phi", 201), _emit_expr30(_body106)); +(runtime.info("compile.phi", 202), _emit37(({ type: "string", value: ";\nruntime.popCall();\nreturn { type: \"null\" };\n}" }))); +(runtime.info("compile.phi", 204), _leave_scope43()); } else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "break" })))) { -const r_116 = _s78; -const r_117 = r_116.values[0] ?? { type: "null"}; -const r_118 = r_116.values[1] ?? { type: "null"}; -let _value101 = r_118; -(runtime.setLine(206), _emit36(({ type: "string", value: "break" }))); -if (runtime.truthy(runtime.opNe(_value101, ({ type: "null" })))) { -(runtime.setLine(208), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "not implemented" }))); -}; +if (runtime.truthy((runtime.info("compile.phi", 205), runtime.opEq(_id84, ({ type: "string", value: "let" }))))) { +const r_128 = _s82; +const r_129 = r_128.values[0] ?? { type: "null"}; +const r_130 = r_128.values[1] ?? { type: "null"}; +let _pat112 = r_130; +const r_131 = r_128.values[2] ?? { type: "null"}; +let _expr113 = r_131; +const r_132 = (runtime.info("compile.phi", 207), _let_node_reg_count53()); +let _reg114 = r_132; +(runtime.info("compile.phi", 208), _let_node_reg_increment54()); +(runtime.info("compile.phi", 209), _emit37((runtime.info("compile.phi", 209), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "const r_% = " }), _reg114)))); +(runtime.info("compile.phi", 210), _emit_expr30(_expr113)); +(runtime.info("compile.phi", 211), _emit_let_node33(_pat112, _reg114)); } else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "call" })))) { -const r_119 = _s78; -const r_120 = r_119.values[0] ?? { type: "null"}; -const r_121 = r_119.values[1] ?? { type: "null"}; -let _callee102 = r_121; -const r_122 = (runtime.setLine(212), _slice24(_s78, ({ type: "int", value: 2 }))); -let _args103 = r_122; -(runtime.setLine(213), _emit36((runtime.setLine(213), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(runtime.setLine(%), " }), _line77)))); -(runtime.setLine(214), _emit_expr30(_callee102)); -(runtime.setLine(215), _emit36(({ type: "string", value: "(" }))); -const r_123 = ({ type: "bool", value: true }); -let _first104 = r_123; -for (const r_124 of _args103.values) {; -let _arg105 = r_124; -if (runtime.truthy(runtime.opNot(_first104))) { -(runtime.setLine(220), _emit36(({ type: "string", value: ", " }))); -}; -(_first104 = ({ type: "bool", value: false })); -(runtime.setLine(224), _emit_expr30(_arg105)); -}; -(runtime.setLine(227), _emit36(({ type: "string", value: "))" }))); +if (runtime.truthy((runtime.info("compile.phi", 212), runtime.opEq(_id84, ({ type: "string", value: "do" }))))) { +(runtime.info("compile.phi", 213), _enter_scope42()); +(runtime.info("compile.phi", 214), _discover_syms29((runtime.info("compile.phi", 214), _slice24(_s82, ({ type: "int", value: 1 }))))); +(runtime.info("compile.phi", 215), _emit_exprs28((runtime.info("compile.phi", 215), _slice24(_s82, ({ type: "int", value: 1 }))))); +(runtime.info("compile.phi", 216), _leave_scope43()); } else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "list" })))) { -(runtime.setLine(229), _emit_list_literal32((runtime.setLine(229), _slice24(_s78, ({ type: "int", value: 1 }))))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "=" })))) { -(runtime.setLine(231), _emit_assign_expr35(_s78, _line77, ({ type: "string", value: "=" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "+=" })))) { -(runtime.setLine(233), _emit_assign_expr35(_s78, _line77, ({ type: "string", value: "+" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "-=" })))) { -(runtime.setLine(235), _emit_assign_expr35(_s78, _line77, ({ type: "string", value: "-" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "or" })))) { -const r_125 = _s78; -const r_126 = r_125.values[0] ?? { type: "null"}; -const r_127 = r_125.values[1] ?? { type: "null"}; -let _left106 = r_127; -const r_128 = r_125.values[2] ?? { type: "null"}; -let _right107 = r_128; -(runtime.setLine(238), _emit36((runtime.setLine(238), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(runtime.setLine(%)" }), _line77)))); -(runtime.setLine(239), _emit36(({ type: "string", value: ", { type: \"bool\", value: runtime.truthy(" }))); -(runtime.setLine(240), _emit_expr30(_left106)); -(runtime.setLine(241), _emit36(({ type: "string", value: ") || runtime.truthy(" }))); -(runtime.setLine(242), _emit_expr30(_right107)); -(runtime.setLine(243), _emit36(({ type: "string", value: ") })" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "and" })))) { -const r_129 = _s78; -const r_130 = r_129.values[0] ?? { type: "null"}; -const r_131 = r_129.values[1] ?? { type: "null"}; -let _left108 = r_131; -const r_132 = r_129.values[2] ?? { type: "null"}; -let _right109 = r_132; -(runtime.setLine(246), _emit36((runtime.setLine(246), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(runtime.setLine(%)" }), _line77)))); -(runtime.setLine(247), _emit36(({ type: "string", value: ", { type: \"bool\", value: runtime.truthy(" }))); -(runtime.setLine(248), _emit_expr30(_left108)); -(runtime.setLine(249), _emit36(({ type: "string", value: ") && runtime.truthy(" }))); -(runtime.setLine(250), _emit_expr30(_right109)); -(runtime.setLine(251), _emit36(({ type: "string", value: ") })" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "==" })))) { -(runtime.setLine(253), _emit_binary_op34(_s78, ({ type: "string", value: "opEq" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "!=" })))) { -(runtime.setLine(255), _emit_binary_op34(_s78, ({ type: "string", value: "opNe" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "<" })))) { -(runtime.setLine(257), _emit_binary_op34(_s78, ({ type: "string", value: "opLt" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: ">" })))) { -(runtime.setLine(259), _emit_binary_op34(_s78, ({ type: "string", value: "opGt" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "<=" })))) { -(runtime.setLine(261), _emit_binary_op34(_s78, ({ type: "string", value: "opLte" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: ">=" })))) { -(runtime.setLine(263), _emit_binary_op34(_s78, ({ type: "string", value: "opGte" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "+" })))) { -(runtime.setLine(265), _emit_binary_op34(_s78, ({ type: "string", value: "opAdd" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "-" })))) { -(runtime.setLine(267), _emit_binary_op34(_s78, ({ type: "string", value: "opSub" }))); -} else { -if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "not" })))) { -const r_133 = _s78; +if (runtime.truthy((runtime.info("compile.phi", 217), runtime.opEq(_id84, ({ type: "string", value: "for" }))))) { +const r_133 = _s82; const r_134 = r_133.values[0] ?? { type: "null"}; const r_135 = r_133.values[1] ?? { type: "null"}; -let _expr110 = r_135; -(runtime.setLine(270), _emit36(({ type: "string", value: "runtime.opNot(" }))); -(runtime.setLine(271), _emit_expr30(_expr110)); -(runtime.setLine(272), _emit36(({ type: "string", value: ")" }))); +let _pat115 = r_135; +const r_136 = r_133.values[2] ?? { type: "null"}; +let _expr116 = r_136; +const r_137 = r_133.values[3] ?? { type: "null"}; +let _body117 = r_137; +const r_138 = (runtime.info("compile.phi", 220), _let_node_reg_count53()); +let _reg118 = r_138; +(runtime.info("compile.phi", 221), _let_node_reg_increment54()); +(runtime.info("compile.phi", 222), _emit37((runtime.info("compile.phi", 222), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "for (const r_% of " }), _reg118)))); +(runtime.info("compile.phi", 223), _emit_expr30(_expr116)); +(runtime.info("compile.phi", 224), _emit37(({ type: "string", value: ".values) {" }))); +(runtime.info("compile.phi", 226), _enter_scope42()); +(runtime.info("compile.phi", 227), _emit_let_node33(_pat115, _reg118)); +(runtime.info("compile.phi", 228), _enter_scope42()); +(runtime.info("compile.phi", 230), _emit37(({ type: "string", value: ";\n" }))); +(runtime.info("compile.phi", 231), _emit_expr30(_body117)); +(runtime.info("compile.phi", 232), _emit37(({ type: "string", value: "}" }))); +(runtime.info("compile.phi", 234), _leave_scope43()); +(runtime.info("compile.phi", 235), _leave_scope43()); } else { -const r_136 = _s78; -const r_137 = r_136.values[0] ?? { type: "null"}; -let _callee111 = r_137; -const r_138 = (runtime.setLine(275), _slice24(_s78, ({ type: "int", value: 1 }))); -let _args112 = r_138; -(runtime.setLine(276), _emit36((runtime.setLine(276), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(runtime.setLine(%), " }), _line77)))); -(runtime.setLine(277), _emit_expr30(_callee111)); -(runtime.setLine(278), _emit36(({ type: "string", value: "(" }))); -const r_139 = ({ type: "bool", value: true }); -let _first113 = r_139; -for (const r_140 of _args112.values) {; -let _arg114 = r_140; -if (runtime.truthy(runtime.opNot(_first113))) { -(runtime.setLine(283), _emit36(({ type: "string", value: ", " }))); +if (runtime.truthy((runtime.info("compile.phi", 236), runtime.opEq(_id84, ({ type: "string", value: "loop" }))))) { +const r_139 = _s82; +const r_140 = r_139.values[0] ?? { type: "null"}; +const r_141 = r_139.values[1] ?? { type: "null"}; +let _body119 = r_141; +(runtime.info("compile.phi", 238), _emit37(({ type: "string", value: "while (true) {\n" }))); +(runtime.info("compile.phi", 239), _emit_expr30(_body119)); +(runtime.info("compile.phi", 240), _emit37(({ type: "string", value: "}" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 241), runtime.opEq(_id84, ({ type: "string", value: "if" }))))) { +const r_142 = _s82; +const r_143 = r_142.values[0] ?? { type: "null"}; +const r_144 = r_142.values[1] ?? { type: "null"}; +let _cond120 = r_144; +const r_145 = r_142.values[2] ?? { type: "null"}; +let _truthy121 = r_145; +const r_146 = r_142.values[3] ?? { type: "null"}; +let _falsy122 = r_146; +(runtime.info("compile.phi", 243), _emit37(({ type: "string", value: "if (runtime.truthy(" }))); +(runtime.info("compile.phi", 244), _emit_expr30(_cond120)); +(runtime.info("compile.phi", 245), _emit37(({ type: "string", value: ")) {\n" }))); +(runtime.info("compile.phi", 246), _emit_expr30(_truthy121)); +(runtime.info("compile.phi", 247), _emit37(({ type: "string", value: "}" }))); +if (runtime.truthy((runtime.info("compile.phi", 248), runtime.opNe(_falsy122, ({ type: "null" }))))) { +(runtime.info("compile.phi", 249), _emit37(({ type: "string", value: " else {\n" }))); +(runtime.info("compile.phi", 250), _emit_expr30(_falsy122)); +(runtime.info("compile.phi", 251), _emit37(({ type: "string", value: "}" }))); }; -(_first113 = ({ type: "bool", value: false })); -(runtime.setLine(287), _emit_expr30(_arg114)); +} else { +if (runtime.truthy((runtime.info("compile.phi", 253), runtime.opEq(_id84, ({ type: "string", value: "return" }))))) { +const r_147 = _s82; +const r_148 = r_147.values[0] ?? { type: "null"}; +const r_149 = r_147.values[1] ?? { type: "null"}; +let _value123 = r_149; +(runtime.info("compile.phi", 255), _emit37(({ type: "string", value: "runtime.popCall();\n" }))); +(runtime.info("compile.phi", 256), _emit37(({ type: "string", value: "return " }))); +if (runtime.truthy((runtime.info("compile.phi", 257), runtime.opNe(_value123, ({ type: "null" }))))) { +(runtime.info("compile.phi", 258), _emit_expr30(_value123)); +} else { +(runtime.info("compile.phi", 260), _emit37(({ type: "string", value: "{ type: \"null\" }" }))); }; -(runtime.setLine(290), _emit36(({ type: "string", value: "))" }))); -}}}}}}}}}}}}}}}}}}}}}}}}; +} else { +if (runtime.truthy((runtime.info("compile.phi", 262), runtime.opEq(_id84, ({ type: "string", value: "break" }))))) { +const r_150 = _s82; +const r_151 = r_150.values[0] ?? { type: "null"}; +const r_152 = r_150.values[1] ?? { type: "null"}; +let _value124 = r_152; +(runtime.info("compile.phi", 264), _emit37(({ type: "string", value: "break" }))); +if (runtime.truthy((runtime.info("compile.phi", 265), runtime.opNe(_value124, ({ type: "null" }))))) { +(runtime.info("compile.phi", 266), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "not implemented" }))); +}; +} else { +if (runtime.truthy((runtime.info("compile.phi", 268), runtime.opEq(_id84, ({ type: "string", value: "call" }))))) { +const r_153 = _s82; +const r_154 = r_153.values[0] ?? { type: "null"}; +const r_155 = r_153.values[1] ?? { type: "null"}; +let _callee125 = r_155; +const r_156 = (runtime.info("compile.phi", 270), _slice24(_s82, ({ type: "int", value: 2 }))); +let _args126 = r_156; +(runtime.info("compile.phi", 271), _emit37((runtime.info("compile.phi", 271), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(%, " }), (runtime.info("compile.phi", 271), _rt_info35(_line81)))))); +(runtime.info("compile.phi", 272), _emit_expr30(_callee125)); +(runtime.info("compile.phi", 273), _emit37(({ type: "string", value: "(" }))); +const r_157 = ({ type: "bool", value: true }); +let _first127 = r_157; +for (const r_158 of _args126.values) {; +let _arg128 = r_158; +if (runtime.truthy(runtime.opNot(_first127))) { +(runtime.info("compile.phi", 278), _emit37(({ type: "string", value: ", " }))); +}; +(_first127 = ({ type: "bool", value: false })); +(runtime.info("compile.phi", 282), _emit_expr30(_arg128)); +}; +(runtime.info("compile.phi", 285), _emit37(({ type: "string", value: "))" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 286), runtime.opEq(_id84, ({ type: "string", value: "list" }))))) { +(runtime.info("compile.phi", 287), _emit_list_literal32((runtime.info("compile.phi", 287), _slice24(_s82, ({ type: "int", value: 1 }))))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 288), runtime.opEq(_id84, ({ type: "string", value: "=" }))))) { +(runtime.info("compile.phi", 289), _emit_assign_expr36(_s82, _line81, ({ type: "string", value: "=" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 290), runtime.opEq(_id84, ({ type: "string", value: "+=" }))))) { +(runtime.info("compile.phi", 291), _emit_assign_expr36(_s82, _line81, ({ type: "string", value: "+" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 292), runtime.opEq(_id84, ({ type: "string", value: "-=" }))))) { +(runtime.info("compile.phi", 293), _emit_assign_expr36(_s82, _line81, ({ type: "string", value: "-" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 294), runtime.opEq(_id84, ({ type: "string", value: "or" }))))) { +const r_159 = _s82; +const r_160 = r_159.values[0] ?? { type: "null"}; +const r_161 = r_159.values[1] ?? { type: "null"}; +let _left129 = r_161; +const r_162 = r_159.values[2] ?? { type: "null"}; +let _right130 = r_162; +(runtime.info("compile.phi", 296), _emit37((runtime.info("compile.phi", 296), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(%" }), (runtime.info("compile.phi", 296), _rt_info35(_line81)), _line81)))); +(runtime.info("compile.phi", 297), _emit37(({ type: "string", value: ", { type: \"bool\", value: runtime.truthy(" }))); +(runtime.info("compile.phi", 298), _emit_expr30(_left129)); +(runtime.info("compile.phi", 299), _emit37(({ type: "string", value: ") || runtime.truthy(" }))); +(runtime.info("compile.phi", 300), _emit_expr30(_right130)); +(runtime.info("compile.phi", 301), _emit37(({ type: "string", value: ") })" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 302), runtime.opEq(_id84, ({ type: "string", value: "and" }))))) { +const r_163 = _s82; +const r_164 = r_163.values[0] ?? { type: "null"}; +const r_165 = r_163.values[1] ?? { type: "null"}; +let _left131 = r_165; +const r_166 = r_163.values[2] ?? { type: "null"}; +let _right132 = r_166; +(runtime.info("compile.phi", 304), _emit37((runtime.info("compile.phi", 304), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(%" }), (runtime.info("compile.phi", 304), _rt_info35(_line81)), _line81)))); +(runtime.info("compile.phi", 305), _emit37(({ type: "string", value: ", { type: \"bool\", value: runtime.truthy(" }))); +(runtime.info("compile.phi", 306), _emit_expr30(_left131)); +(runtime.info("compile.phi", 307), _emit37(({ type: "string", value: ") && runtime.truthy(" }))); +(runtime.info("compile.phi", 308), _emit_expr30(_right132)); +(runtime.info("compile.phi", 309), _emit37(({ type: "string", value: ") })" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 310), runtime.opEq(_id84, ({ type: "string", value: "==" }))))) { +(runtime.info("compile.phi", 311), _emit_binary_op34(_s82, ({ type: "string", value: "opEq" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 312), runtime.opEq(_id84, ({ type: "string", value: "!=" }))))) { +(runtime.info("compile.phi", 313), _emit_binary_op34(_s82, ({ type: "string", value: "opNe" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 314), runtime.opEq(_id84, ({ type: "string", value: "<" }))))) { +(runtime.info("compile.phi", 315), _emit_binary_op34(_s82, ({ type: "string", value: "opLt" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 316), runtime.opEq(_id84, ({ type: "string", value: ">" }))))) { +(runtime.info("compile.phi", 317), _emit_binary_op34(_s82, ({ type: "string", value: "opGt" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 318), runtime.opEq(_id84, ({ type: "string", value: "<=" }))))) { +(runtime.info("compile.phi", 319), _emit_binary_op34(_s82, ({ type: "string", value: "opLte" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 320), runtime.opEq(_id84, ({ type: "string", value: ">=" }))))) { +(runtime.info("compile.phi", 321), _emit_binary_op34(_s82, ({ type: "string", value: "opGte" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 322), runtime.opEq(_id84, ({ type: "string", value: "+" }))))) { +(runtime.info("compile.phi", 323), _emit_binary_op34(_s82, ({ type: "string", value: "opAdd" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 324), runtime.opEq(_id84, ({ type: "string", value: "-" }))))) { +(runtime.info("compile.phi", 325), _emit_binary_op34(_s82, ({ type: "string", value: "opSub" }))); +} else { +if (runtime.truthy((runtime.info("compile.phi", 326), runtime.opEq(_id84, ({ type: "string", value: "not" }))))) { +const r_167 = _s82; +const r_168 = r_167.values[0] ?? { type: "null"}; +const r_169 = r_167.values[1] ?? { type: "null"}; +let _expr133 = r_169; +(runtime.info("compile.phi", 328), _emit37(({ type: "string", value: "runtime.opNot(" }))); +(runtime.info("compile.phi", 329), _emit_expr30(_expr133)); +(runtime.info("compile.phi", 330), _emit37(({ type: "string", value: ")" }))); +} else { +const r_170 = _s82; +const r_171 = r_170.values[0] ?? { type: "null"}; +let _callee134 = r_171; +const r_172 = (runtime.info("compile.phi", 333), _slice24(_s82, ({ type: "int", value: 1 }))); +let _args135 = r_172; +(runtime.info("compile.phi", 334), _emit37((runtime.info("compile.phi", 334), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(%, " }), (runtime.info("compile.phi", 334), _rt_info35(_line81)), _line81)))); +(runtime.info("compile.phi", 335), _emit_expr30(_callee134)); +(runtime.info("compile.phi", 336), _emit37(({ type: "string", value: "(" }))); +const r_173 = ({ type: "bool", value: true }); +let _first136 = r_173; +for (const r_174 of _args135.values) {; +let _arg137 = r_174; +if (runtime.truthy(runtime.opNot(_first136))) { +(runtime.info("compile.phi", 341), _emit37(({ type: "string", value: ", " }))); +}; +(_first136 = ({ type: "bool", value: false })); +(runtime.info("compile.phi", 345), _emit_expr30(_arg137)); +}; +(runtime.info("compile.phi", 348), _emit37(({ type: "string", value: "))" }))); +}}}}}}}}}}}}}}}}}}}}}}}}}; ; runtime.popCall(); return { type: "null" }; }; -function _emit_list_literal32(_s115) { -runtime.pushCall("emit_list_literal"); -(runtime.setLine(295), _emit36(({ type: "string", value: "({ type: \"list\", values: [" }))); -const r_141 = ({ type: "bool", value: true }); -let _first116 = r_141; -for (const r_142 of _s115.values) {; -let _e117 = r_142; -if (runtime.truthy(runtime.opNot(_first116))) { -(runtime.setLine(299), _emit36(({ type: "string", value: ", " }))); +function _emit_list_literal32(_s138) { +runtime.pushCall("emit_list_literal", "compile.phi"); +(runtime.info("compile.phi", 353), _emit37(({ type: "string", value: "({ type: \"list\", values: [" }))); +const r_175 = ({ type: "bool", value: true }); +let _first139 = r_175; +for (const r_176 of _s138.values) {; +let _e140 = r_176; +if (runtime.truthy(runtime.opNot(_first139))) { +(runtime.info("compile.phi", 357), _emit37(({ type: "string", value: ", " }))); }; -(_first116 = ({ type: "bool", value: false })); -(runtime.setLine(303), _emit_expr30(_e117)); +(_first139 = ({ type: "bool", value: false })); +(runtime.info("compile.phi", 361), _emit_expr30(_e140)); }; -(runtime.setLine(305), _emit36(({ type: "string", value: "] })" }))); +(runtime.info("compile.phi", 363), _emit37(({ type: "string", value: "] })" }))); ; runtime.popCall(); return { type: "null" }; }; -function _emit_let_node33(_pat118, _base_reg119) { -runtime.pushCall("emit_let_node"); -const r_143 = _pat118; -const r_144 = r_143.values[0] ?? { type: "null"}; -let _pat_ty120 = r_144; -const r_145 = r_143.values[1] ?? { type: "null"}; -let _line121 = r_145; -if (runtime.truthy(runtime.opEq(_pat_ty120, ({ type: "string", value: "ident" })))) { -const r_146 = _pat118; -const r_147 = r_146.values[0] ?? { type: "null"}; -const r_148 = r_146.values[1] ?? { type: "null"}; -const r_149 = r_146.values[2] ?? { type: "null"}; -let _ident122 = r_149; -if (runtime.truthy(runtime.opEq(_ident122, ({ type: "string", value: "_" })))) { +function _emit_let_node33(_pat141, _base_reg142) { +runtime.pushCall("emit_let_node", "compile.phi"); +const r_177 = _pat141; +const r_178 = r_177.values[0] ?? { type: "null"}; +let _pat_ty143 = r_178; +const r_179 = r_177.values[1] ?? { type: "null"}; +let _line144 = r_179; +if (runtime.truthy((runtime.info("compile.phi", 368), runtime.opEq(_pat_ty143, ({ type: "string", value: "ident" }))))) { +const r_180 = _pat141; +const r_181 = r_180.values[0] ?? { type: "null"}; +const r_182 = r_180.values[1] ?? { type: "null"}; +const r_183 = r_180.values[2] ?? { type: "null"}; +let _ident145 = r_183; +if (runtime.truthy((runtime.info("compile.phi", 371), runtime.opEq(_ident145, ({ type: "string", value: "_" }))))) { runtime.popCall(); return { type: "null" }}; -const r_150 = (runtime.setLine(315), _define_let40(_ident122, _line121)); -let _sym_id123 = r_150; -(runtime.setLine(316), _emit36((runtime.setLine(316), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: ";\nlet _%% = r_%" }), _ident122, _sym_id123, _base_reg119)))); +const r_184 = (runtime.info("compile.phi", 373), _define_let41(_ident145, _line144)); +let _sym_id146 = r_184; +(runtime.info("compile.phi", 374), _emit37((runtime.info("compile.phi", 374), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: ";\nlet _%% = r_%" }), _ident145, _sym_id146, _base_reg142)))); } else { -if (runtime.truthy(runtime.opEq(_pat_ty120, ({ type: "string", value: "list" })))) { -const r_151 = _pat118; -const r_152 = r_151.values[0] ?? { type: "null"}; -const r_153 = r_151.values[1] ?? { type: "null"}; -const r_154 = r_151.values[2] ?? { type: "null"}; -let _pats124 = r_154; -const r_155 = ({ type: "int", value: 0 }); -let _i125 = r_155; -for (const r_156 of _pats124.values) {; -let _pat126 = r_156; -const r_157 = (runtime.setLine(322), _let_node_reg_count47()); -let _reg127 = r_157; -(runtime.setLine(323), _let_node_reg_increment48()); -(runtime.setLine(324), _emit36((runtime.setLine(324), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: ";\nconst r_% = r_%.values[%] ?? { type: \"null\"}" }), _reg127, _base_reg119, _i125)))); -(runtime.setLine(328), _emit_let_node33(_pat126, _reg127)); -(_i125 = runtime.opAdd(_i125, ({ type: "int", value: 1 }))); +if (runtime.truthy((runtime.info("compile.phi", 375), runtime.opEq(_pat_ty143, ({ type: "string", value: "list" }))))) { +const r_185 = _pat141; +const r_186 = r_185.values[0] ?? { type: "null"}; +const r_187 = r_185.values[1] ?? { type: "null"}; +const r_188 = r_185.values[2] ?? { type: "null"}; +let _pats147 = r_188; +const r_189 = ({ type: "int", value: 0 }); +let _i148 = r_189; +for (const r_190 of _pats147.values) {; +let _pat149 = r_190; +const r_191 = (runtime.info("compile.phi", 380), _let_node_reg_count53()); +let _reg150 = r_191; +(runtime.info("compile.phi", 381), _let_node_reg_increment54()); +(runtime.info("compile.phi", 382), _emit37((runtime.info("compile.phi", 382), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: ";\nconst r_% = r_%.values[%] ?? { type: \"null\"}" }), _reg150, _base_reg142, _i148)))); +(runtime.info("compile.phi", 386), _emit_let_node33(_pat149, _reg150)); +(_i148 = runtime.opAdd(_i148, ({ type: "int", value: 1 }))); }; } else { -(runtime.setLine(332), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "malformed pattern on line %" }), _line121)); +(runtime.info("compile.phi", 390), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "malformed pattern on line %" }), _line144)); }}; ; runtime.popCall(); return { type: "null" }; }; -function _emit_binary_op34(_s128, _id129) { -runtime.pushCall("emit_binary_op"); -const r_158 = _s128; -const r_159 = r_158.values[0] ?? { type: "null"}; -const r_160 = r_158.values[1] ?? { type: "null"}; -let _left130 = r_160; -const r_161 = r_158.values[2] ?? { type: "null"}; -let _right131 = r_161; -(runtime.setLine(338), _emit36((runtime.setLine(338), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.%(" }), _id129)))); -(runtime.setLine(339), _emit_expr30(_left130)); -(runtime.setLine(340), _emit36(({ type: "string", value: ", " }))); -(runtime.setLine(341), _emit_expr30(_right131)); -(runtime.setLine(342), _emit36(({ type: "string", value: ")" }))); +function _emit_binary_op34(_s151, _id152) { +runtime.pushCall("emit_binary_op", "compile.phi"); +const r_192 = _s151; +const r_193 = r_192.values[0] ?? { type: "null"}; +const r_194 = r_193.values[0] ?? { type: "null"}; +const r_195 = r_193.values[1] ?? { type: "null"}; +let _line153 = r_195; +const r_196 = r_193.values[2] ?? { type: "null"}; +const r_197 = r_192.values[1] ?? { type: "null"}; +let _left154 = r_197; +const r_198 = r_192.values[2] ?? { type: "null"}; +let _right155 = r_198; +(runtime.info("compile.phi", 396), _emit37((runtime.info("compile.phi", 396), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(%, runtime.%(" }), (runtime.info("compile.phi", 396), _rt_info35(_line153)), _id152)))); +(runtime.info("compile.phi", 397), _emit_expr30(_left154)); +(runtime.info("compile.phi", 398), _emit37(({ type: "string", value: ", " }))); +(runtime.info("compile.phi", 399), _emit_expr30(_right155)); +(runtime.info("compile.phi", 400), _emit37(({ type: "string", value: "))" }))); ; runtime.popCall(); return { type: "null" }; }; -function _emit_assign_expr35(_s132, _line133, _id134) { -runtime.pushCall("emit_assign_expr"); -const r_162 = _s132; -const r_163 = r_162.values[0] ?? { type: "null"}; -const r_164 = r_162.values[1] ?? { type: "null"}; -const r_165 = r_164.values[0] ?? { type: "null"}; -let _target_type135 = r_165; -const r_166 = r_162.values[2] ?? { type: "null"}; -let _expr136 = r_166; -if (runtime.truthy(runtime.opNe(_target_type135, ({ type: "string", value: "ident" })))) { -(runtime.setLine(348), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "cannot assign to expression on line %" }), _line133)); +function _rt_info35(_line156) { +runtime.pushCall("rt_info", "compile.phi"); +runtime.popCall(); +return (runtime.info("compile.phi", 404), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.info(\"%\", %)" }), _filename49, _line156)); +; +runtime.popCall(); +return { type: "null" }; }; -const r_167 = _s132; -const r_168 = r_167.values[0] ?? { type: "null"}; -const r_169 = r_167.values[1] ?? { type: "null"}; -const r_170 = r_169.values[0] ?? { type: "null"}; -const r_171 = r_169.values[1] ?? { type: "null"}; -const r_172 = r_169.values[2] ?? { type: "null"}; -let _ident137 = r_172; -const r_173 = (runtime.setLine(351), _get_sym45(_ident137)); -let _sym138 = r_173; -if (runtime.truthy(runtime.opEq(_sym138, ({ type: "null" })))) { -(runtime.setLine(353), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "could not find symbol '%' on line %" }), _ident137, _line133)); +function _emit_assign_expr36(_s157, _line158, _id159) { +runtime.pushCall("emit_assign_expr", "compile.phi"); +const r_199 = _s157; +const r_200 = r_199.values[0] ?? { type: "null"}; +const r_201 = r_199.values[1] ?? { type: "null"}; +const r_202 = r_201.values[0] ?? { type: "null"}; +let _target_type160 = r_202; +const r_203 = r_199.values[2] ?? { type: "null"}; +let _expr161 = r_203; +if (runtime.truthy((runtime.info("compile.phi", 409), runtime.opNe(_target_type160, ({ type: "string", value: "ident" }))))) { +(runtime.info("compile.phi", 410), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "cannot assign to expression on line %" }), _line158)); }; -const r_174 = _sym138; -const r_175 = r_174.values[0] ?? { type: "null"}; -let _sym_id139 = r_175; -const r_176 = r_174.values[1] ?? { type: "null"}; -let _sym_type140 = r_176; -const r_177 = r_174.values[2] ?? { type: "null"}; -let _sym_ident141 = r_177; -const r_178 = r_174.values[3] ?? { type: "null"}; -if (runtime.truthy(runtime.opEq(_sym_type140, ({ type: "string", value: "let" })))) { -(runtime.setLine(357), _emit36((runtime.setLine(357), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(_%% = " }), _sym_ident141, _sym_id139)))); -if (runtime.truthy(runtime.opEq(_id134, ({ type: "string", value: "=" })))) { -(runtime.setLine(359), _emit_expr30(_expr136)); +const r_204 = _s157; +const r_205 = r_204.values[0] ?? { type: "null"}; +const r_206 = r_204.values[1] ?? { type: "null"}; +const r_207 = r_206.values[0] ?? { type: "null"}; +const r_208 = r_206.values[1] ?? { type: "null"}; +const r_209 = r_206.values[2] ?? { type: "null"}; +let _ident162 = r_209; +const r_210 = (runtime.info("compile.phi", 413), _get_sym45(_ident162)); +let _sym163 = r_210; +if (runtime.truthy((runtime.info("compile.phi", 414), runtime.opEq(_sym163, ({ type: "null" }))))) { +(runtime.info("compile.phi", 415), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "could not find symbol '%' on line %" }), _ident162, _line158)); +}; +const r_211 = _sym163; +const r_212 = r_211.values[0] ?? { type: "null"}; +let _sym_id164 = r_212; +const r_213 = r_211.values[1] ?? { type: "null"}; +let _sym_type165 = r_213; +const r_214 = r_211.values[2] ?? { type: "null"}; +let _sym_ident166 = r_214; +const r_215 = r_211.values[3] ?? { type: "null"}; +if (runtime.truthy((runtime.info("compile.phi", 418), runtime.opEq(_sym_type165, ({ type: "string", value: "let" }))))) { +(runtime.info("compile.phi", 419), _emit37((runtime.info("compile.phi", 419), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(_%% = " }), _sym_ident166, _sym_id164)))); +if (runtime.truthy((runtime.info("compile.phi", 420), runtime.opEq(_id159, ({ type: "string", value: "=" }))))) { +(runtime.info("compile.phi", 421), _emit_expr30(_expr161)); } else { -if (runtime.truthy(runtime.opEq(_id134, ({ type: "string", value: "+" })))) { -(runtime.setLine(361), _emit36((runtime.setLine(361), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.opAdd(_%%, " }), _sym_ident141, _sym_id139)))); -(runtime.setLine(362), _emit_expr30(_expr136)); -(runtime.setLine(363), _emit36(({ type: "string", value: ")" }))); +if (runtime.truthy((runtime.info("compile.phi", 422), runtime.opEq(_id159, ({ type: "string", value: "+" }))))) { +(runtime.info("compile.phi", 423), _emit37((runtime.info("compile.phi", 423), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.opAdd(_%%, " }), _sym_ident166, _sym_id164)))); +(runtime.info("compile.phi", 424), _emit_expr30(_expr161)); +(runtime.info("compile.phi", 425), _emit37(({ type: "string", value: ")" }))); } else { -if (runtime.truthy(runtime.opEq(_id134, ({ type: "string", value: "-" })))) { -(runtime.setLine(365), _emit36((runtime.setLine(365), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.opSub(_%%, " }), _sym_ident141, _sym_id139)))); -(runtime.setLine(366), _emit_expr30(_expr136)); -(runtime.setLine(367), _emit36(({ type: "string", value: ")" }))); +if (runtime.truthy((runtime.info("compile.phi", 426), runtime.opEq(_id159, ({ type: "string", value: "-" }))))) { +(runtime.info("compile.phi", 427), _emit37((runtime.info("compile.phi", 427), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.opSub(_%%, " }), _sym_ident166, _sym_id164)))); +(runtime.info("compile.phi", 428), _emit_expr30(_expr161)); +(runtime.info("compile.phi", 429), _emit37(({ type: "string", value: ")" }))); } else { -(runtime.setLine(369), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "not implemented" }))); +(runtime.info("compile.phi", 431), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "not implemented" }))); }}}; -(runtime.setLine(371), _emit36(({ type: "string", value: ")" }))); +(runtime.info("compile.phi", 433), _emit37(({ type: "string", value: ")" }))); } else { -(runtime.setLine(373), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "cannot assign to symbol '%' on line %" }), _sym_ident141, _line133)); +(runtime.info("compile.phi", 435), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "cannot assign to symbol '%' on line %" }), _sym_ident166, _line158)); }; ; runtime.popCall(); return { type: "null" }; }; -function _emit36(_str142) { -runtime.pushCall("emit"); -(runtime.setLine(378), ((...args) => runtime.builtinPush(...args))(_output41, _str142)); +function _emit37(_str167) { +runtime.pushCall("emit", "compile.phi"); +(runtime.info("compile.phi", 440), ((...args) => runtime.builtinPush(...args))(_output48, _str167)); ; runtime.popCall(); return { type: "null" }; }; -function _define_builtin37(_ident143, _builtin_id144) { -runtime.pushCall("define_builtin"); -const r_179 = (runtime.setLine(382), _sym_id_count49()); -let _sym_id145 = r_179; -(runtime.setLine(383), _sym_id_increment50()); -(runtime.setLine(385), _define_sym44(_ident143, ({ type: "list", values: [_sym_id145, ({ type: "string", value: "builtin" }), _builtin_id144] }))); +function _define_builtin38(_ident168, _builtin_id169) { +runtime.pushCall("define_builtin", "compile.phi"); +const r_216 = (runtime.info("compile.phi", 444), _sym_id_count51()); +let _sym_id170 = r_216; +(runtime.info("compile.phi", 445), _sym_id_increment52()); +(runtime.info("compile.phi", 447), _define_sym44(_ident168, ({ type: "list", values: [_sym_id170, ({ type: "string", value: "builtin" }), _builtin_id169] }))); runtime.popCall(); -return _sym_id145; +return _sym_id170; ; runtime.popCall(); return { type: "null" }; }; -function _define_fn38(_ident146, _line147) { -runtime.pushCall("define_fn"); -const r_180 = (runtime.setLine(390), _sym_id_count49()); -let _sym_id148 = r_180; -(runtime.setLine(391), _sym_id_increment50()); -(runtime.setLine(393), _define_sym44(_ident146, ({ type: "list", values: [_sym_id148, ({ type: "string", value: "fn" }), _ident146, _line147] }))); +function _define_fn39(_ident171, _line172) { +runtime.pushCall("define_fn", "compile.phi"); +const r_217 = (runtime.info("compile.phi", 452), _sym_id_count51()); +let _sym_id173 = r_217; +(runtime.info("compile.phi", 453), _sym_id_increment52()); +(runtime.info("compile.phi", 455), _define_sym44(_ident171, ({ type: "list", values: [_sym_id173, ({ type: "string", value: "fn" }), _ident171, _line172] }))); runtime.popCall(); -return _sym_id148; +return _sym_id173; ; runtime.popCall(); return { type: "null" }; }; -function _define_param39(_ident149, _line150) { -runtime.pushCall("define_param"); -const r_181 = (runtime.setLine(398), _sym_id_count49()); -let _sym_id151 = r_181; -(runtime.setLine(399), _sym_id_increment50()); -(runtime.setLine(401), _define_sym44(_ident149, ({ type: "list", values: [_sym_id151, ({ type: "string", value: "param" }), _ident149, _line150] }))); +function _define_param40(_ident174, _line175) { +runtime.pushCall("define_param", "compile.phi"); +const r_218 = (runtime.info("compile.phi", 460), _sym_id_count51()); +let _sym_id176 = r_218; +(runtime.info("compile.phi", 461), _sym_id_increment52()); +(runtime.info("compile.phi", 463), _define_sym44(_ident174, ({ type: "list", values: [_sym_id176, ({ type: "string", value: "param" }), _ident174, _line175] }))); runtime.popCall(); -return _sym_id151; +return _sym_id176; ; runtime.popCall(); return { type: "null" }; }; -function _define_let40(_ident152, _line153) { -runtime.pushCall("define_let"); -const r_182 = (runtime.setLine(406), _sym_id_count49()); -let _sym_id154 = r_182; -(runtime.setLine(407), _sym_id_increment50()); -(runtime.setLine(409), _define_sym44(_ident152, ({ type: "list", values: [_sym_id154, ({ type: "string", value: "let" }), _ident152, _line153] }))); +function _define_let41(_ident177, _line178) { +runtime.pushCall("define_let", "compile.phi"); +const r_219 = (runtime.info("compile.phi", 468), _sym_id_count51()); +let _sym_id179 = r_219; +(runtime.info("compile.phi", 469), _sym_id_increment52()); +(runtime.info("compile.phi", 471), _define_sym44(_ident177, ({ type: "list", values: [_sym_id179, ({ type: "string", value: "let" }), _ident177, _line178] }))); runtime.popCall(); -return _sym_id154; +return _sym_id179; +; +runtime.popCall(); +return { type: "null" }; +}; +function _enter_scope42() { +runtime.pushCall("enter_scope", "compile.phi"); +const r_220 = _syms50; +const r_221 = r_220.values[0] ?? { type: "null"}; +let _enter_scope180 = r_221; +(runtime.info("compile.phi", 478), _enter_scope180()); +; +runtime.popCall(); +return { type: "null" }; +}; +function _leave_scope43() { +runtime.pushCall("leave_scope", "compile.phi"); +const r_222 = _syms50; +const r_223 = r_222.values[0] ?? { type: "null"}; +const r_224 = r_222.values[1] ?? { type: "null"}; +let _leave_scope181 = r_224; +(runtime.info("compile.phi", 482), _leave_scope181()); +; +runtime.popCall(); +return { type: "null" }; +}; +function _define_sym44(_ident182, _sym183) { +runtime.pushCall("define_sym", "compile.phi"); +const r_225 = _syms50; +const r_226 = r_225.values[0] ?? { type: "null"}; +const r_227 = r_225.values[1] ?? { type: "null"}; +const r_228 = r_225.values[2] ?? { type: "null"}; +let _define_sym184 = r_228; +runtime.popCall(); +return (runtime.info("compile.phi", 486), _define_sym184(_ident182, _sym183)); +; +runtime.popCall(); +return { type: "null" }; +}; +function _get_sym45(_ident185) { +runtime.pushCall("get_sym", "compile.phi"); +const r_229 = _syms50; +const r_230 = r_229.values[0] ?? { type: "null"}; +const r_231 = r_229.values[1] ?? { type: "null"}; +const r_232 = r_229.values[2] ?? { type: "null"}; +const r_233 = r_229.values[3] ?? { type: "null"}; +let _get_sym186 = r_233; +runtime.popCall(); +return (runtime.info("compile.phi", 490), _get_sym186(_ident185)); +; +runtime.popCall(); +return { type: "null" }; +}; +function _get_current_map46() { +runtime.pushCall("get_current_map", "compile.phi"); +const r_234 = _syms50; +const r_235 = r_234.values[0] ?? { type: "null"}; +const r_236 = r_234.values[1] ?? { type: "null"}; +const r_237 = r_234.values[2] ?? { type: "null"}; +const r_238 = r_234.values[3] ?? { type: "null"}; +const r_239 = r_234.values[4] ?? { type: "null"}; +let _get_current_map187 = r_239; +runtime.popCall(); +return (runtime.info("compile.phi", 494), _get_current_map187()); +; +runtime.popCall(); +return { type: "null" }; +}; +function _print_syms47() { +runtime.pushCall("print_syms", "compile.phi"); +const r_240 = _syms50; +const r_241 = r_240.values[0] ?? { type: "null"}; +const r_242 = r_240.values[1] ?? { type: "null"}; +const r_243 = r_240.values[2] ?? { type: "null"}; +const r_244 = r_240.values[3] ?? { type: "null"}; +const r_245 = r_240.values[4] ?? { type: "null"}; +const r_246 = r_240.values[5] ?? { type: "null"}; +let _print_syms188 = r_246; +(runtime.info("compile.phi", 498), _print_syms188()); ; runtime.popCall(); return { type: "null" }; @@ -668,105 +840,105 @@ runtime.popCall(); return { type: "null" }; }; function _Counter15() { -runtime.pushCall("Counter"); -const r_183 = ({ type: "int", value: 0 }); -let _counter157 = r_183; -function _count155() { -runtime.pushCall("count"); +runtime.pushCall("Counter", "compile.phi"); +const r_247 = ({ type: "int", value: 0 }); +let _counter191 = r_247; +function _count189() { +runtime.pushCall("count", "compile.phi"); runtime.popCall(); -return _counter157; +return _counter191; ; runtime.popCall(); return { type: "null" }; }; -function _increment156() { -runtime.pushCall("increment"); -(_counter157 = runtime.opAdd(_counter157, ({ type: "int", value: 1 }))); +function _increment190() { +runtime.pushCall("increment", "compile.phi"); +(_counter191 = runtime.opAdd(_counter191, ({ type: "int", value: 1 }))); ; runtime.popCall(); return { type: "null" }; }; runtime.popCall(); -return ({ type: "list", values: [_count155, _increment156] }); +return ({ type: "list", values: [_count189, _increment190] }); ; runtime.popCall(); return { type: "null" }; }; function _Syms16() { -runtime.pushCall("Syms"); -const r_184 = ({ type: "list", values: [({ type: "null" }), ({ type: "list", values: [] })] }); -let _syms165 = r_184; -function _enter_scope158() { -runtime.pushCall("enter_scope"); -(_syms165 = ({ type: "list", values: [_syms165, ({ type: "list", values: [] })] })); +runtime.pushCall("Syms", "compile.phi"); +const r_248 = ({ type: "list", values: [({ type: "null" }), ({ type: "list", values: [] })] }); +let _syms200 = r_248; +function _enter_scope192() { +runtime.pushCall("enter_scope", "compile.phi"); +(_syms200 = ({ type: "list", values: [_syms200, ({ type: "list", values: [] })] })); ; runtime.popCall(); return { type: "null" }; }; -function _leave_scope159() { -runtime.pushCall("leave_scope"); -const r_185 = _syms165; -const r_186 = r_185.values[0] ?? { type: "null"}; -let _parent166 = r_186; -const r_187 = r_185.values[1] ?? { type: "null"}; -(_syms165 = _parent166); +function _leave_scope193() { +runtime.pushCall("leave_scope", "compile.phi"); +const r_249 = _syms200; +const r_250 = r_249.values[0] ?? { type: "null"}; +let _parent201 = r_250; +const r_251 = r_249.values[1] ?? { type: "null"}; +(_syms200 = _parent201); ; runtime.popCall(); return { type: "null" }; }; -function _define160(_ident167, _sym168) { -runtime.pushCall("define"); -const r_188 = _syms165; -const r_189 = r_188.values[0] ?? { type: "null"}; -const r_190 = r_188.values[1] ?? { type: "null"}; -let _map169 = r_190; -const r_191 = ({ type: "int", value: 0 }); -let _i170 = r_191; +function _define_sym194(_ident202, _sym203) { +runtime.pushCall("define_sym", "compile.phi"); +const r_252 = _syms200; +const r_253 = r_252.values[0] ?? { type: "null"}; +const r_254 = r_252.values[1] ?? { type: "null"}; +let _map204 = r_254; +const r_255 = ({ type: "int", value: 0 }); +let _i205 = r_255; while (true) { -if (runtime.truthy(runtime.opGte(_i170, (runtime.setLine(446), ((...args) => runtime.builtinLen(...args))(_map169))))) { +if (runtime.truthy((runtime.info("compile.phi", 534), runtime.opGte(_i205, (runtime.info("compile.phi", 534), ((...args) => runtime.builtinLen(...args))(_map204)))))) { break}; -const r_192 = (runtime.setLine(447), ((...args) => runtime.builtinAt(...args))(_map169, _i170)); -const r_193 = r_192.values[0] ?? { type: "null"}; -let _s_ident171 = r_193; -const r_194 = r_192.values[1] ?? { type: "null"}; -if (runtime.truthy(runtime.opEq(_ident167, _s_ident171))) { -(runtime.setLine(449), ((...args) => runtime.builtinSet(...args))(_map169, _i170, ({ type: "list", values: [_ident167, _sym168] }))); +const r_256 = (runtime.info("compile.phi", 535), ((...args) => runtime.builtinAt(...args))(_map204, _i205)); +const r_257 = r_256.values[0] ?? { type: "null"}; +let _s_ident206 = r_257; +const r_258 = r_256.values[1] ?? { type: "null"}; +if (runtime.truthy((runtime.info("compile.phi", 536), runtime.opEq(_ident202, _s_ident206)))) { +(runtime.info("compile.phi", 537), ((...args) => runtime.builtinSet(...args))(_map204, _i205, ({ type: "list", values: [_ident202, _sym203] }))); runtime.popCall(); return { type: "null" }; }; -(_i170 = runtime.opAdd(_i170, ({ type: "int", value: 1 }))); +(_i205 = runtime.opAdd(_i205, ({ type: "int", value: 1 }))); }; -(runtime.setLine(454), ((...args) => runtime.builtinPush(...args))(_map169, ({ type: "list", values: [_ident167, _sym168] }))); +(runtime.info("compile.phi", 542), ((...args) => runtime.builtinPush(...args))(_map204, ({ type: "list", values: [_ident202, _sym203] }))); ; runtime.popCall(); return { type: "null" }; }; -function _find_sym161(_syms172, _ident173) { -runtime.pushCall("find_sym"); -const r_195 = _syms172; -const r_196 = r_195.values[0] ?? { type: "null"}; -let _parent174 = r_196; -const r_197 = r_195.values[1] ?? { type: "null"}; -let _map175 = r_197; -const r_198 = ({ type: "int", value: 0 }); -let _i176 = r_198; +function _find_sym195(_syms207, _ident208) { +runtime.pushCall("find_sym", "compile.phi"); +const r_259 = _syms207; +const r_260 = r_259.values[0] ?? { type: "null"}; +let _parent209 = r_260; +const r_261 = r_259.values[1] ?? { type: "null"}; +let _map210 = r_261; +const r_262 = ({ type: "int", value: 0 }); +let _i211 = r_262; while (true) { -if (runtime.truthy(runtime.opGte(_i176, (runtime.setLine(461), ((...args) => runtime.builtinLen(...args))(_map175))))) { +if (runtime.truthy((runtime.info("compile.phi", 549), runtime.opGte(_i211, (runtime.info("compile.phi", 549), ((...args) => runtime.builtinLen(...args))(_map210)))))) { break}; -const r_199 = (runtime.setLine(462), ((...args) => runtime.builtinAt(...args))(_map175, _i176)); -const r_200 = r_199.values[0] ?? { type: "null"}; -let _s_ident177 = r_200; -const r_201 = r_199.values[1] ?? { type: "null"}; -let _s_sym178 = r_201; -if (runtime.truthy(runtime.opEq(_ident173, _s_ident177))) { +const r_263 = (runtime.info("compile.phi", 550), ((...args) => runtime.builtinAt(...args))(_map210, _i211)); +const r_264 = r_263.values[0] ?? { type: "null"}; +let _s_ident212 = r_264; +const r_265 = r_263.values[1] ?? { type: "null"}; +let _s_sym213 = r_265; +if (runtime.truthy((runtime.info("compile.phi", 551), runtime.opEq(_ident208, _s_ident212)))) { runtime.popCall(); -return _s_sym178; +return _s_sym213; }; -(_i176 = runtime.opAdd(_i176, ({ type: "int", value: 1 }))); +(_i211 = runtime.opAdd(_i211, ({ type: "int", value: 1 }))); }; -if (runtime.truthy(runtime.opNe(_parent174, ({ type: "null" })))) { +if (runtime.truthy((runtime.info("compile.phi", 556), runtime.opNe(_parent209, ({ type: "null" }))))) { runtime.popCall(); -return (runtime.setLine(469), _find_sym161(_parent174, _ident173)); +return (runtime.info("compile.phi", 557), _find_sym195(_parent209, _ident208)); }; runtime.popCall(); return ({ type: "null" }); @@ -774,329 +946,341 @@ return ({ type: "null" }); runtime.popCall(); return { type: "null" }; }; -function _get162(_ident179) { -runtime.pushCall("get"); +function _get_sym196(_ident214) { +runtime.pushCall("get_sym", "compile.phi"); runtime.popCall(); -return (runtime.setLine(475), _find_sym161(_syms165, _ident179)); +return (runtime.info("compile.phi", 563), _find_sym195(_syms200, _ident214)); ; runtime.popCall(); return { type: "null" }; }; -function _print_syms_node163(_syms180, _depth181) { -runtime.pushCall("print_syms_node"); -const r_202 = _syms180; -const r_203 = r_202.values[0] ?? { type: "null"}; -let _parent182 = r_203; -const r_204 = r_202.values[1] ?? { type: "null"}; -let _map183 = r_204; -for (const r_205 of _map183.values) {; -const r_206 = r_205.values[0] ?? { type: "null"}; -let _ident184 = r_206; -const r_207 = r_205.values[1] ?? { type: "null"}; -let _sym185 = r_207; -(runtime.setLine(481), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%- %: %" }), (runtime.setLine(481), _indent23(_depth181)), _ident184, _sym185)); +function _get_current_map197() { +runtime.pushCall("get_current_map", "compile.phi"); +const r_266 = _syms200; +const r_267 = r_266.values[0] ?? { type: "null"}; +const r_268 = r_266.values[1] ?? { type: "null"}; +let _map215 = r_268; +runtime.popCall(); +return _map215; +; +runtime.popCall(); +return { type: "null" }; }; -if (runtime.truthy(runtime.opNe(_parent182, ({ type: "null" })))) { -(runtime.setLine(484), _print_syms_node163(_parent182, runtime.opAdd(_depth181, ({ type: "int", value: 1 })))); +function _print_syms_node198(_syms216, _depth217) { +runtime.pushCall("print_syms_node", "compile.phi"); +const r_269 = _syms216; +const r_270 = r_269.values[0] ?? { type: "null"}; +let _parent218 = r_270; +const r_271 = r_269.values[1] ?? { type: "null"}; +let _map219 = r_271; +for (const r_272 of _map219.values) {; +const r_273 = r_272.values[0] ?? { type: "null"}; +let _ident220 = r_273; +const r_274 = r_272.values[1] ?? { type: "null"}; +let _sym221 = r_274; +(runtime.info("compile.phi", 574), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%- %: %" }), (runtime.info("compile.phi", 574), _indent23(_depth217)), _ident220, _sym221)); +}; +if (runtime.truthy((runtime.info("compile.phi", 576), runtime.opNe(_parent218, ({ type: "null" }))))) { +(runtime.info("compile.phi", 577), _print_syms_node198(_parent218, (runtime.info("compile.phi", 577), runtime.opAdd(_depth217, ({ type: "int", value: 1 }))))); }; ; runtime.popCall(); return { type: "null" }; }; -function _print_syms164() { -runtime.pushCall("print_syms"); -(runtime.setLine(489), _print_syms_node163(_syms165, ({ type: "int", value: 0 }))); +function _print_syms199() { +runtime.pushCall("print_syms", "compile.phi"); +(runtime.info("compile.phi", 582), _print_syms_node198(_syms200, ({ type: "int", value: 0 }))); ; runtime.popCall(); return { type: "null" }; }; runtime.popCall(); -return ({ type: "list", values: [_enter_scope158, _leave_scope159, _define160, _get162, _print_syms164] }); +return ({ type: "list", values: [_enter_scope192, _leave_scope193, _define_sym194, _get_sym196, _get_current_map197, _print_syms199] }); ; runtime.popCall(); return { type: "null" }; }; -function _string_escape17(_str186) { -runtime.pushCall("string_escape"); -const r_208 = (runtime.setLine(503), ((...args) => runtime.builtinLen(...args))(_str186)); -let _str_len187 = r_208; -const r_209 = ({ type: "int", value: 0 }); -let _i188 = r_209; -const r_210 = ({ type: "string", value: "" }); -let _result189 = r_210; +function _string_escape17(_str222) { +runtime.pushCall("string_escape", "compile.phi"); +const r_275 = (runtime.info("compile.phi", 597), ((...args) => runtime.builtinLen(...args))(_str222)); +let _str_len223 = r_275; +const r_276 = ({ type: "int", value: 0 }); +let _i224 = r_276; +const r_277 = ({ type: "string", value: "" }); +let _result225 = r_277; while (true) { -if (runtime.truthy(runtime.opGte(_i188, _str_len187))) { +if (runtime.truthy((runtime.info("compile.phi", 601), runtime.opGte(_i224, _str_len223)))) { break}; -const r_211 = (runtime.setLine(508), ((...args) => runtime.builtinAt(...args))(_str186, _i188)); -let _ch190 = r_211; -if (runtime.truthy(runtime.opEq(_ch190, ({ type: "string", value: "\\" })))) { -(_result189 = runtime.opAdd(_result189, ({ type: "string", value: "\\\\" }))); +const r_278 = (runtime.info("compile.phi", 602), ((...args) => runtime.builtinAt(...args))(_str222, _i224)); +let _ch226 = r_278; +if (runtime.truthy((runtime.info("compile.phi", 603), runtime.opEq(_ch226, ({ type: "string", value: "\\" }))))) { +(_result225 = runtime.opAdd(_result225, ({ type: "string", value: "\\\\" }))); } else { -if (runtime.truthy(runtime.opEq(_ch190, ({ type: "string", value: "\"" })))) { -(_result189 = runtime.opAdd(_result189, ({ type: "string", value: "\\\"" }))); +if (runtime.truthy((runtime.info("compile.phi", 605), runtime.opEq(_ch226, ({ type: "string", value: "\"" }))))) { +(_result225 = runtime.opAdd(_result225, ({ type: "string", value: "\\\"" }))); } else { -if (runtime.truthy(runtime.opEq(_ch190, ({ type: "string", value: "\t" })))) { -(_result189 = runtime.opAdd(_result189, ({ type: "string", value: "\\t" }))); +if (runtime.truthy((runtime.info("compile.phi", 607), runtime.opEq(_ch226, ({ type: "string", value: "\t" }))))) { +(_result225 = runtime.opAdd(_result225, ({ type: "string", value: "\\t" }))); } else { -if (runtime.truthy(runtime.opEq(_ch190, ({ type: "string", value: "\r" })))) { -(_result189 = runtime.opAdd(_result189, ({ type: "string", value: "\\r" }))); +if (runtime.truthy((runtime.info("compile.phi", 609), runtime.opEq(_ch226, ({ type: "string", value: "\r" }))))) { +(_result225 = runtime.opAdd(_result225, ({ type: "string", value: "\\r" }))); } else { -if (runtime.truthy(runtime.opEq(_ch190, ({ type: "string", value: "\n" })))) { -(_result189 = runtime.opAdd(_result189, ({ type: "string", value: "\\n" }))); +if (runtime.truthy((runtime.info("compile.phi", 611), runtime.opEq(_ch226, ({ type: "string", value: "\n" }))))) { +(_result225 = runtime.opAdd(_result225, ({ type: "string", value: "\\n" }))); } else { -if (runtime.truthy(runtime.opEq(_ch190, ({ type: "string", value: "\n" })))) { -(_result189 = runtime.opAdd(_result189, ({ type: "string", value: "\\0" }))); +if (runtime.truthy((runtime.info("compile.phi", 613), runtime.opEq(_ch226, ({ type: "string", value: "\n" }))))) { +(_result225 = runtime.opAdd(_result225, ({ type: "string", value: "\\0" }))); } else { -(_result189 = runtime.opAdd(_result189, _ch190)); +(_result225 = runtime.opAdd(_result225, _ch226)); }}}}}}; -(_i188 = runtime.opAdd(_i188, ({ type: "int", value: 1 }))); +(_i224 = runtime.opAdd(_i224, ({ type: "int", value: 1 }))); }; runtime.popCall(); -return _result189; +return _result225; ; runtime.popCall(); return { type: "null" }; }; -function _Parser18(_tokens191) { -runtime.pushCall("Parser"); -const r_212 = ({ type: "int", value: 0 }); -let _i198 = r_212; -const r_213 = (runtime.setLine(531), ((...args) => runtime.builtinAt(...args))(_tokens191, _i198)); -let _tok199 = r_213; -function _parse192() { -runtime.pushCall("parse"); -const r_214 = ({ type: "list", values: [] }); -let _exprs200 = r_214; +function _Parser18(_tokens227) { +runtime.pushCall("Parser", "compile.phi"); +const r_279 = ({ type: "int", value: 0 }); +let _i234 = r_279; +const r_280 = (runtime.info("compile.phi", 625), ((...args) => runtime.builtinAt(...args))(_tokens227, _i234)); +let _tok235 = r_280; +function _parse228() { +runtime.pushCall("parse", "compile.phi"); +const r_281 = ({ type: "list", values: [] }); +let _exprs236 = r_281; while (true) { -if (runtime.truthy((runtime.setLine(536), _done197()))) { +if (runtime.truthy((runtime.info("compile.phi", 630), _done233()))) { break}; -(runtime.setLine(537), ((...args) => runtime.builtinPush(...args))(_exprs200, (runtime.setLine(537), _parse_expr193()))); +(runtime.info("compile.phi", 631), ((...args) => runtime.builtinPush(...args))(_exprs236, (runtime.info("compile.phi", 631), _parse_expr229()))); }; runtime.popCall(); -return _exprs200; +return _exprs236; ; runtime.popCall(); return { type: "null" }; }; -function _parse_expr193() { -runtime.pushCall("parse_expr"); -const r_215 = _tok199; -const r_216 = r_215.values[0] ?? { type: "null"}; -let _ty201 = r_216; -const r_217 = r_215.values[1] ?? { type: "null"}; -let _line202 = r_217; -const r_218 = r_215.values[2] ?? { type: "null"}; -let _value203 = r_218; -if (runtime.truthy((runtime.setLine(544), _eat194(({ type: "string", value: "(" }))))) { -const r_219 = ({ type: "list", values: [] }); -let _values204 = r_219; +function _parse_expr229() { +runtime.pushCall("parse_expr", "compile.phi"); +const r_282 = _tok235; +const r_283 = r_282.values[0] ?? { type: "null"}; +let _ty237 = r_283; +const r_284 = r_282.values[1] ?? { type: "null"}; +let _line238 = r_284; +const r_285 = r_282.values[2] ?? { type: "null"}; +let _value239 = r_285; +if (runtime.truthy((runtime.info("compile.phi", 638), _eat230(({ type: "string", value: "(" }))))) { +const r_286 = ({ type: "list", values: [] }); +let _values240 = r_286; while (true) { -if (runtime.truthy((runtime.setLine(547), _test196(({ type: "string", value: ")" }))))) { +if (runtime.truthy((runtime.info("compile.phi", 641), _test232(({ type: "string", value: ")" }))))) { break}; -(runtime.setLine(548), ((...args) => runtime.builtinPush(...args))(_values204, (runtime.setLine(548), _parse_expr193()))); +(runtime.info("compile.phi", 642), ((...args) => runtime.builtinPush(...args))(_values240, (runtime.info("compile.phi", 642), _parse_expr229()))); }; -if (runtime.truthy(runtime.opNot((runtime.setLine(550), _eat194(({ type: "string", value: ")" })))))) { -(runtime.setLine(551), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected ')' on line %" }), (runtime.setLine(551), ((...args) => runtime.builtinAt(...args))(_tok199, ({ type: "int", value: 1 }))))); +if (runtime.truthy(runtime.opNot((runtime.info("compile.phi", 644), _eat230(({ type: "string", value: ")" })))))) { +(runtime.info("compile.phi", 645), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected ')' on line %" }), (runtime.info("compile.phi", 645), ((...args) => runtime.builtinAt(...args))(_tok235, ({ type: "int", value: 1 }))))); }; runtime.popCall(); -return ({ type: "list", values: [({ type: "string", value: "list" }), _line202, _values204] }); +return ({ type: "list", values: [({ type: "string", value: "list" }), _line238, _values240] }); } else { -if (runtime.truthy((runtime.setLine(554), _eat194(({ type: "string", value: "string" }))))) { +if (runtime.truthy((runtime.info("compile.phi", 648), _eat230(({ type: "string", value: "string" }))))) { runtime.popCall(); -return ({ type: "list", values: [({ type: "string", value: "string" }), _line202, _value203] }); +return ({ type: "list", values: [({ type: "string", value: "string" }), _line238, _value239] }); } else { -if (runtime.truthy((runtime.setLine(556), _eat194(({ type: "string", value: "int" }))))) { +if (runtime.truthy((runtime.info("compile.phi", 650), _eat230(({ type: "string", value: "int" }))))) { runtime.popCall(); -return ({ type: "list", values: [({ type: "string", value: "int" }), _line202, (runtime.setLine(557), ((...args) => runtime.builtinStringToInt(...args))(_value203))] }); +return ({ type: "list", values: [({ type: "string", value: "int" }), _line238, (runtime.info("compile.phi", 651), ((...args) => runtime.builtinStringToInt(...args))(_value239))] }); } else { -if (runtime.truthy((runtime.setLine(558), _eat194(({ type: "string", value: "ident" }))))) { +if (runtime.truthy((runtime.info("compile.phi", 652), _eat230(({ type: "string", value: "ident" }))))) { runtime.popCall(); -return ({ type: "list", values: [({ type: "string", value: "ident" }), _line202, _value203] }); +return ({ type: "list", values: [({ type: "string", value: "ident" }), _line238, _value239] }); } else { -(runtime.setLine(561), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected expression, got '%' on line %" }), _ty201, _line202)); +(runtime.info("compile.phi", 655), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected expression, got '%' on line %" }), _ty237, _line238)); }}}}; ; runtime.popCall(); return { type: "null" }; }; -function _eat194(_pat205) { -runtime.pushCall("eat"); -if (runtime.truthy(runtime.opNot((runtime.setLine(566), _test196(_pat205))))) { +function _eat230(_pat241) { +runtime.pushCall("eat", "compile.phi"); +if (runtime.truthy(runtime.opNot((runtime.info("compile.phi", 660), _test232(_pat241))))) { runtime.popCall(); return ({ type: "bool", value: false })}; -(runtime.setLine(567), _step195()); +(runtime.info("compile.phi", 661), _step231()); runtime.popCall(); return ({ type: "bool", value: true }); ; runtime.popCall(); return { type: "null" }; }; -function _step195() { -runtime.pushCall("step"); -(_i198 = runtime.opAdd(_i198, ({ type: "int", value: 1 }))); -if (runtime.truthy(runtime.opNot((runtime.setLine(573), _done197())))) { -const r_220 = (runtime.setLine(574), ((...args) => runtime.builtinAt(...args))(_tokens191, _i198)); -let _new_tok206 = r_220; -(_tok199 = _new_tok206); +function _step231() { +runtime.pushCall("step", "compile.phi"); +(_i234 = runtime.opAdd(_i234, ({ type: "int", value: 1 }))); +if (runtime.truthy(runtime.opNot((runtime.info("compile.phi", 667), _done233())))) { +const r_287 = (runtime.info("compile.phi", 668), ((...args) => runtime.builtinAt(...args))(_tokens227, _i234)); +let _new_tok242 = r_287; +(_tok235 = _new_tok242); }; ; runtime.popCall(); return { type: "null" }; }; -function _test196(_pat207) { -runtime.pushCall("test"); -if (runtime.truthy((runtime.setLine(580), _done197()))) { +function _test232(_pat243) { +runtime.pushCall("test", "compile.phi"); +if (runtime.truthy((runtime.info("compile.phi", 674), _done233()))) { runtime.popCall(); return ({ type: "bool", value: false })}; -const r_221 = _tok199; -const r_222 = r_221.values[0] ?? { type: "null"}; -let _ty208 = r_222; +const r_288 = _tok235; +const r_289 = r_288.values[0] ?? { type: "null"}; +let _ty244 = r_289; runtime.popCall(); -return runtime.opEq(_pat207, _ty208); +return (runtime.info("compile.phi", 676), runtime.opEq(_pat243, _ty244)); ; runtime.popCall(); return { type: "null" }; }; -function _done197() { -runtime.pushCall("done"); +function _done233() { +runtime.pushCall("done", "compile.phi"); runtime.popCall(); -return runtime.opGte(_i198, (runtime.setLine(586), ((...args) => runtime.builtinLen(...args))(_tokens191))); +return (runtime.info("compile.phi", 680), runtime.opGte(_i234, (runtime.info("compile.phi", 680), ((...args) => runtime.builtinLen(...args))(_tokens227)))); ; runtime.popCall(); return { type: "null" }; }; runtime.popCall(); -return ({ type: "list", values: [_parse192] }); +return ({ type: "list", values: [_parse228] }); ; runtime.popCall(); return { type: "null" }; }; -function _tokenize19(_text209) { -runtime.pushCall("tokenize"); -const r_223 = (runtime.setLine(593), ((...args) => runtime.builtinLen(...args))(_text209)); -let _text_len210 = r_223; -const r_224 = ({ type: "list", values: [] }); -let _tokens211 = r_224; -const r_225 = ({ type: "int", value: 0 }); -let _i212 = r_225; -const r_226 = ({ type: "int", value: 1 }); -let _line213 = r_226; -const r_227 = runtime.opAdd(({ type: "string", value: "abcdefghijklmnopqrstuvwxyz" }), ({ type: "string", value: "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890+-*/%&|=?!<>'_" })); -let _ident_chars214 = r_227; +function _tokenize19(_text245) { +runtime.pushCall("tokenize", "compile.phi"); +const r_290 = (runtime.info("compile.phi", 687), ((...args) => runtime.builtinLen(...args))(_text245)); +let _text_len246 = r_290; +const r_291 = ({ type: "list", values: [] }); +let _tokens247 = r_291; +const r_292 = ({ type: "int", value: 0 }); +let _i248 = r_292; +const r_293 = ({ type: "int", value: 1 }); +let _line249 = r_293; +const r_294 = (runtime.info("compile.phi", 693), runtime.opAdd(({ type: "string", value: "abcdefghijklmnopqrstuvwxyz" }), ({ type: "string", value: "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890+-*/%&|=?!<>'_" }))); +let _ident_chars250 = r_294; while (true) { -if (runtime.truthy(runtime.opGte(_i212, _text_len210))) { +if (runtime.truthy((runtime.info("compile.phi", 697), runtime.opGte(_i248, _text_len246)))) { break}; -const r_228 = (runtime.setLine(605), ((...args) => runtime.builtinAt(...args))(_text209, _i212)); -let _ch215 = r_228; -if (runtime.truthy((runtime.setLine(607), _contains20(({ type: "string", value: " \t\r\n" }), _ch215)))) { -if (runtime.truthy(runtime.opEq(_ch215, ({ type: "string", value: "\n" })))) { -(_line213 = runtime.opAdd(_line213, ({ type: "int", value: 1 }))); +const r_295 = (runtime.info("compile.phi", 699), ((...args) => runtime.builtinAt(...args))(_text245, _i248)); +let _ch251 = r_295; +if (runtime.truthy((runtime.info("compile.phi", 701), _contains20(({ type: "string", value: " \t\r\n" }), _ch251)))) { +if (runtime.truthy((runtime.info("compile.phi", 702), runtime.opEq(_ch251, ({ type: "string", value: "\n" }))))) { +(_line249 = runtime.opAdd(_line249, ({ type: "int", value: 1 }))); }; -(_i212 = runtime.opAdd(_i212, ({ type: "int", value: 1 }))); +(_i248 = runtime.opAdd(_i248, ({ type: "int", value: 1 }))); } else { -if (runtime.truthy((runtime.setLine(612), _slice_eq21(_text209, _i212, ({ type: "string", value: "//" }))))) { +if (runtime.truthy((runtime.info("compile.phi", 706), _slice_eq21(_text245, _i248, ({ type: "string", value: "//" }))))) { while (true) { -if (runtime.truthy((runtime.setLine(614), { type: "bool", value: runtime.truthy(runtime.opGte(_i212, _text_len210)) || runtime.truthy(runtime.opEq((runtime.setLine(614), ((...args) => runtime.builtinAt(...args))(_text209, _i212)), ({ type: "string", value: "\n" }))) }))) { +if (runtime.truthy((runtime.info("compile.phi", 708), { type: "bool", value: runtime.truthy((runtime.info("compile.phi", 708), runtime.opGte(_i248, _text_len246))) || runtime.truthy((runtime.info("compile.phi", 708), runtime.opEq((runtime.info("compile.phi", 708), ((...args) => runtime.builtinAt(...args))(_text245, _i248)), ({ type: "string", value: "\n" })))) }))) { break; }; -(_i212 = runtime.opAdd(_i212, ({ type: "int", value: 1 }))); +(_i248 = runtime.opAdd(_i248, ({ type: "int", value: 1 }))); }; } else { -if (runtime.truthy((runtime.setLine(619), _contains20(({ type: "string", value: "()" }), _ch215)))) { -(runtime.setLine(620), ((...args) => runtime.builtinPush(...args))(_tokens211, ({ type: "list", values: [_ch215, _line213] }))); -(_i212 = runtime.opAdd(_i212, ({ type: "int", value: 1 }))); +if (runtime.truthy((runtime.info("compile.phi", 713), _contains20(({ type: "string", value: "()" }), _ch251)))) { +(runtime.info("compile.phi", 714), ((...args) => runtime.builtinPush(...args))(_tokens247, ({ type: "list", values: [_ch251, _line249] }))); +(_i248 = runtime.opAdd(_i248, ({ type: "int", value: 1 }))); } else { -if (runtime.truthy(runtime.opEq(_ch215, ({ type: "string", value: "\"" })))) { -const r_229 = ({ type: "string", value: "" }); -let _value216 = r_229; -(_i212 = runtime.opAdd(_i212, ({ type: "int", value: 1 }))); -(_ch215 = (runtime.setLine(625), ((...args) => runtime.builtinAt(...args))(_text209, _i212))); +if (runtime.truthy((runtime.info("compile.phi", 716), runtime.opEq(_ch251, ({ type: "string", value: "\"" }))))) { +const r_296 = ({ type: "string", value: "" }); +let _value252 = r_296; +(_i248 = runtime.opAdd(_i248, ({ type: "int", value: 1 }))); +(_ch251 = (runtime.info("compile.phi", 719), ((...args) => runtime.builtinAt(...args))(_text245, _i248))); while (true) { -if (runtime.truthy((runtime.setLine(627), { type: "bool", value: runtime.truthy(runtime.opGte(_i212, _text_len210)) || runtime.truthy(runtime.opEq(_ch215, ({ type: "string", value: "\"" }))) }))) { +if (runtime.truthy((runtime.info("compile.phi", 721), { type: "bool", value: runtime.truthy((runtime.info("compile.phi", 721), runtime.opGte(_i248, _text_len246))) || runtime.truthy((runtime.info("compile.phi", 721), runtime.opEq(_ch251, ({ type: "string", value: "\"" })))) }))) { break; }; -if (runtime.truthy(runtime.opEq(_ch215, ({ type: "string", value: "\\" })))) { -(_i212 = runtime.opAdd(_i212, ({ type: "int", value: 1 }))); -if (runtime.truthy(runtime.opGte(_i212, _text_len210))) { +if (runtime.truthy((runtime.info("compile.phi", 724), runtime.opEq(_ch251, ({ type: "string", value: "\\" }))))) { +(_i248 = runtime.opAdd(_i248, ({ type: "int", value: 1 }))); +if (runtime.truthy((runtime.info("compile.phi", 726), runtime.opGte(_i248, _text_len246)))) { break; }; -(_ch215 = (runtime.setLine(635), ((...args) => runtime.builtinAt(...args))(_text209, _i212))); -if (runtime.truthy(runtime.opEq(_ch215, ({ type: "string", value: "t" })))) { -(_value216 = runtime.opAdd(_value216, ({ type: "string", value: "\t" }))); +(_ch251 = (runtime.info("compile.phi", 729), ((...args) => runtime.builtinAt(...args))(_text245, _i248))); +if (runtime.truthy((runtime.info("compile.phi", 730), runtime.opEq(_ch251, ({ type: "string", value: "t" }))))) { +(_value252 = runtime.opAdd(_value252, ({ type: "string", value: "\t" }))); } else { -if (runtime.truthy(runtime.opEq(_ch215, ({ type: "string", value: "r" })))) { -(_value216 = runtime.opAdd(_value216, ({ type: "string", value: "\r" }))); +if (runtime.truthy((runtime.info("compile.phi", 732), runtime.opEq(_ch251, ({ type: "string", value: "r" }))))) { +(_value252 = runtime.opAdd(_value252, ({ type: "string", value: "\r" }))); } else { -if (runtime.truthy(runtime.opEq(_ch215, ({ type: "string", value: "n" })))) { -(_value216 = runtime.opAdd(_value216, ({ type: "string", value: "\n" }))); +if (runtime.truthy((runtime.info("compile.phi", 734), runtime.opEq(_ch251, ({ type: "string", value: "n" }))))) { +(_value252 = runtime.opAdd(_value252, ({ type: "string", value: "\n" }))); } else { -if (runtime.truthy(runtime.opEq(_ch215, ({ type: "string", value: "0" })))) { -(_value216 = runtime.opAdd(_value216, ({ type: "string", value: "\n" }))); +if (runtime.truthy((runtime.info("compile.phi", 736), runtime.opEq(_ch251, ({ type: "string", value: "0" }))))) { +(_value252 = runtime.opAdd(_value252, ({ type: "string", value: "\n" }))); } else { -(_value216 = runtime.opAdd(_value216, _ch215)); +(_value252 = runtime.opAdd(_value252, _ch251)); }}}}; } else { -(_value216 = runtime.opAdd(_value216, _ch215)); +(_value252 = runtime.opAdd(_value252, _ch251)); }; -(_i212 = runtime.opAdd(_i212, ({ type: "int", value: 1 }))); -(_ch215 = (runtime.setLine(651), ((...args) => runtime.builtinAt(...args))(_text209, _i212))); +(_i248 = runtime.opAdd(_i248, ({ type: "int", value: 1 }))); +(_ch251 = (runtime.info("compile.phi", 745), ((...args) => runtime.builtinAt(...args))(_text245, _i248))); }; -if (runtime.truthy((runtime.setLine(653), { type: "bool", value: runtime.truthy(runtime.opGte(_i212, _text_len210)) || runtime.truthy(runtime.opNe(_ch215, ({ type: "string", value: "\"" }))) }))) { -(runtime.setLine(654), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected '\"' on line %" }), _line213)); +if (runtime.truthy((runtime.info("compile.phi", 747), { type: "bool", value: runtime.truthy((runtime.info("compile.phi", 747), runtime.opGte(_i248, _text_len246))) || runtime.truthy((runtime.info("compile.phi", 747), runtime.opNe(_ch251, ({ type: "string", value: "\"" })))) }))) { +(runtime.info("compile.phi", 748), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected '\"' on line %" }), _line249)); }; -(_i212 = runtime.opAdd(_i212, ({ type: "int", value: 1 }))); -(runtime.setLine(657), ((...args) => runtime.builtinPush(...args))(_tokens211, ({ type: "list", values: [({ type: "string", value: "string" }), _line213, _value216] }))); +(_i248 = runtime.opAdd(_i248, ({ type: "int", value: 1 }))); +(runtime.info("compile.phi", 751), ((...args) => runtime.builtinPush(...args))(_tokens247, ({ type: "list", values: [({ type: "string", value: "string" }), _line249, _value252] }))); } else { -if (runtime.truthy((runtime.setLine(658), _contains20(({ type: "string", value: "0123456789" }), _ch215)))) { -const r_230 = ({ type: "string", value: "" }); -let _value217 = r_230; +if (runtime.truthy((runtime.info("compile.phi", 752), _contains20(({ type: "string", value: "0123456789" }), _ch251)))) { +const r_297 = ({ type: "string", value: "" }); +let _value253 = r_297; while (true) { -(_ch215 = (runtime.setLine(661), ((...args) => runtime.builtinAt(...args))(_text209, _i212))); -if (runtime.truthy((runtime.setLine(662), { type: "bool", value: runtime.truthy(runtime.opGte(_i212, _text_len210)) || runtime.truthy(runtime.opNot((runtime.setLine(662), _contains20(({ type: "string", value: "0123456789" }), _ch215)))) }))) { +(_ch251 = (runtime.info("compile.phi", 755), ((...args) => runtime.builtinAt(...args))(_text245, _i248))); +if (runtime.truthy((runtime.info("compile.phi", 756), { type: "bool", value: runtime.truthy((runtime.info("compile.phi", 756), runtime.opGte(_i248, _text_len246))) || runtime.truthy(runtime.opNot((runtime.info("compile.phi", 756), _contains20(({ type: "string", value: "0123456789" }), _ch251)))) }))) { break; }; -(_value217 = runtime.opAdd(_value217, _ch215)); -(_i212 = runtime.opAdd(_i212, ({ type: "int", value: 1 }))); +(_value253 = runtime.opAdd(_value253, _ch251)); +(_i248 = runtime.opAdd(_i248, ({ type: "int", value: 1 }))); }; -(runtime.setLine(668), ((...args) => runtime.builtinPush(...args))(_tokens211, ({ type: "list", values: [({ type: "string", value: "int" }), _line213, _value217] }))); +(runtime.info("compile.phi", 762), ((...args) => runtime.builtinPush(...args))(_tokens247, ({ type: "list", values: [({ type: "string", value: "int" }), _line249, _value253] }))); } else { -if (runtime.truthy((runtime.setLine(669), _contains20(_ident_chars214, _ch215)))) { -const r_231 = ({ type: "string", value: "" }); -let _value218 = r_231; +if (runtime.truthy((runtime.info("compile.phi", 763), _contains20(_ident_chars250, _ch251)))) { +const r_298 = ({ type: "string", value: "" }); +let _value254 = r_298; while (true) { -(_ch215 = (runtime.setLine(672), ((...args) => runtime.builtinAt(...args))(_text209, _i212))); -if (runtime.truthy((runtime.setLine(673), { type: "bool", value: runtime.truthy(runtime.opGte(_i212, _text_len210)) || runtime.truthy(runtime.opNot((runtime.setLine(673), _contains20(_ident_chars214, _ch215)))) }))) { +(_ch251 = (runtime.info("compile.phi", 766), ((...args) => runtime.builtinAt(...args))(_text245, _i248))); +if (runtime.truthy((runtime.info("compile.phi", 767), { type: "bool", value: runtime.truthy((runtime.info("compile.phi", 767), runtime.opGte(_i248, _text_len246))) || runtime.truthy(runtime.opNot((runtime.info("compile.phi", 767), _contains20(_ident_chars250, _ch251)))) }))) { break; }; -(_value218 = runtime.opAdd(_value218, _ch215)); -(_i212 = runtime.opAdd(_i212, ({ type: "int", value: 1 }))); +(_value254 = runtime.opAdd(_value254, _ch251)); +(_i248 = runtime.opAdd(_i248, ({ type: "int", value: 1 }))); }; -(runtime.setLine(679), ((...args) => runtime.builtinPush(...args))(_tokens211, ({ type: "list", values: [({ type: "string", value: "ident" }), _line213, _value218] }))); +(runtime.info("compile.phi", 773), ((...args) => runtime.builtinPush(...args))(_tokens247, ({ type: "list", values: [({ type: "string", value: "ident" }), _line249, _value254] }))); } else { -(runtime.setLine(681), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "illegal char '%'" }), _ch215)); -(_i212 = runtime.opAdd(_i212, ({ type: "int", value: 1 }))); +(runtime.info("compile.phi", 775), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "illegal char '%'" }), _ch251)); +(_i248 = runtime.opAdd(_i248, ({ type: "int", value: 1 }))); }}}}}}; }; runtime.popCall(); -return _tokens211; +return _tokens247; ; runtime.popCall(); return { type: "null" }; }; -function _contains20(_text219, _ch220) { -runtime.pushCall("contains"); -const r_232 = (runtime.setLine(689), ((...args) => runtime.builtinLen(...args))(_text219)); -let _text_len221 = r_232; -const r_233 = ({ type: "int", value: 0 }); -let _i222 = r_233; +function _contains20(_text255, _ch256) { +runtime.pushCall("contains", "compile.phi"); +const r_299 = (runtime.info("compile.phi", 783), ((...args) => runtime.builtinLen(...args))(_text255)); +let _text_len257 = r_299; +const r_300 = ({ type: "int", value: 0 }); +let _i258 = r_300; while (true) { -if (runtime.truthy(runtime.opGte(_i222, _text_len221))) { +if (runtime.truthy((runtime.info("compile.phi", 786), runtime.opGte(_i258, _text_len257)))) { break}; -if (runtime.truthy(runtime.opEq((runtime.setLine(693), ((...args) => runtime.builtinAt(...args))(_text219, _i222)), _ch220))) { +if (runtime.truthy((runtime.info("compile.phi", 787), runtime.opEq((runtime.info("compile.phi", 787), ((...args) => runtime.builtinAt(...args))(_text255, _i258)), _ch256)))) { runtime.popCall(); return ({ type: "bool", value: true }); }; -(_i222 = runtime.opAdd(_i222, ({ type: "int", value: 1 }))); +(_i258 = runtime.opAdd(_i258, ({ type: "int", value: 1 }))); }; runtime.popCall(); return ({ type: "bool", value: false }); @@ -1104,25 +1288,25 @@ return ({ type: "bool", value: false }); runtime.popCall(); return { type: "null" }; }; -function _slice_eq21(_str223, _slice_idx224, _substr225) { -runtime.pushCall("slice_eq"); -const r_234 = (runtime.setLine(702), ((...args) => runtime.builtinLen(...args))(_str223)); -let _str_len226 = r_234; -const r_235 = (runtime.setLine(703), ((...args) => runtime.builtinLen(...args))(_substr225)); -let _substr_len227 = r_235; -const r_236 = ({ type: "int", value: 0 }); -let _i228 = r_236; +function _slice_eq21(_str259, _slice_idx260, _substr261) { +runtime.pushCall("slice_eq", "compile.phi"); +const r_301 = (runtime.info("compile.phi", 796), ((...args) => runtime.builtinLen(...args))(_str259)); +let _str_len262 = r_301; +const r_302 = (runtime.info("compile.phi", 797), ((...args) => runtime.builtinLen(...args))(_substr261)); +let _substr_len263 = r_302; +const r_303 = ({ type: "int", value: 0 }); +let _i264 = r_303; while (true) { -if (runtime.truthy(runtime.opGte(_i228, _substr_len227))) { +if (runtime.truthy((runtime.info("compile.phi", 800), runtime.opGte(_i264, _substr_len263)))) { runtime.popCall(); return ({ type: "bool", value: true })}; -if (runtime.truthy(runtime.opGte(runtime.opAdd(_slice_idx224, _i228), _str_len226))) { +if (runtime.truthy((runtime.info("compile.phi", 802), runtime.opGte((runtime.info("compile.phi", 802), runtime.opAdd(_slice_idx260, _i264)), _str_len262)))) { runtime.popCall(); return ({ type: "bool", value: false })}; -if (runtime.truthy(runtime.opNe((runtime.setLine(710), ((...args) => runtime.builtinAt(...args))(_str223, runtime.opAdd(_slice_idx224, _i228))), (runtime.setLine(710), ((...args) => runtime.builtinAt(...args))(_substr225, _i228))))) { +if (runtime.truthy((runtime.info("compile.phi", 804), runtime.opNe((runtime.info("compile.phi", 804), ((...args) => runtime.builtinAt(...args))(_str259, (runtime.info("compile.phi", 804), runtime.opAdd(_slice_idx260, _i264)))), (runtime.info("compile.phi", 804), ((...args) => runtime.builtinAt(...args))(_substr261, _i264)))))) { runtime.popCall(); return ({ type: "bool", value: false })}; -(_i228 = runtime.opAdd(_i228, ({ type: "int", value: 1 }))); +(_i264 = runtime.opAdd(_i264, ({ type: "int", value: 1 }))); }; runtime.popCall(); return ({ type: "bool", value: true }); @@ -1130,100 +1314,90 @@ return ({ type: "bool", value: true }); runtime.popCall(); return { type: "null" }; }; -function _print_expr22(_expr229, _depth230) { -runtime.pushCall("print_expr"); -const r_237 = _expr229; -const r_238 = r_237.values[0] ?? { type: "null"}; -let _ty231 = r_238; -const r_239 = r_237.values[1] ?? { type: "null"}; -let _line232 = r_239; -const r_240 = r_237.values[2] ?? { type: "null"}; -let _value233 = r_240; -if (runtime.truthy(runtime.opEq(_ty231, ({ type: "string", value: "list" })))) { -(runtime.setLine(720), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%(% %" }), (runtime.setLine(720), _indent23(_depth230)), _ty231, _line232)); -for (const r_241 of _value233.values) {; -let _e234 = r_241; -(runtime.setLine(722), _print_expr22(_e234, runtime.opAdd(_depth230, ({ type: "int", value: 1 })))); +function _print_expr22(_expr265, _depth266) { +runtime.pushCall("print_expr", "compile.phi"); +const r_304 = _expr265; +const r_305 = r_304.values[0] ?? { type: "null"}; +let _ty267 = r_305; +const r_306 = r_304.values[1] ?? { type: "null"}; +let _line268 = r_306; +const r_307 = r_304.values[2] ?? { type: "null"}; +let _value269 = r_307; +if (runtime.truthy((runtime.info("compile.phi", 813), runtime.opEq(_ty267, ({ type: "string", value: "list" }))))) { +(runtime.info("compile.phi", 814), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%(% %" }), (runtime.info("compile.phi", 814), _indent23(_depth266)), _ty267, _line268)); +for (const r_308 of _value269.values) {; +let _e270 = r_308; +(runtime.info("compile.phi", 816), _print_expr22(_e270, (runtime.info("compile.phi", 816), runtime.opAdd(_depth266, ({ type: "int", value: 1 }))))); }; -(runtime.setLine(724), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%)" }), (runtime.setLine(724), _indent23(_depth230)))); +(runtime.info("compile.phi", 818), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%)" }), (runtime.info("compile.phi", 818), _indent23(_depth266)))); } else { -(runtime.setLine(726), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%%" }), (runtime.setLine(726), _indent23(_depth230)), _expr229)); +(runtime.info("compile.phi", 820), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%%" }), (runtime.info("compile.phi", 820), _indent23(_depth266)), _expr265)); }; ; runtime.popCall(); return { type: "null" }; }; -function _indent23(_depth235) { -runtime.pushCall("indent"); -const r_242 = ({ type: "string", value: "" }); -let _space236 = r_242; -const r_243 = ({ type: "int", value: 0 }); -let _i237 = r_243; +function _indent23(_depth271) { +runtime.pushCall("indent", "compile.phi"); +const r_309 = ({ type: "string", value: "" }); +let _space272 = r_309; +const r_310 = ({ type: "int", value: 0 }); +let _i273 = r_310; while (true) { -if (runtime.truthy(runtime.opGte(_i237, _depth235))) { +if (runtime.truthy((runtime.info("compile.phi", 828), runtime.opGte(_i273, _depth271)))) { break}; -(_space236 = runtime.opAdd(_space236, ({ type: "string", value: " " }))); -(_i237 = runtime.opAdd(_i237, ({ type: "int", value: 1 }))); +(_space272 = runtime.opAdd(_space272, ({ type: "string", value: " " }))); +(_i273 = runtime.opAdd(_i273, ({ type: "int", value: 1 }))); }; runtime.popCall(); -return _space236; +return _space272; ; runtime.popCall(); return { type: "null" }; }; -function _slice24(_list238, _idx239) { -runtime.pushCall("slice"); -const r_244 = (runtime.setLine(742), ((...args) => runtime.builtinLen(...args))(_list238)); -let _list_len240 = r_244; -const r_245 = ({ type: "list", values: [] }); -let _elems241 = r_245; -const r_246 = _idx239; -let _i242 = r_246; +function _slice24(_list274, _idx275) { +runtime.pushCall("slice", "compile.phi"); +const r_311 = (runtime.info("compile.phi", 836), ((...args) => runtime.builtinLen(...args))(_list274)); +let _list_len276 = r_311; +const r_312 = ({ type: "list", values: [] }); +let _elems277 = r_312; +const r_313 = _idx275; +let _i278 = r_313; while (true) { -if (runtime.truthy(runtime.opGte(_i242, _list_len240))) { +if (runtime.truthy((runtime.info("compile.phi", 840), runtime.opGte(_i278, _list_len276)))) { break}; -(runtime.setLine(747), ((...args) => runtime.builtinPush(...args))(_elems241, (runtime.setLine(747), ((...args) => runtime.builtinAt(...args))(_list238, _i242)))); -(_i242 = runtime.opAdd(_i242, ({ type: "int", value: 1 }))); +(runtime.info("compile.phi", 841), ((...args) => runtime.builtinPush(...args))(_elems277, (runtime.info("compile.phi", 841), ((...args) => runtime.builtinAt(...args))(_list274, _i278)))); +(_i278 = runtime.opAdd(_i278, ({ type: "int", value: 1 }))); }; runtime.popCall(); -return _elems241; +return _elems277; ; runtime.popCall(); return { type: "null" }; }; -const r_247 = ({ type: "bool", value: false }); -let _silent243 = r_247; -const r_248 = (runtime.setLine(755), ((...args) => runtime.builtinGetArgs(...args))()); -const r_249 = r_248.values[0] ?? { type: "null"}; -let _input_filename244 = r_249; -const r_250 = r_248.values[1] ?? { type: "null"}; -let _output_filename245 = r_250; -if (runtime.truthy(runtime.opNot(_silent243))) { -(runtime.setLine(757), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "reading file '%'..." }), _input_filename244))}; -const r_251 = (runtime.setLine(758), ((...args) => runtime.builtinReadTextFile(...args))(_input_filename244)); -let _text246 = r_251; -if (runtime.truthy(runtime.opNot(_silent243))) { -(runtime.setLine(764), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "tokenizing..." })))}; -const r_252 = (runtime.setLine(765), _tokenize19(_text246)); -let _tokens247 = r_252; -if (runtime.truthy(runtime.opNot(_silent243))) { -(runtime.setLine(778), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "parsing..." })))}; -const r_253 = (runtime.setLine(779), _Parser18(_tokens247)); -let _parser248 = r_253; -const r_254 = _parser248; -const r_255 = r_254.values[0] ?? { type: "null"}; -let _parse249 = r_255; -const r_256 = (runtime.setLine(781), _parse249()); -let _ast250 = r_256; -if (runtime.truthy(runtime.opNot(_silent243))) { -(runtime.setLine(788), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "emitting..." })))}; -const r_257 = (runtime.setLine(789), _Emitter14(_ast250, _input_filename244)); -let _emitter251 = r_257; -const r_258 = _emitter251; -const r_259 = r_258.values[0] ?? { type: "null"}; -let _emit252 = r_259; -const r_260 = (runtime.setLine(791), _emit252()); -let _js_code253 = r_260; -if (runtime.truthy(runtime.opNot(_silent243))) { -(runtime.setLine(796), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "writing file '%'..." }), _output_filename245))}; -(runtime.setLine(797), ((...args) => runtime.builtinWriteTextFile(...args))(_output_filename245, _js_code253)); +const r_314 = (runtime.info("compile.phi", 847), ((...args) => runtime.builtinGetArgs(...args))()); +const r_315 = r_314.values[0] ?? { type: "null"}; +let _input_filename279 = r_315; +const r_316 = r_314.values[1] ?? { type: "null"}; +let _output_filename280 = r_316; +(runtime.info("compile.phi", 849), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "compiling '%'..." }), _input_filename279)); +const r_317 = (runtime.info("compile.phi", 850), ((...args) => runtime.builtinReadTextFile(...args))(_input_filename279)); +let _text281 = r_317; +const r_318 = (runtime.info("compile.phi", 852), _tokenize19(_text281)); +let _tokens282 = r_318; +const r_319 = (runtime.info("compile.phi", 853), _Parser18(_tokens282)); +let _parser283 = r_319; +const r_320 = _parser283; +const r_321 = r_320.values[0] ?? { type: "null"}; +let _parse284 = r_321; +const r_322 = (runtime.info("compile.phi", 855), _parse284()); +let _ast285 = r_322; +const r_323 = (runtime.info("compile.phi", 856), _Emitter14(_ast285, _input_filename279)); +let _emitter286 = r_323; +const r_324 = _emitter286; +const r_325 = r_324.values[0] ?? { type: "null"}; +let _emit287 = r_325; +const r_326 = (runtime.info("compile.phi", 858), _emit287()); +let _js_code288 = r_326; +(runtime.info("compile.phi", 863), ((...args) => runtime.builtinWriteTextFile(...args))(_output_filename280, _js_code288)); +(runtime.info("compile.phi", 864), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "written '%'!" }), _output_filename280));