Compare commits

...

2 Commits

Author SHA1 Message Date
53f4dc5b13 replace deprecated list syntax 2025-09-23 16:50:31 +02:00
2f40773af6 deprecate implicit list 2025-09-23 16:42:18 +02:00
2 changed files with 255 additions and 251 deletions

View File

@ -1,27 +1,27 @@
(fn Emitter (ast filename) (do
(let output ())
(let output (list))
(let (enter_scope leave_scope define_sym get_sym print_syms) (call Syms))
(let (let_node_reg_count let_node_reg_increment) (call Counter))
(let (sym_id_count sym_id_increment) (call Counter))
(let builtin_syms (
("format" "builtinFormat")
("print" "builtinPrint")
("println" "builtinPrintln")
("panic" "builtinPanic")
("read_text_file" "builtinReadTextFile")
("write_text_file" "builtinWriteTextFile")
("push" "builtinPush")
("at" "builtinAt")
("set" "builtinSet")
("len" "builtinLen")
("string_to_int" "builtinStringToInt")
("char_code" "builtinCharCode")
("strings_join" "builtinStringsJoin")
("get_args" "builtinGetArgs")
(let builtin_syms (list
(list "format" "builtinFormat")
(list "print" "builtinPrint")
(list "println" "builtinPrintln")
(list "panic" "builtinPanic")
(list "read_text_file" "builtinReadTextFile")
(list "write_text_file" "builtinWriteTextFile")
(list "push" "builtinPush")
(list "at" "builtinAt")
(list "set" "builtinSet")
(list "len" "builtinLen")
(list "string_to_int" "builtinStringToInt")
(list "char_code" "builtinCharCode")
(list "strings_join" "builtinStringsJoin")
(list "get_args" "builtinGetArgs")
))
(fn generate () (do
@ -112,11 +112,13 @@
(let (ty line s) expr)
(if (== (call len s) 0) (do
(call emit "({ type: \"list\", values: [] })")
(call println "warning: deprecated list syntax on line %" line)
(return)
))
(let ((id_ty _ id)) s)
(if (!= id_ty "ident") (do
(call emit_list_literal s)
(call println "warning: deprecated list syntax on line %" line)
(return)
))
(if (== id "fn") (do
@ -276,6 +278,7 @@
(call emit ")")
) (do
(call emit_list_literal s)
(call println "warning: deprecated list syntax on line %" line)
)))))))))))))))))))))))))
))
@ -386,7 +389,7 @@
(let sym_id (call sym_id_count))
(call sym_id_increment)
(call define_sym ident (sym_id "builtin" builtin_id))
(call define_sym ident (list sym_id "builtin" builtin_id))
(return sym_id)
))
@ -394,7 +397,7 @@
(let sym_id (call sym_id_count))
(call sym_id_increment)
(call define_sym ident (sym_id "fn" ident line))
(call define_sym ident (list sym_id "fn" ident line))
(return sym_id)
))
@ -402,7 +405,7 @@
(let sym_id (call sym_id_count))
(call sym_id_increment)
(call define_sym ident (sym_id "param" ident line))
(call define_sym ident (list sym_id "param" ident line))
(return sym_id)
))
@ -410,11 +413,11 @@
(let sym_id (call sym_id_count))
(call sym_id_increment)
(call define_sym ident (sym_id "let" ident line))
(call define_sym ident (list sym_id "let" ident line))
(return sym_id)
))
(return (generate))
(return (list generate))
))
(fn Counter () (do
@ -428,14 +431,14 @@
(+= counter 1)
))
(return (count increment))
(return (list count increment))
))
(fn Syms () (do
(let syms (null ()))
(let syms (list null (list)))
(fn enter_scope () (do
(= syms (syms ()))
(= syms (list syms (list)))
))
(fn leave_scope () (do
@ -450,12 +453,12 @@
(if (>= i (call len map)) (break))
(let (s_ident _) (call at map i))
(if (== ident s_ident) (do
(call set map i (ident sym))
(call set map i (list ident sym))
(return)
))
(+= i 1)
))
(call push map (ident sym))
(call push map (list ident sym))
))
(fn find_sym (syms ident) (do
@ -493,7 +496,7 @@
(call print_syms_node syms 0)
))
(return (
(return (list
enter_scope
leave_scope
define
@ -535,7 +538,7 @@
(let tok (call at tokens i))
(fn parse () (do
(let exprs ())
(let exprs (list))
(loop (do
(if (call done) (break))
(call push exprs (call parse_expr))
@ -546,7 +549,7 @@
(fn parse_expr () (do
(let (ty line value) tok)
(if (call eat "(") (do
(let values ())
(let values (list))
(loop (do
(if (call test ")") (break))
(call push values (call parse_expr))
@ -554,13 +557,13 @@
(if (not (call eat ")")) (do
(call panic "expected ')' on line %" (call at tok 1))
))
(return ("list" line values))
(return (list "list" line values))
) (if (call eat "string") (do
(return ("string" line value))
(return (list "string" line value))
) (if (call eat "int") (do
(return ("int" line (call string_to_int value)))
(return (list "int" line (call string_to_int value)))
) (if (call eat "ident") (do
(return ("ident" line value))
(return (list "ident" line value))
) (do
(call panic "expected expression, got '%' on line %" ty line)
)))))
@ -590,13 +593,13 @@
(return (>= i (call len tokens)))
))
(return (parse))
(return (list parse))
))
(fn tokenize (text) (do
(let text_len (call len text))
(let tokens ())
(let tokens (list))
(let i 0)
(let line 1)
@ -621,7 +624,7 @@
(+= i 1)
))
) (if (call contains "()" ch) (do
(call push tokens (ch line))
(call push tokens (list ch line))
(+= i 1)
) (if (== ch "\"") (do
(let value "")
@ -658,7 +661,7 @@
(call panic "expected '\"' on line %" line)
))
(+= i 1)
(call push tokens ("string" line value))
(call push tokens (list "string" line value))
) (if (call contains "0123456789" ch) (do
(let value "")
(loop (do
@ -669,7 +672,7 @@
(+= value ch)
(+= i 1)
))
(call push tokens ("int" line value))
(call push tokens (list "int" line value))
) (if (call contains ident_chars ch) (do
(let value "")
(loop (do
@ -680,7 +683,7 @@
(+= value ch)
(+= i 1)
))
(call push tokens ("ident" line value))
(call push tokens (list "ident" line value))
) (do
(call println "illegal char '%'" ch)
(+= i 1)
@ -744,7 +747,7 @@
(fn slice (list idx) (do
(let list_len (call len list))
(let elems ())
(let elems (list))
(let i idx)
(loop (do
(if (>= i list_len) (break))
@ -794,8 +797,8 @@
(let (emit) emitter)
(let js_code (call emit))
(call println "=== js ===")
(call println js_code)
// (call println "=== js ===")
// (call println js_code)
(if (not silent) (call println "writing file '%'..." output_filename))
(call write_text_file output_filename js_code)

419
stage2.js
View File

@ -203,6 +203,7 @@ const r_68 = r_65.values[2] ?? { type: "null"};
let _s78 = r_68;
if (runtime.truthy(runtime.opEq((runtime.setLine(113), ((...args) => runtime.builtinLen(...args))(_s78)), ({ type: "int", value: 0 })))) {
(runtime.setLine(114), _emit36(({ type: "string", value: "({ type: \"list\", values: [] })" })));
(runtime.setLine(115), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "warning: deprecated list syntax on line %" }), _line77));
runtime.popCall();
return { type: "null" };
};
@ -214,7 +215,8 @@ 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(119), _emit_list_literal32(_s78));
(runtime.setLine(120), _emit_list_literal32(_s78));
(runtime.setLine(121), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "warning: deprecated list syntax on line %" }), _line77));
runtime.popCall();
return { type: "null" };
};
@ -233,13 +235,13 @@ 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(125), _get_sym45(_ident81));
const r_85 = (runtime.setLine(127), _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(128), _emit36((runtime.setLine(128), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "function _%%(" }), _ident81, _sym_id85))));
(runtime.setLine(130), _enter_scope42());
(runtime.setLine(130), _emit36((runtime.setLine(130), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "function _%%(" }), _ident81, _sym_id85))));
(runtime.setLine(132), _enter_scope42());
const r_88 = ({ type: "bool", value: true });
let _first86 = r_88;
for (const r_89 of _params82.values) {;
@ -248,18 +250,18 @@ 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(135), _emit36(({ type: "string", value: ", " })));
(runtime.setLine(137), _emit36(({ type: "string", value: ", " })));
};
(_first86 = ({ type: "bool", value: false }));
const r_93 = (runtime.setLine(139), _define_param39(_ident87, _line77));
const r_93 = (runtime.setLine(141), _define_param39(_ident87, _line77));
let _sym_id88 = r_93;
(runtime.setLine(140), _emit36((runtime.setLine(140), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _ident87, _sym_id88))));
(runtime.setLine(142), _emit36((runtime.setLine(142), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "_%%" }), _ident87, _sym_id88))));
};
(runtime.setLine(144), _emit36(({ type: "string", value: ") {\n" })));
(runtime.setLine(145), _emit36((runtime.setLine(145), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.pushCall(\"%\");\n" }), _ident81))));
(runtime.setLine(147), _emit_expr30(_body83));
(runtime.setLine(148), _emit36(({ type: "string", value: ";\nruntime.popCall();\nreturn { type: \"null\" };\n}" })));
(runtime.setLine(150), _leave_scope43());
(runtime.setLine(146), _emit36(({ type: "string", value: ") {\n" })));
(runtime.setLine(147), _emit36((runtime.setLine(147), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.pushCall(\"%\");\n" }), _ident81))));
(runtime.setLine(149), _emit_expr30(_body83));
(runtime.setLine(150), _emit36(({ type: "string", value: ";\nruntime.popCall();\nreturn { type: \"null\" };\n}" })));
(runtime.setLine(152), _leave_scope43());
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "let" })))) {
const r_94 = _s78;
@ -268,18 +270,18 @@ 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(153), _let_node_reg_count47());
const r_98 = (runtime.setLine(155), _let_node_reg_count47());
let _reg91 = r_98;
(runtime.setLine(154), _let_node_reg_increment48());
(runtime.setLine(155), _emit36((runtime.setLine(155), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "const r_% = " }), _reg91))));
(runtime.setLine(156), _emit_expr30(_expr90));
(runtime.setLine(157), _emit_let_node33(_pat89, _reg91));
(runtime.setLine(156), _let_node_reg_increment48());
(runtime.setLine(157), _emit36((runtime.setLine(157), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "const r_% = " }), _reg91))));
(runtime.setLine(158), _emit_expr30(_expr90));
(runtime.setLine(159), _emit_let_node33(_pat89, _reg91));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "do" })))) {
(runtime.setLine(159), _enter_scope42());
(runtime.setLine(160), _discover_syms29((runtime.setLine(160), _slice24(_s78, ({ type: "int", value: 1 })))));
(runtime.setLine(161), _emit_exprs28((runtime.setLine(161), _slice24(_s78, ({ type: "int", value: 1 })))));
(runtime.setLine(162), _leave_scope43());
(runtime.setLine(161), _enter_scope42());
(runtime.setLine(162), _discover_syms29((runtime.setLine(162), _slice24(_s78, ({ type: "int", value: 1 })))));
(runtime.setLine(163), _emit_exprs28((runtime.setLine(163), _slice24(_s78, ({ type: "int", value: 1 })))));
(runtime.setLine(164), _leave_scope43());
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "for" })))) {
const r_99 = _s78;
@ -290,29 +292,29 @@ 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(166), _let_node_reg_count47());
const r_104 = (runtime.setLine(168), _let_node_reg_count47());
let _reg95 = r_104;
(runtime.setLine(167), _let_node_reg_increment48());
(runtime.setLine(168), _emit36((runtime.setLine(168), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "for (const r_% of " }), _reg95))));
(runtime.setLine(169), _emit_expr30(_expr93));
(runtime.setLine(170), _emit36(({ type: "string", value: ".values) {" })));
(runtime.setLine(172), _enter_scope42());
(runtime.setLine(173), _emit_let_node33(_pat92, _reg95));
(runtime.setLine(169), _let_node_reg_increment48());
(runtime.setLine(170), _emit36((runtime.setLine(170), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "for (const r_% of " }), _reg95))));
(runtime.setLine(171), _emit_expr30(_expr93));
(runtime.setLine(172), _emit36(({ type: "string", value: ".values) {" })));
(runtime.setLine(174), _enter_scope42());
(runtime.setLine(176), _emit36(({ type: "string", value: ";\n" })));
(runtime.setLine(177), _emit_expr30(_body94));
(runtime.setLine(178), _emit36(({ type: "string", value: "}" })));
(runtime.setLine(180), _leave_scope43());
(runtime.setLine(181), _leave_scope43());
(runtime.setLine(175), _emit_let_node33(_pat92, _reg95));
(runtime.setLine(176), _enter_scope42());
(runtime.setLine(178), _emit36(({ type: "string", value: ";\n" })));
(runtime.setLine(179), _emit_expr30(_body94));
(runtime.setLine(180), _emit36(({ type: "string", value: "}" })));
(runtime.setLine(182), _leave_scope43());
(runtime.setLine(183), _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(184), _emit36(({ type: "string", value: "while (true) {\n" })));
(runtime.setLine(185), _emit_expr30(_body96));
(runtime.setLine(186), _emit36(({ type: "string", value: "}" })));
(runtime.setLine(186), _emit36(({ type: "string", value: "while (true) {\n" })));
(runtime.setLine(187), _emit_expr30(_body96));
(runtime.setLine(188), _emit36(({ type: "string", value: "}" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "if" })))) {
const r_108 = _s78;
@ -323,15 +325,15 @@ 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(189), _emit36(({ type: "string", value: "if (runtime.truthy(" })));
(runtime.setLine(190), _emit_expr30(_cond97));
(runtime.setLine(191), _emit36(({ type: "string", value: ")) {\n" })));
(runtime.setLine(192), _emit_expr30(_truthy98));
(runtime.setLine(193), _emit36(({ type: "string", value: "}" })));
(runtime.setLine(191), _emit36(({ type: "string", value: "if (runtime.truthy(" })));
(runtime.setLine(192), _emit_expr30(_cond97));
(runtime.setLine(193), _emit36(({ type: "string", value: ")) {\n" })));
(runtime.setLine(194), _emit_expr30(_truthy98));
(runtime.setLine(195), _emit36(({ type: "string", value: "}" })));
if (runtime.truthy(runtime.opNe(_falsy99, ({ type: "null" })))) {
(runtime.setLine(195), _emit36(({ type: "string", value: " else {\n" })));
(runtime.setLine(196), _emit_expr30(_falsy99));
(runtime.setLine(197), _emit36(({ type: "string", value: "}" })));
(runtime.setLine(197), _emit36(({ type: "string", value: " else {\n" })));
(runtime.setLine(198), _emit_expr30(_falsy99));
(runtime.setLine(199), _emit36(({ type: "string", value: "}" })));
};
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "return" })))) {
@ -339,12 +341,12 @@ 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(201), _emit36(({ type: "string", value: "runtime.popCall();\n" })));
(runtime.setLine(202), _emit36(({ type: "string", value: "return " })));
(runtime.setLine(203), _emit36(({ type: "string", value: "runtime.popCall();\n" })));
(runtime.setLine(204), _emit36(({ type: "string", value: "return " })));
if (runtime.truthy(runtime.opNe(_value100, ({ type: "null" })))) {
(runtime.setLine(204), _emit_expr30(_value100));
(runtime.setLine(206), _emit_expr30(_value100));
} else {
(runtime.setLine(206), _emit36(({ type: "string", value: "{ type: \"null\" }" })));
(runtime.setLine(208), _emit36(({ type: "string", value: "{ type: \"null\" }" })));
};
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "break" })))) {
@ -352,9 +354,9 @@ 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(210), _emit36(({ type: "string", value: "break" })));
(runtime.setLine(212), _emit36(({ type: "string", value: "break" })));
if (runtime.truthy(runtime.opNe(_value101, ({ type: "null" })))) {
(runtime.setLine(212), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "not implemented" })));
(runtime.setLine(214), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "not implemented" })));
};
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "call" })))) {
@ -362,34 +364,34 @@ 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(216), _slice24(_s78, ({ type: "int", value: 2 })));
const r_122 = (runtime.setLine(218), _slice24(_s78, ({ type: "int", value: 2 })));
let _args103 = r_122;
(runtime.setLine(217), _emit36((runtime.setLine(217), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(runtime.setLine(%), " }), _line77))));
(runtime.setLine(218), _emit_expr30(_callee102));
(runtime.setLine(219), _emit36(({ type: "string", value: "(" })));
(runtime.setLine(219), _emit36((runtime.setLine(219), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(runtime.setLine(%), " }), _line77))));
(runtime.setLine(220), _emit_expr30(_callee102));
(runtime.setLine(221), _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(224), _emit36(({ type: "string", value: ", " })));
(runtime.setLine(226), _emit36(({ type: "string", value: ", " })));
};
(_first104 = ({ type: "bool", value: false }));
(runtime.setLine(228), _emit_expr30(_arg105));
(runtime.setLine(230), _emit_expr30(_arg105));
};
(runtime.setLine(231), _emit36(({ type: "string", value: "))" })));
(runtime.setLine(233), _emit36(({ type: "string", value: "))" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "list" })))) {
(runtime.setLine(233), _emit_list_literal32((runtime.setLine(233), _slice24(_s78, ({ type: "int", value: 1 })))));
(runtime.setLine(235), _emit_list_literal32((runtime.setLine(235), _slice24(_s78, ({ type: "int", value: 1 })))));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "=" })))) {
(runtime.setLine(235), _emit_assign_expr35(_s78, _line77, ({ type: "string", value: "=" })));
(runtime.setLine(237), _emit_assign_expr35(_s78, _line77, ({ type: "string", value: "=" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "+=" })))) {
(runtime.setLine(237), _emit_assign_expr35(_s78, _line77, ({ type: "string", value: "+" })));
(runtime.setLine(239), _emit_assign_expr35(_s78, _line77, ({ type: "string", value: "+" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "-=" })))) {
(runtime.setLine(239), _emit_assign_expr35(_s78, _line77, ({ type: "string", value: "-" })));
(runtime.setLine(241), _emit_assign_expr35(_s78, _line77, ({ type: "string", value: "-" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "or" })))) {
const r_125 = _s78;
@ -398,12 +400,12 @@ 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(242), _emit36((runtime.setLine(242), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(runtime.setLine(%)" }), _line77))));
(runtime.setLine(243), _emit36(({ type: "string", value: ", { type: \"bool\", value: runtime.truthy(" })));
(runtime.setLine(244), _emit_expr30(_left106));
(runtime.setLine(245), _emit36(({ type: "string", value: ") || runtime.truthy(" })));
(runtime.setLine(246), _emit_expr30(_right107));
(runtime.setLine(247), _emit36(({ type: "string", value: ") })" })));
(runtime.setLine(244), _emit36((runtime.setLine(244), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(runtime.setLine(%)" }), _line77))));
(runtime.setLine(245), _emit36(({ type: "string", value: ", { type: \"bool\", value: runtime.truthy(" })));
(runtime.setLine(246), _emit_expr30(_left106));
(runtime.setLine(247), _emit36(({ type: "string", value: ") || runtime.truthy(" })));
(runtime.setLine(248), _emit_expr30(_right107));
(runtime.setLine(249), _emit36(({ type: "string", value: ") })" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "and" })))) {
const r_129 = _s78;
@ -412,47 +414,48 @@ 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(250), _emit36((runtime.setLine(250), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(runtime.setLine(%)" }), _line77))));
(runtime.setLine(251), _emit36(({ type: "string", value: ", { type: \"bool\", value: runtime.truthy(" })));
(runtime.setLine(252), _emit_expr30(_left108));
(runtime.setLine(253), _emit36(({ type: "string", value: ") && runtime.truthy(" })));
(runtime.setLine(254), _emit_expr30(_right109));
(runtime.setLine(255), _emit36(({ type: "string", value: ") })" })));
(runtime.setLine(252), _emit36((runtime.setLine(252), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(runtime.setLine(%)" }), _line77))));
(runtime.setLine(253), _emit36(({ type: "string", value: ", { type: \"bool\", value: runtime.truthy(" })));
(runtime.setLine(254), _emit_expr30(_left108));
(runtime.setLine(255), _emit36(({ type: "string", value: ") && runtime.truthy(" })));
(runtime.setLine(256), _emit_expr30(_right109));
(runtime.setLine(257), _emit36(({ type: "string", value: ") })" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "==" })))) {
(runtime.setLine(257), _emit_binary_op34(_s78, ({ type: "string", value: "opEq" })));
(runtime.setLine(259), _emit_binary_op34(_s78, ({ type: "string", value: "opEq" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "!=" })))) {
(runtime.setLine(259), _emit_binary_op34(_s78, ({ type: "string", value: "opNe" })));
(runtime.setLine(261), _emit_binary_op34(_s78, ({ type: "string", value: "opNe" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "<" })))) {
(runtime.setLine(261), _emit_binary_op34(_s78, ({ type: "string", value: "opLt" })));
(runtime.setLine(263), _emit_binary_op34(_s78, ({ type: "string", value: "opLt" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: ">" })))) {
(runtime.setLine(263), _emit_binary_op34(_s78, ({ type: "string", value: "opGt" })));
(runtime.setLine(265), _emit_binary_op34(_s78, ({ type: "string", value: "opGt" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "<=" })))) {
(runtime.setLine(265), _emit_binary_op34(_s78, ({ type: "string", value: "opLte" })));
(runtime.setLine(267), _emit_binary_op34(_s78, ({ type: "string", value: "opLte" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: ">=" })))) {
(runtime.setLine(267), _emit_binary_op34(_s78, ({ type: "string", value: "opGte" })));
(runtime.setLine(269), _emit_binary_op34(_s78, ({ type: "string", value: "opGte" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "+" })))) {
(runtime.setLine(269), _emit_binary_op34(_s78, ({ type: "string", value: "opAdd" })));
(runtime.setLine(271), _emit_binary_op34(_s78, ({ type: "string", value: "opAdd" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "-" })))) {
(runtime.setLine(271), _emit_binary_op34(_s78, ({ type: "string", value: "opSub" })));
(runtime.setLine(273), _emit_binary_op34(_s78, ({ type: "string", value: "opSub" })));
} else {
if (runtime.truthy(runtime.opEq(_id80, ({ type: "string", value: "not" })))) {
const r_133 = _s78;
const r_134 = r_133.values[0] ?? { type: "null"};
const r_135 = r_133.values[1] ?? { type: "null"};
let _expr110 = r_135;
(runtime.setLine(274), _emit36(({ type: "string", value: "runtime.opNot(" })));
(runtime.setLine(275), _emit_expr30(_expr110));
(runtime.setLine(276), _emit36(({ type: "string", value: ")" })));
(runtime.setLine(276), _emit36(({ type: "string", value: "runtime.opNot(" })));
(runtime.setLine(277), _emit_expr30(_expr110));
(runtime.setLine(278), _emit36(({ type: "string", value: ")" })));
} else {
(runtime.setLine(278), _emit_list_literal32(_s78));
(runtime.setLine(280), _emit_list_literal32(_s78));
(runtime.setLine(281), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "warning: deprecated list syntax on line %" }), _line77));
}}}}}}}}}}}}}}}}}}}}}}}};
;
runtime.popCall();
@ -460,18 +463,18 @@ return { type: "null" };
};
function _emit_list_literal32(_s111) {
runtime.pushCall("emit_list_literal");
(runtime.setLine(283), _emit36(({ type: "string", value: "({ type: \"list\", values: [" })));
(runtime.setLine(286), _emit36(({ type: "string", value: "({ type: \"list\", values: [" })));
const r_136 = ({ type: "bool", value: true });
let _first112 = r_136;
for (const r_137 of _s111.values) {;
let _e113 = r_137;
if (runtime.truthy(runtime.opNot(_first112))) {
(runtime.setLine(287), _emit36(({ type: "string", value: ", " })));
(runtime.setLine(290), _emit36(({ type: "string", value: ", " })));
};
(_first112 = ({ type: "bool", value: false }));
(runtime.setLine(291), _emit_expr30(_e113));
(runtime.setLine(294), _emit_expr30(_e113));
};
(runtime.setLine(293), _emit36(({ type: "string", value: "] })" })));
(runtime.setLine(296), _emit36(({ type: "string", value: "] })" })));
;
runtime.popCall();
return { type: "null" };
@ -492,9 +495,9 @@ let _ident118 = r_144;
if (runtime.truthy(runtime.opEq(_ident118, ({ type: "string", value: "_" })))) {
runtime.popCall();
return { type: "null" }};
const r_145 = (runtime.setLine(303), _define_let40(_ident118, _line117));
const r_145 = (runtime.setLine(306), _define_let40(_ident118, _line117));
let _sym_id119 = r_145;
(runtime.setLine(304), _emit36((runtime.setLine(304), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: ";\nlet _%% = r_%" }), _ident118, _sym_id119, _base_reg115))));
(runtime.setLine(307), _emit36((runtime.setLine(307), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: ";\nlet _%% = r_%" }), _ident118, _sym_id119, _base_reg115))));
} else {
if (runtime.truthy(runtime.opEq(_pat_ty116, ({ type: "string", value: "list" })))) {
const r_146 = _pat114;
@ -506,15 +509,15 @@ const r_150 = ({ type: "int", value: 0 });
let _i121 = r_150;
for (const r_151 of _pats120.values) {;
let _pat122 = r_151;
const r_152 = (runtime.setLine(326), _let_node_reg_count47());
const r_152 = (runtime.setLine(329), _let_node_reg_count47());
let _reg123 = r_152;
(runtime.setLine(327), _let_node_reg_increment48());
(runtime.setLine(328), _emit36((runtime.setLine(328), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: ";\nconst r_% = r_%.values[%] ?? { type: \"null\"}" }), _reg123, _base_reg115, _i121))));
(runtime.setLine(332), _emit_let_node33(_pat122, _reg123));
(runtime.setLine(330), _let_node_reg_increment48());
(runtime.setLine(331), _emit36((runtime.setLine(331), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: ";\nconst r_% = r_%.values[%] ?? { type: \"null\"}" }), _reg123, _base_reg115, _i121))));
(runtime.setLine(335), _emit_let_node33(_pat122, _reg123));
(_i121 = runtime.opAdd(_i121, ({ type: "int", value: 1 })));
};
} else {
(runtime.setLine(336), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "malformed pattern on line %" }), _line117));
(runtime.setLine(339), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "malformed pattern on line %" }), _line117));
}};
;
runtime.popCall();
@ -528,11 +531,11 @@ const r_155 = r_153.values[1] ?? { type: "null"};
let _left126 = r_155;
const r_156 = r_153.values[2] ?? { type: "null"};
let _right127 = r_156;
(runtime.setLine(342), _emit36((runtime.setLine(342), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.%(" }), _id125))));
(runtime.setLine(343), _emit_expr30(_left126));
(runtime.setLine(344), _emit36(({ type: "string", value: ", " })));
(runtime.setLine(345), _emit_expr30(_right127));
(runtime.setLine(346), _emit36(({ type: "string", value: ")" })));
(runtime.setLine(345), _emit36((runtime.setLine(345), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.%(" }), _id125))));
(runtime.setLine(346), _emit_expr30(_left126));
(runtime.setLine(347), _emit36(({ type: "string", value: ", " })));
(runtime.setLine(348), _emit_expr30(_right127));
(runtime.setLine(349), _emit36(({ type: "string", value: ")" })));
;
runtime.popCall();
return { type: "null" };
@ -547,7 +550,7 @@ let _target_type131 = r_160;
const r_161 = r_157.values[2] ?? { type: "null"};
let _expr132 = r_161;
if (runtime.truthy(runtime.opNe(_target_type131, ({ type: "string", value: "ident" })))) {
(runtime.setLine(352), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "cannot assign to expression on line %" }), _line129));
(runtime.setLine(355), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "cannot assign to expression on line %" }), _line129));
};
const r_162 = _s128;
const r_163 = r_162.values[0] ?? { type: "null"};
@ -556,10 +559,10 @@ const r_165 = r_164.values[0] ?? { type: "null"};
const r_166 = r_164.values[1] ?? { type: "null"};
const r_167 = r_164.values[2] ?? { type: "null"};
let _ident133 = r_167;
const r_168 = (runtime.setLine(355), _get_sym45(_ident133));
const r_168 = (runtime.setLine(358), _get_sym45(_ident133));
let _sym134 = r_168;
if (runtime.truthy(runtime.opEq(_sym134, ({ type: "null" })))) {
(runtime.setLine(357), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "could not find symbol '%' on line %" }), _ident133, _line129));
(runtime.setLine(360), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "could not find symbol '%' on line %" }), _ident133, _line129));
};
const r_169 = _sym134;
const r_170 = r_169.values[0] ?? { type: "null"};
@ -570,25 +573,25 @@ const r_172 = r_169.values[2] ?? { type: "null"};
let _sym_ident137 = r_172;
const r_173 = r_169.values[3] ?? { type: "null"};
if (runtime.truthy(runtime.opEq(_sym_type136, ({ type: "string", value: "let" })))) {
(runtime.setLine(361), _emit36((runtime.setLine(361), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(_%% = " }), _sym_ident137, _sym_id135))));
(runtime.setLine(364), _emit36((runtime.setLine(364), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "(_%% = " }), _sym_ident137, _sym_id135))));
if (runtime.truthy(runtime.opEq(_id130, ({ type: "string", value: "=" })))) {
(runtime.setLine(363), _emit_expr30(_expr132));
(runtime.setLine(366), _emit_expr30(_expr132));
} else {
if (runtime.truthy(runtime.opEq(_id130, ({ type: "string", value: "+" })))) {
(runtime.setLine(365), _emit36((runtime.setLine(365), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.opAdd(_%%, " }), _sym_ident137, _sym_id135))));
(runtime.setLine(366), _emit_expr30(_expr132));
(runtime.setLine(367), _emit36(({ type: "string", value: ")" })));
(runtime.setLine(368), _emit36((runtime.setLine(368), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.opAdd(_%%, " }), _sym_ident137, _sym_id135))));
(runtime.setLine(369), _emit_expr30(_expr132));
(runtime.setLine(370), _emit36(({ type: "string", value: ")" })));
} else {
if (runtime.truthy(runtime.opEq(_id130, ({ type: "string", value: "-" })))) {
(runtime.setLine(369), _emit36((runtime.setLine(369), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.opSub(_%%, " }), _sym_ident137, _sym_id135))));
(runtime.setLine(370), _emit_expr30(_expr132));
(runtime.setLine(371), _emit36(({ type: "string", value: ")" })));
(runtime.setLine(372), _emit36((runtime.setLine(372), ((...args) => runtime.builtinFormat(...args))(({ type: "string", value: "runtime.opSub(_%%, " }), _sym_ident137, _sym_id135))));
(runtime.setLine(373), _emit_expr30(_expr132));
(runtime.setLine(374), _emit36(({ type: "string", value: ")" })));
} else {
(runtime.setLine(373), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "not implemented" })));
(runtime.setLine(376), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "not implemented" })));
}}};
(runtime.setLine(375), _emit36(({ type: "string", value: ")" })));
(runtime.setLine(378), _emit36(({ type: "string", value: ")" })));
} else {
(runtime.setLine(377), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "cannot assign to symbol '%' on line %" }), _sym_ident137, _line129));
(runtime.setLine(380), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "cannot assign to symbol '%' on line %" }), _sym_ident137, _line129));
};
;
runtime.popCall();
@ -596,17 +599,17 @@ return { type: "null" };
};
function _emit36(_str138) {
runtime.pushCall("emit");
(runtime.setLine(382), ((...args) => runtime.builtinPush(...args))(_output41, _str138));
(runtime.setLine(385), ((...args) => runtime.builtinPush(...args))(_output41, _str138));
;
runtime.popCall();
return { type: "null" };
};
function _define_builtin37(_ident139, _builtin_id140) {
runtime.pushCall("define_builtin");
const r_174 = (runtime.setLine(386), _sym_id_count49());
const r_174 = (runtime.setLine(389), _sym_id_count49());
let _sym_id141 = r_174;
(runtime.setLine(387), _sym_id_increment50());
(runtime.setLine(389), _define_sym44(_ident139, ({ type: "list", values: [_sym_id141, ({ type: "string", value: "builtin" }), _builtin_id140] })));
(runtime.setLine(390), _sym_id_increment50());
(runtime.setLine(392), _define_sym44(_ident139, ({ type: "list", values: [_sym_id141, ({ type: "string", value: "builtin" }), _builtin_id140] })));
runtime.popCall();
return _sym_id141;
;
@ -615,10 +618,10 @@ return { type: "null" };
};
function _define_fn38(_ident142, _line143) {
runtime.pushCall("define_fn");
const r_175 = (runtime.setLine(394), _sym_id_count49());
const r_175 = (runtime.setLine(397), _sym_id_count49());
let _sym_id144 = r_175;
(runtime.setLine(395), _sym_id_increment50());
(runtime.setLine(397), _define_sym44(_ident142, ({ type: "list", values: [_sym_id144, ({ type: "string", value: "fn" }), _ident142, _line143] })));
(runtime.setLine(398), _sym_id_increment50());
(runtime.setLine(400), _define_sym44(_ident142, ({ type: "list", values: [_sym_id144, ({ type: "string", value: "fn" }), _ident142, _line143] })));
runtime.popCall();
return _sym_id144;
;
@ -627,10 +630,10 @@ return { type: "null" };
};
function _define_param39(_ident145, _line146) {
runtime.pushCall("define_param");
const r_176 = (runtime.setLine(402), _sym_id_count49());
const r_176 = (runtime.setLine(405), _sym_id_count49());
let _sym_id147 = r_176;
(runtime.setLine(403), _sym_id_increment50());
(runtime.setLine(405), _define_sym44(_ident145, ({ type: "list", values: [_sym_id147, ({ type: "string", value: "param" }), _ident145, _line146] })));
(runtime.setLine(406), _sym_id_increment50());
(runtime.setLine(408), _define_sym44(_ident145, ({ type: "list", values: [_sym_id147, ({ type: "string", value: "param" }), _ident145, _line146] })));
runtime.popCall();
return _sym_id147;
;
@ -639,10 +642,10 @@ return { type: "null" };
};
function _define_let40(_ident148, _line149) {
runtime.pushCall("define_let");
const r_177 = (runtime.setLine(410), _sym_id_count49());
const r_177 = (runtime.setLine(413), _sym_id_count49());
let _sym_id150 = r_177;
(runtime.setLine(411), _sym_id_increment50());
(runtime.setLine(413), _define_sym44(_ident148, ({ type: "list", values: [_sym_id150, ({ type: "string", value: "let" }), _ident148, _line149] })));
(runtime.setLine(414), _sym_id_increment50());
(runtime.setLine(416), _define_sym44(_ident148, ({ type: "list", values: [_sym_id150, ({ type: "string", value: "let" }), _ident148, _line149] })));
runtime.popCall();
return _sym_id150;
;
@ -711,20 +714,20 @@ let _map165 = r_185;
const r_186 = ({ type: "int", value: 0 });
let _i166 = r_186;
while (true) {
if (runtime.truthy(runtime.opGte(_i166, (runtime.setLine(450), ((...args) => runtime.builtinLen(...args))(_map165))))) {
if (runtime.truthy(runtime.opGte(_i166, (runtime.setLine(453), ((...args) => runtime.builtinLen(...args))(_map165))))) {
break};
const r_187 = (runtime.setLine(451), ((...args) => runtime.builtinAt(...args))(_map165, _i166));
const r_187 = (runtime.setLine(454), ((...args) => runtime.builtinAt(...args))(_map165, _i166));
const r_188 = r_187.values[0] ?? { type: "null"};
let _s_ident167 = r_188;
const r_189 = r_187.values[1] ?? { type: "null"};
if (runtime.truthy(runtime.opEq(_ident163, _s_ident167))) {
(runtime.setLine(453), ((...args) => runtime.builtinSet(...args))(_map165, _i166, ({ type: "list", values: [_ident163, _sym164] })));
(runtime.setLine(456), ((...args) => runtime.builtinSet(...args))(_map165, _i166, ({ type: "list", values: [_ident163, _sym164] })));
runtime.popCall();
return { type: "null" };
};
(_i166 = runtime.opAdd(_i166, ({ type: "int", value: 1 })));
};
(runtime.setLine(458), ((...args) => runtime.builtinPush(...args))(_map165, ({ type: "list", values: [_ident163, _sym164] })));
(runtime.setLine(461), ((...args) => runtime.builtinPush(...args))(_map165, ({ type: "list", values: [_ident163, _sym164] })));
;
runtime.popCall();
return { type: "null" };
@ -739,9 +742,9 @@ let _map171 = r_192;
const r_193 = ({ type: "int", value: 0 });
let _i172 = r_193;
while (true) {
if (runtime.truthy(runtime.opGte(_i172, (runtime.setLine(465), ((...args) => runtime.builtinLen(...args))(_map171))))) {
if (runtime.truthy(runtime.opGte(_i172, (runtime.setLine(468), ((...args) => runtime.builtinLen(...args))(_map171))))) {
break};
const r_194 = (runtime.setLine(466), ((...args) => runtime.builtinAt(...args))(_map171, _i172));
const r_194 = (runtime.setLine(469), ((...args) => runtime.builtinAt(...args))(_map171, _i172));
const r_195 = r_194.values[0] ?? { type: "null"};
let _s_ident173 = r_195;
const r_196 = r_194.values[1] ?? { type: "null"};
@ -754,7 +757,7 @@ return _s_sym174;
};
if (runtime.truthy(runtime.opNe(_parent170, ({ type: "null" })))) {
runtime.popCall();
return (runtime.setLine(473), _find_sym157(_parent170, _ident169));
return (runtime.setLine(476), _find_sym157(_parent170, _ident169));
};
runtime.popCall();
return ({ type: "null" });
@ -765,7 +768,7 @@ return { type: "null" };
function _get158(_ident175) {
runtime.pushCall("get");
runtime.popCall();
return (runtime.setLine(479), _find_sym157(_syms161, _ident175));
return (runtime.setLine(482), _find_sym157(_syms161, _ident175));
;
runtime.popCall();
return { type: "null" };
@ -782,10 +785,10 @@ const r_201 = r_200.values[0] ?? { type: "null"};
let _ident180 = r_201;
const r_202 = r_200.values[1] ?? { type: "null"};
let _sym181 = r_202;
(runtime.setLine(485), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%- %: %" }), (runtime.setLine(485), _indent23(_depth177)), _ident180, _sym181));
(runtime.setLine(488), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%- %: %" }), (runtime.setLine(488), _indent23(_depth177)), _ident180, _sym181));
};
if (runtime.truthy(runtime.opNe(_parent178, ({ type: "null" })))) {
(runtime.setLine(488), _print_syms_node159(_parent178, runtime.opAdd(_depth177, ({ type: "int", value: 1 }))));
(runtime.setLine(491), _print_syms_node159(_parent178, runtime.opAdd(_depth177, ({ type: "int", value: 1 }))));
};
;
runtime.popCall();
@ -793,7 +796,7 @@ return { type: "null" };
};
function _print_syms160() {
runtime.pushCall("print_syms");
(runtime.setLine(493), _print_syms_node159(_syms161, ({ type: "int", value: 0 })));
(runtime.setLine(496), _print_syms_node159(_syms161, ({ type: "int", value: 0 })));
;
runtime.popCall();
return { type: "null" };
@ -806,7 +809,7 @@ return { type: "null" };
};
function _string_escape17(_str182) {
runtime.pushCall("string_escape");
const r_203 = (runtime.setLine(507), ((...args) => runtime.builtinLen(...args))(_str182));
const r_203 = (runtime.setLine(510), ((...args) => runtime.builtinLen(...args))(_str182));
let _str_len183 = r_203;
const r_204 = ({ type: "int", value: 0 });
let _i184 = r_204;
@ -815,7 +818,7 @@ let _result185 = r_205;
while (true) {
if (runtime.truthy(runtime.opGte(_i184, _str_len183))) {
break};
const r_206 = (runtime.setLine(512), ((...args) => runtime.builtinAt(...args))(_str182, _i184));
const r_206 = (runtime.setLine(515), ((...args) => runtime.builtinAt(...args))(_str182, _i184));
let _ch186 = r_206;
if (runtime.truthy(runtime.opEq(_ch186, ({ type: "string", value: "\\" })))) {
(_result185 = runtime.opAdd(_result185, ({ type: "string", value: "\\\\" })));
@ -849,16 +852,16 @@ function _Parser18(_tokens187) {
runtime.pushCall("Parser");
const r_207 = ({ type: "int", value: 0 });
let _i194 = r_207;
const r_208 = (runtime.setLine(535), ((...args) => runtime.builtinAt(...args))(_tokens187, _i194));
const r_208 = (runtime.setLine(538), ((...args) => runtime.builtinAt(...args))(_tokens187, _i194));
let _tok195 = r_208;
function _parse188() {
runtime.pushCall("parse");
const r_209 = ({ type: "list", values: [] });
let _exprs196 = r_209;
while (true) {
if (runtime.truthy((runtime.setLine(540), _done193()))) {
if (runtime.truthy((runtime.setLine(543), _done193()))) {
break};
(runtime.setLine(541), ((...args) => runtime.builtinPush(...args))(_exprs196, (runtime.setLine(541), _parse_expr189())));
(runtime.setLine(544), ((...args) => runtime.builtinPush(...args))(_exprs196, (runtime.setLine(544), _parse_expr189())));
};
runtime.popCall();
return _exprs196;
@ -875,33 +878,33 @@ const r_212 = r_210.values[1] ?? { type: "null"};
let _line198 = r_212;
const r_213 = r_210.values[2] ?? { type: "null"};
let _value199 = r_213;
if (runtime.truthy((runtime.setLine(548), _eat190(({ type: "string", value: "(" }))))) {
if (runtime.truthy((runtime.setLine(551), _eat190(({ type: "string", value: "(" }))))) {
const r_214 = ({ type: "list", values: [] });
let _values200 = r_214;
while (true) {
if (runtime.truthy((runtime.setLine(551), _test192(({ type: "string", value: ")" }))))) {
if (runtime.truthy((runtime.setLine(554), _test192(({ type: "string", value: ")" }))))) {
break};
(runtime.setLine(552), ((...args) => runtime.builtinPush(...args))(_values200, (runtime.setLine(552), _parse_expr189())));
(runtime.setLine(555), ((...args) => runtime.builtinPush(...args))(_values200, (runtime.setLine(555), _parse_expr189())));
};
if (runtime.truthy(runtime.opNot((runtime.setLine(554), _eat190(({ type: "string", value: ")" })))))) {
(runtime.setLine(555), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected ')' on line %" }), (runtime.setLine(555), ((...args) => runtime.builtinAt(...args))(_tok195, ({ type: "int", value: 1 })))));
if (runtime.truthy(runtime.opNot((runtime.setLine(557), _eat190(({ type: "string", value: ")" })))))) {
(runtime.setLine(558), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected ')' on line %" }), (runtime.setLine(558), ((...args) => runtime.builtinAt(...args))(_tok195, ({ type: "int", value: 1 })))));
};
runtime.popCall();
return ({ type: "list", values: [({ type: "string", value: "list" }), _line198, _values200] });
} else {
if (runtime.truthy((runtime.setLine(558), _eat190(({ type: "string", value: "string" }))))) {
if (runtime.truthy((runtime.setLine(561), _eat190(({ type: "string", value: "string" }))))) {
runtime.popCall();
return ({ type: "list", values: [({ type: "string", value: "string" }), _line198, _value199] });
} else {
if (runtime.truthy((runtime.setLine(560), _eat190(({ type: "string", value: "int" }))))) {
if (runtime.truthy((runtime.setLine(563), _eat190(({ type: "string", value: "int" }))))) {
runtime.popCall();
return ({ type: "list", values: [({ type: "string", value: "int" }), _line198, (runtime.setLine(561), ((...args) => runtime.builtinStringToInt(...args))(_value199))] });
return ({ type: "list", values: [({ type: "string", value: "int" }), _line198, (runtime.setLine(564), ((...args) => runtime.builtinStringToInt(...args))(_value199))] });
} else {
if (runtime.truthy((runtime.setLine(562), _eat190(({ type: "string", value: "ident" }))))) {
if (runtime.truthy((runtime.setLine(565), _eat190(({ type: "string", value: "ident" }))))) {
runtime.popCall();
return ({ type: "list", values: [({ type: "string", value: "ident" }), _line198, _value199] });
} else {
(runtime.setLine(565), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected expression, got '%' on line %" }), _ty197, _line198));
(runtime.setLine(568), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected expression, got '%' on line %" }), _ty197, _line198));
}}}};
;
runtime.popCall();
@ -909,10 +912,10 @@ return { type: "null" };
};
function _eat190(_pat201) {
runtime.pushCall("eat");
if (runtime.truthy(runtime.opNot((runtime.setLine(570), _test192(_pat201))))) {
if (runtime.truthy(runtime.opNot((runtime.setLine(573), _test192(_pat201))))) {
runtime.popCall();
return ({ type: "bool", value: false })};
(runtime.setLine(571), _step191());
(runtime.setLine(574), _step191());
runtime.popCall();
return ({ type: "bool", value: true });
;
@ -922,8 +925,8 @@ return { type: "null" };
function _step191() {
runtime.pushCall("step");
(_i194 = runtime.opAdd(_i194, ({ type: "int", value: 1 })));
if (runtime.truthy(runtime.opNot((runtime.setLine(577), _done193())))) {
const r_215 = (runtime.setLine(578), ((...args) => runtime.builtinAt(...args))(_tokens187, _i194));
if (runtime.truthy(runtime.opNot((runtime.setLine(580), _done193())))) {
const r_215 = (runtime.setLine(581), ((...args) => runtime.builtinAt(...args))(_tokens187, _i194));
let _new_tok202 = r_215;
(_tok195 = _new_tok202);
};
@ -933,7 +936,7 @@ return { type: "null" };
};
function _test192(_pat203) {
runtime.pushCall("test");
if (runtime.truthy((runtime.setLine(584), _done193()))) {
if (runtime.truthy((runtime.setLine(587), _done193()))) {
runtime.popCall();
return ({ type: "bool", value: false })};
const r_216 = _tok195;
@ -948,7 +951,7 @@ return { type: "null" };
function _done193() {
runtime.pushCall("done");
runtime.popCall();
return runtime.opGte(_i194, (runtime.setLine(590), ((...args) => runtime.builtinLen(...args))(_tokens187)));
return runtime.opGte(_i194, (runtime.setLine(593), ((...args) => runtime.builtinLen(...args))(_tokens187)));
;
runtime.popCall();
return { type: "null" };
@ -961,7 +964,7 @@ return { type: "null" };
};
function _tokenize19(_text205) {
runtime.pushCall("tokenize");
const r_218 = (runtime.setLine(597), ((...args) => runtime.builtinLen(...args))(_text205));
const r_218 = (runtime.setLine(600), ((...args) => runtime.builtinLen(...args))(_text205));
let _text_len206 = r_218;
const r_219 = ({ type: "list", values: [] });
let _tokens207 = r_219;
@ -974,33 +977,33 @@ let _ident_chars210 = r_222;
while (true) {
if (runtime.truthy(runtime.opGte(_i208, _text_len206))) {
break};
const r_223 = (runtime.setLine(609), ((...args) => runtime.builtinAt(...args))(_text205, _i208));
const r_223 = (runtime.setLine(612), ((...args) => runtime.builtinAt(...args))(_text205, _i208));
let _ch211 = r_223;
if (runtime.truthy((runtime.setLine(611), _contains20(({ type: "string", value: " \t\r\n" }), _ch211)))) {
if (runtime.truthy((runtime.setLine(614), _contains20(({ type: "string", value: " \t\r\n" }), _ch211)))) {
if (runtime.truthy(runtime.opEq(_ch211, ({ type: "string", value: "\n" })))) {
(_line209 = runtime.opAdd(_line209, ({ type: "int", value: 1 })));
};
(_i208 = runtime.opAdd(_i208, ({ type: "int", value: 1 })));
} else {
if (runtime.truthy((runtime.setLine(616), _slice_eq21(_text205, _i208, ({ type: "string", value: "//" }))))) {
if (runtime.truthy((runtime.setLine(619), _slice_eq21(_text205, _i208, ({ type: "string", value: "//" }))))) {
while (true) {
if (runtime.truthy((runtime.setLine(618), { type: "bool", value: runtime.truthy(runtime.opGte(_i208, _text_len206)) || runtime.truthy(runtime.opEq((runtime.setLine(618), ((...args) => runtime.builtinAt(...args))(_text205, _i208)), ({ type: "string", value: "\n" }))) }))) {
if (runtime.truthy((runtime.setLine(621), { type: "bool", value: runtime.truthy(runtime.opGte(_i208, _text_len206)) || runtime.truthy(runtime.opEq((runtime.setLine(621), ((...args) => runtime.builtinAt(...args))(_text205, _i208)), ({ type: "string", value: "\n" }))) }))) {
break;
};
(_i208 = runtime.opAdd(_i208, ({ type: "int", value: 1 })));
};
} else {
if (runtime.truthy((runtime.setLine(623), _contains20(({ type: "string", value: "()" }), _ch211)))) {
(runtime.setLine(624), ((...args) => runtime.builtinPush(...args))(_tokens207, ({ type: "list", values: [_ch211, _line209] })));
if (runtime.truthy((runtime.setLine(626), _contains20(({ type: "string", value: "()" }), _ch211)))) {
(runtime.setLine(627), ((...args) => runtime.builtinPush(...args))(_tokens207, ({ type: "list", values: [_ch211, _line209] })));
(_i208 = runtime.opAdd(_i208, ({ type: "int", value: 1 })));
} else {
if (runtime.truthy(runtime.opEq(_ch211, ({ type: "string", value: "\"" })))) {
const r_224 = ({ type: "string", value: "" });
let _value212 = r_224;
(_i208 = runtime.opAdd(_i208, ({ type: "int", value: 1 })));
(_ch211 = (runtime.setLine(629), ((...args) => runtime.builtinAt(...args))(_text205, _i208)));
(_ch211 = (runtime.setLine(632), ((...args) => runtime.builtinAt(...args))(_text205, _i208)));
while (true) {
if (runtime.truthy((runtime.setLine(631), { type: "bool", value: runtime.truthy(runtime.opGte(_i208, _text_len206)) || runtime.truthy(runtime.opEq(_ch211, ({ type: "string", value: "\"" }))) }))) {
if (runtime.truthy((runtime.setLine(634), { type: "bool", value: runtime.truthy(runtime.opGte(_i208, _text_len206)) || runtime.truthy(runtime.opEq(_ch211, ({ type: "string", value: "\"" }))) }))) {
break;
};
if (runtime.truthy(runtime.opEq(_ch211, ({ type: "string", value: "\\" })))) {
@ -1008,7 +1011,7 @@ if (runtime.truthy(runtime.opEq(_ch211, ({ type: "string", value: "\\" })))) {
if (runtime.truthy(runtime.opGte(_i208, _text_len206))) {
break;
};
(_ch211 = (runtime.setLine(639), ((...args) => runtime.builtinAt(...args))(_text205, _i208)));
(_ch211 = (runtime.setLine(642), ((...args) => runtime.builtinAt(...args))(_text205, _i208)));
if (runtime.truthy(runtime.opEq(_ch211, ({ type: "string", value: "t" })))) {
(_value212 = runtime.opAdd(_value212, ({ type: "string", value: "\t" })));
} else {
@ -1027,41 +1030,41 @@ if (runtime.truthy(runtime.opEq(_ch211, ({ type: "string", value: "0" })))) {
(_value212 = runtime.opAdd(_value212, _ch211));
};
(_i208 = runtime.opAdd(_i208, ({ type: "int", value: 1 })));
(_ch211 = (runtime.setLine(655), ((...args) => runtime.builtinAt(...args))(_text205, _i208)));
(_ch211 = (runtime.setLine(658), ((...args) => runtime.builtinAt(...args))(_text205, _i208)));
};
if (runtime.truthy((runtime.setLine(657), { type: "bool", value: runtime.truthy(runtime.opGte(_i208, _text_len206)) || runtime.truthy(runtime.opNe(_ch211, ({ type: "string", value: "\"" }))) }))) {
(runtime.setLine(658), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected '\"' on line %" }), _line209));
if (runtime.truthy((runtime.setLine(660), { type: "bool", value: runtime.truthy(runtime.opGte(_i208, _text_len206)) || runtime.truthy(runtime.opNe(_ch211, ({ type: "string", value: "\"" }))) }))) {
(runtime.setLine(661), ((...args) => runtime.builtinPanic(...args))(({ type: "string", value: "expected '\"' on line %" }), _line209));
};
(_i208 = runtime.opAdd(_i208, ({ type: "int", value: 1 })));
(runtime.setLine(661), ((...args) => runtime.builtinPush(...args))(_tokens207, ({ type: "list", values: [({ type: "string", value: "string" }), _line209, _value212] })));
(runtime.setLine(664), ((...args) => runtime.builtinPush(...args))(_tokens207, ({ type: "list", values: [({ type: "string", value: "string" }), _line209, _value212] })));
} else {
if (runtime.truthy((runtime.setLine(662), _contains20(({ type: "string", value: "0123456789" }), _ch211)))) {
if (runtime.truthy((runtime.setLine(665), _contains20(({ type: "string", value: "0123456789" }), _ch211)))) {
const r_225 = ({ type: "string", value: "" });
let _value213 = r_225;
while (true) {
(_ch211 = (runtime.setLine(665), ((...args) => runtime.builtinAt(...args))(_text205, _i208)));
if (runtime.truthy((runtime.setLine(666), { type: "bool", value: runtime.truthy(runtime.opGte(_i208, _text_len206)) || runtime.truthy(runtime.opNot((runtime.setLine(666), _contains20(({ type: "string", value: "0123456789" }), _ch211)))) }))) {
(_ch211 = (runtime.setLine(668), ((...args) => runtime.builtinAt(...args))(_text205, _i208)));
if (runtime.truthy((runtime.setLine(669), { type: "bool", value: runtime.truthy(runtime.opGte(_i208, _text_len206)) || runtime.truthy(runtime.opNot((runtime.setLine(669), _contains20(({ type: "string", value: "0123456789" }), _ch211)))) }))) {
break;
};
(_value213 = runtime.opAdd(_value213, _ch211));
(_i208 = runtime.opAdd(_i208, ({ type: "int", value: 1 })));
};
(runtime.setLine(672), ((...args) => runtime.builtinPush(...args))(_tokens207, ({ type: "list", values: [({ type: "string", value: "int" }), _line209, _value213] })));
(runtime.setLine(675), ((...args) => runtime.builtinPush(...args))(_tokens207, ({ type: "list", values: [({ type: "string", value: "int" }), _line209, _value213] })));
} else {
if (runtime.truthy((runtime.setLine(673), _contains20(_ident_chars210, _ch211)))) {
if (runtime.truthy((runtime.setLine(676), _contains20(_ident_chars210, _ch211)))) {
const r_226 = ({ type: "string", value: "" });
let _value214 = r_226;
while (true) {
(_ch211 = (runtime.setLine(676), ((...args) => runtime.builtinAt(...args))(_text205, _i208)));
if (runtime.truthy((runtime.setLine(677), { type: "bool", value: runtime.truthy(runtime.opGte(_i208, _text_len206)) || runtime.truthy(runtime.opNot((runtime.setLine(677), _contains20(_ident_chars210, _ch211)))) }))) {
(_ch211 = (runtime.setLine(679), ((...args) => runtime.builtinAt(...args))(_text205, _i208)));
if (runtime.truthy((runtime.setLine(680), { type: "bool", value: runtime.truthy(runtime.opGte(_i208, _text_len206)) || runtime.truthy(runtime.opNot((runtime.setLine(680), _contains20(_ident_chars210, _ch211)))) }))) {
break;
};
(_value214 = runtime.opAdd(_value214, _ch211));
(_i208 = runtime.opAdd(_i208, ({ type: "int", value: 1 })));
};
(runtime.setLine(683), ((...args) => runtime.builtinPush(...args))(_tokens207, ({ type: "list", values: [({ type: "string", value: "ident" }), _line209, _value214] })));
(runtime.setLine(686), ((...args) => runtime.builtinPush(...args))(_tokens207, ({ type: "list", values: [({ type: "string", value: "ident" }), _line209, _value214] })));
} else {
(runtime.setLine(685), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "illegal char '%'" }), _ch211));
(runtime.setLine(688), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "illegal char '%'" }), _ch211));
(_i208 = runtime.opAdd(_i208, ({ type: "int", value: 1 })));
}}}}}};
};
@ -1073,14 +1076,14 @@ return { type: "null" };
};
function _contains20(_text215, _ch216) {
runtime.pushCall("contains");
const r_227 = (runtime.setLine(693), ((...args) => runtime.builtinLen(...args))(_text215));
const r_227 = (runtime.setLine(696), ((...args) => runtime.builtinLen(...args))(_text215));
let _text_len217 = r_227;
const r_228 = ({ type: "int", value: 0 });
let _i218 = r_228;
while (true) {
if (runtime.truthy(runtime.opGte(_i218, _text_len217))) {
break};
if (runtime.truthy(runtime.opEq((runtime.setLine(697), ((...args) => runtime.builtinAt(...args))(_text215, _i218)), _ch216))) {
if (runtime.truthy(runtime.opEq((runtime.setLine(700), ((...args) => runtime.builtinAt(...args))(_text215, _i218)), _ch216))) {
runtime.popCall();
return ({ type: "bool", value: true });
};
@ -1094,9 +1097,9 @@ return { type: "null" };
};
function _slice_eq21(_str219, _slice_idx220, _substr221) {
runtime.pushCall("slice_eq");
const r_229 = (runtime.setLine(706), ((...args) => runtime.builtinLen(...args))(_str219));
const r_229 = (runtime.setLine(709), ((...args) => runtime.builtinLen(...args))(_str219));
let _str_len222 = r_229;
const r_230 = (runtime.setLine(707), ((...args) => runtime.builtinLen(...args))(_substr221));
const r_230 = (runtime.setLine(710), ((...args) => runtime.builtinLen(...args))(_substr221));
let _substr_len223 = r_230;
const r_231 = ({ type: "int", value: 0 });
let _i224 = r_231;
@ -1107,7 +1110,7 @@ return ({ type: "bool", value: true })};
if (runtime.truthy(runtime.opGte(runtime.opAdd(_slice_idx220, _i224), _str_len222))) {
runtime.popCall();
return ({ type: "bool", value: false })};
if (runtime.truthy(runtime.opNe((runtime.setLine(714), ((...args) => runtime.builtinAt(...args))(_str219, runtime.opAdd(_slice_idx220, _i224))), (runtime.setLine(714), ((...args) => runtime.builtinAt(...args))(_substr221, _i224))))) {
if (runtime.truthy(runtime.opNe((runtime.setLine(717), ((...args) => runtime.builtinAt(...args))(_str219, runtime.opAdd(_slice_idx220, _i224))), (runtime.setLine(717), ((...args) => runtime.builtinAt(...args))(_substr221, _i224))))) {
runtime.popCall();
return ({ type: "bool", value: false })};
(_i224 = runtime.opAdd(_i224, ({ type: "int", value: 1 })));
@ -1128,14 +1131,14 @@ let _line228 = r_234;
const r_235 = r_232.values[2] ?? { type: "null"};
let _value229 = r_235;
if (runtime.truthy(runtime.opEq(_ty227, ({ type: "string", value: "list" })))) {
(runtime.setLine(724), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%(% %" }), (runtime.setLine(724), _indent23(_depth226)), _ty227, _line228));
(runtime.setLine(727), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%(% %" }), (runtime.setLine(727), _indent23(_depth226)), _ty227, _line228));
for (const r_236 of _value229.values) {;
let _e230 = r_236;
(runtime.setLine(726), _print_expr22(_e230, runtime.opAdd(_depth226, ({ type: "int", value: 1 }))));
(runtime.setLine(729), _print_expr22(_e230, runtime.opAdd(_depth226, ({ type: "int", value: 1 }))));
};
(runtime.setLine(728), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%)" }), (runtime.setLine(728), _indent23(_depth226))));
(runtime.setLine(731), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%)" }), (runtime.setLine(731), _indent23(_depth226))));
} else {
(runtime.setLine(730), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%%" }), (runtime.setLine(730), _indent23(_depth226)), _expr225));
(runtime.setLine(733), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "%%" }), (runtime.setLine(733), _indent23(_depth226)), _expr225));
};
;
runtime.popCall();
@ -1161,7 +1164,7 @@ return { type: "null" };
};
function _slice24(_list234, _idx235) {
runtime.pushCall("slice");
const r_239 = (runtime.setLine(746), ((...args) => runtime.builtinLen(...args))(_list234));
const r_239 = (runtime.setLine(749), ((...args) => runtime.builtinLen(...args))(_list234));
let _list_len236 = r_239;
const r_240 = ({ type: "list", values: [] });
let _elems237 = r_240;
@ -1170,7 +1173,7 @@ let _i238 = r_241;
while (true) {
if (runtime.truthy(runtime.opGte(_i238, _list_len236))) {
break};
(runtime.setLine(751), ((...args) => runtime.builtinPush(...args))(_elems237, (runtime.setLine(751), ((...args) => runtime.builtinAt(...args))(_list234, _i238))));
(runtime.setLine(754), ((...args) => runtime.builtinPush(...args))(_elems237, (runtime.setLine(754), ((...args) => runtime.builtinAt(...args))(_list234, _i238))));
(_i238 = runtime.opAdd(_i238, ({ type: "int", value: 1 })));
};
runtime.popCall();
@ -1181,39 +1184,37 @@ return { type: "null" };
};
const r_242 = ({ type: "bool", value: false });
let _silent239 = r_242;
const r_243 = (runtime.setLine(759), ((...args) => runtime.builtinGetArgs(...args))());
const r_243 = (runtime.setLine(762), ((...args) => runtime.builtinGetArgs(...args))());
const r_244 = r_243.values[0] ?? { type: "null"};
let _input_filename240 = r_244;
const r_245 = r_243.values[1] ?? { type: "null"};
let _output_filename241 = r_245;
if (runtime.truthy(runtime.opNot(_silent239))) {
(runtime.setLine(761), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "reading file '%'..." }), _input_filename240))};
const r_246 = (runtime.setLine(762), ((...args) => runtime.builtinReadTextFile(...args))(_input_filename240));
(runtime.setLine(764), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "reading file '%'..." }), _input_filename240))};
const r_246 = (runtime.setLine(765), ((...args) => runtime.builtinReadTextFile(...args))(_input_filename240));
let _text242 = r_246;
if (runtime.truthy(runtime.opNot(_silent239))) {
(runtime.setLine(768), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "tokenizing..." })))};
const r_247 = (runtime.setLine(769), _tokenize19(_text242));
(runtime.setLine(771), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "tokenizing..." })))};
const r_247 = (runtime.setLine(772), _tokenize19(_text242));
let _tokens243 = r_247;
if (runtime.truthy(runtime.opNot(_silent239))) {
(runtime.setLine(782), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "parsing..." })))};
const r_248 = (runtime.setLine(783), _Parser18(_tokens243));
(runtime.setLine(785), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "parsing..." })))};
const r_248 = (runtime.setLine(786), _Parser18(_tokens243));
let _parser244 = r_248;
const r_249 = _parser244;
const r_250 = r_249.values[0] ?? { type: "null"};
let _parse245 = r_250;
const r_251 = (runtime.setLine(785), _parse245());
const r_251 = (runtime.setLine(788), _parse245());
let _ast246 = r_251;
if (runtime.truthy(runtime.opNot(_silent239))) {
(runtime.setLine(792), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "emitting..." })))};
const r_252 = (runtime.setLine(793), _Emitter14(_ast246, _input_filename240));
(runtime.setLine(795), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "emitting..." })))};
const r_252 = (runtime.setLine(796), _Emitter14(_ast246, _input_filename240));
let _emitter247 = r_252;
const r_253 = _emitter247;
const r_254 = r_253.values[0] ?? { type: "null"};
let _emit248 = r_254;
const r_255 = (runtime.setLine(795), _emit248());
const r_255 = (runtime.setLine(798), _emit248());
let _js_code249 = r_255;
(runtime.setLine(797), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "=== js ===" })));
(runtime.setLine(798), ((...args) => runtime.builtinPrintln(...args))(_js_code249));
if (runtime.truthy(runtime.opNot(_silent239))) {
(runtime.setLine(800), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "writing file '%'..." }), _output_filename241))};
(runtime.setLine(801), ((...args) => runtime.builtinWriteTextFile(...args))(_output_filename241, _js_code249));
(runtime.setLine(803), ((...args) => runtime.builtinPrintln(...args))(({ type: "string", value: "writing file '%'..." }), _output_filename241))};
(runtime.setLine(804), ((...args) => runtime.builtinWriteTextFile(...args))(_output_filename241, _js_code249));