Merge branch 'fix_heap_closure'

This commit is contained in:
2026-02-18 12:46:18 -06:00
13 changed files with 124048 additions and 121950 deletions

View File

@@ -179,6 +179,26 @@ When running locally with `./cell --dev`, these commands manage packages:
Local paths are symlinked into `.cell/packages/`. The build step compiles C files to `.cell/lib/<pkg>/<stem>.dylib`. C files in `src/` are support files linked into module dylibs, not standalone modules.
## Debugging Compiler Issues
When investigating bugs in compiled output (wrong values, missing operations, incorrect comparisons), **start from the optimizer down, not the VM up**. The compiler inspection tools will usually identify the problem faster than adding C-level tracing:
```
./cell --dev streamline --types <file> # show inferred slot types — look for wrong types
./cell --dev ir_report --events <file> # show every optimization applied and why
./cell --dev ir_report --types <file> # show type inference results per function
./cell --dev mcode --pretty <file> # show raw IR before optimization
./cell --dev streamline --ir <file> # show human-readable optimized IR
```
**Triage order:**
1. `streamline --types` — are slot types correct? Wrong type inference causes wrong optimizations.
2. `ir_report --events` — are type checks being incorrectly eliminated? Look for `known_type_eliminates_guard` on slots that shouldn't have known types.
3. `mcode --pretty` — is the raw IR correct before optimization? If so, the bug is in streamline.
4. Only dig into `source/mach.c` if the IR looks correct at all levels.
See `docs/compiler-tools.md` for the full tool reference and `docs/spec/streamline.md` for pass details.
## Testing
After any C runtime changes, run all three test suites before considering the work done:

View File

@@ -1,328 +1,7 @@
{"name":"internal/bootstrap.cm","main":{
"nr_slots": 25,
"nr_close_slots": 0,
"instructions": [
["function", 1, 0, 0, 0],
["move", 2, 1, 0, 0],
["function", 1, 1, 0, 0],
["move", 3, 1, 0, 0],
["function", 1, 2, 0, 0],
["move", 4, 1, 0, 0],
["function", 1, 3, 0, 0],
["move", 5, 1, 0, 0],
["function", 1, 4, 0, 0],
["move", 6, 1, 0, 0],
["function", 1, 5, 0, 0],
["move", 7, 1, 0, 0],
["function", 1, 6, 0, 0],
["move", 8, 1, 0, 0],
[
"access",
1,
{
"name": ".cell/packages/core/internal/bootstrap.cm",
"functions": [
{
"name": "os",
"kind": "name",
"make": "intrinsic"
},
4,
21
],
["load_field", 9, 1, "load_internal", 4, 21],
["move", 1, 9, 4, 21],
["access", 9, "internal_fd", 9, 20],
["frame", 10, 2, 1, 9, 10],
["null", 11, 9, 10],
["setarg", 10, 0, 11, 9, 10],
["setarg", 10, 1, 9, 9, 10],
["invoke", 10, 9, 9, 10],
["move", 10, 9, 9, 10],
["access", 9, "json", 10, 26],
["frame", 11, 2, 1, 10, 16],
["null", 12, 10, 16],
["setarg", 11, 0, 12, 10, 16],
["setarg", 11, 1, 9, 10, 16],
["invoke", 11, 9, 10, 16],
["move", 11, 9, 10, 16],
["access", 9, "crypto", 11, 24],
["frame", 12, 2, 1, 11, 14],
["null", 13, 11, 14],
["setarg", 12, 0, 13, 11, 14],
["setarg", 12, 1, 9, 11, 14],
["invoke", 12, 9, 11, 14],
["move", 12, 9, 11, 14],
["access", 9, "tokenize", 43, 30],
["frame", 13, 6, 1, 43, 20],
["null", 14, 43, 20],
["setarg", 13, 0, 14, 43, 20],
["setarg", 13, 1, 9, 43, 20],
["invoke", 13, 9, 43, 20],
["move", 13, 9, 43, 20],
["access", 9, "parse", 44, 27],
["frame", 14, 6, 1, 44, 17],
["null", 15, 44, 17],
["setarg", 14, 0, 15, 44, 17],
["setarg", 14, 1, 9, 44, 17],
["invoke", 14, 9, 44, 17],
["move", 14, 9, 44, 17],
["access", 9, "fold", 45, 26],
["frame", 15, 6, 1, 45, 16],
["null", 16, 45, 16],
["setarg", 15, 0, 16, 45, 16],
["setarg", 15, 1, 9, 45, 16],
["invoke", 15, 9, 45, 16],
["move", 15, 9, 45, 16],
["access", 9, "mcode", 46, 27],
["frame", 16, 6, 1, 46, 17],
["null", 17, 46, 17],
["setarg", 16, 0, 17, 46, 17],
["setarg", 16, 1, 9, 46, 17],
["invoke", 16, 9, 46, 17],
["move", 16, 9, 46, 17],
["access", 9, "streamline", 47, 32],
["frame", 17, 6, 1, 47, 22],
["null", 6, 47, 22],
["setarg", 17, 0, 6, 47, 22],
["setarg", 17, 1, 9, 47, 22],
["invoke", 17, 6, 47, 22],
["move", 9, 6, 47, 22],
["record", 6, 2],
["access", 17, "tokenize", 92, 10],
["store_field", 6, 17, "name", 92, 10],
["access", 17, "tokenize.cm", 92, 28],
["store_field", 6, 17, "path", 92, 28],
["record", 17, 2],
["access", 18, "parse", 93, 10],
["store_field", 17, 18, "name", 93, 10],
["access", 18, "parse.cm", 93, 25],
["store_field", 17, 18, "path", 93, 25],
["record", 18, 2],
["access", 19, "fold", 94, 10],
["store_field", 18, 19, "name", 94, 10],
["access", 19, "fold.cm", 94, 24],
["store_field", 18, 19, "path", 94, 24],
["record", 19, 2],
["access", 20, "mcode", 95, 10],
["store_field", 19, 20, "name", 95, 10],
["access", 20, "mcode.cm", 95, 25],
["store_field", 19, 20, "path", 95, 25],
["record", 20, 2],
["access", 21, "streamline", 96, 10],
["store_field", 20, 21, "name", 96, 10],
["access", 21, "streamline.cm", 96, 30],
["store_field", 20, 21, "path", 96, 30],
["record", 21, 2],
["access", 22, "engine", 97, 10],
["store_field", 21, 22, "name", 97, 10],
["access", 22, "internal/engine.cm", 97, 26],
["store_field", 21, 22, "path", 97, 26],
["array", 22, 6, 97, 26],
["push", 22, 6, 97, 26],
["push", 22, 17, 97, 26],
["push", 22, 18, 97, 26],
["push", 22, 19, 97, 26],
["push", 22, 20, 97, 26],
["push", 22, 21, 97, 26],
["move", 6, 22, 97, 26],
["access", 17, 0, 99, 10],
["null", 18, 100, 13],
"while_start_103",
["length", 19, 6, 101, 20],
["is_int", 20, 17, 101, 20],
["jump_false", 20, "rel_ni_105", 101, 20],
"_nop_tc_1",
"_nop_tc_2",
["lt_int", 21, 17, 19, 101, 20],
["jump", "rel_done_107", 101, 20],
"rel_ni_105",
["is_num", 20, 17, 101, 20],
["jump_false", 20, "rel_nn_106", 101, 20],
"_nop_tc_3",
"_nop_tc_4",
["lt_float", 21, 17, 19, 101, 20],
["jump", "rel_done_107", 101, 20],
"rel_nn_106",
["is_text", 20, 17, 101, 20],
["jump_false", 20, "rel_err_108", 101, 20],
"_nop_tc_5",
["jump", "rel_err_108", 101, 20],
["lt_text", 21, 17, 19, 101, 20],
["jump", "rel_done_107", 101, 20],
"rel_err_108",
[
"access",
19,
{
"name": "log",
"kind": "name",
"make": "intrinsic"
},
101,
20
],
["access", 20, "error", 101, 20],
["access", 22, "cannot compare with '<': operands must be same type", 101, 20],
["array", 23, 0, 101, 20],
["push", 23, 22, 101, 20],
["frame", 22, 19, 2, 101, 20],
["null", 19, 101, 20],
["setarg", 22, 0, 19, 101, 20],
["setarg", 22, 1, 20, 101, 20],
["setarg", 22, 2, 23, 101, 20],
["invoke", 22, 19, 101, 20],
["disrupt", 101, 20],
"rel_done_107",
["jump_false", 21, "while_end_104", 101, 20],
["load_dynamic", 19, 6, 17, 102, 22],
["move", 18, 19, 102, 22],
["load_field", 19, 18, "name", 103, 21],
[
"access",
20,
{
"name": "core_path",
"kind": "name",
"make": "intrinsic"
},
103,
33
],
["access", 21, "/", 103, 45],
["is_text", 22, 20, 103, 45],
["jump_false", 22, "add_cn_110", 103, 45],
"_nop_tc_6",
"_nop_tc_7",
["concat", 23, 20, 21, 103, 45],
["jump", "add_done_109", 103, 45],
"add_cn_110",
["is_num", 22, 20, 103, 45],
["jump_false", 22, "add_err_111", 103, 45],
"_nop_tc_8",
["jump", "add_err_111", 103, 45],
["add", 23, 20, 21, 103, 45],
["jump", "add_done_109", 103, 45],
"add_err_111",
[
"access",
20,
{
"name": "log",
"kind": "name",
"make": "intrinsic"
},
103,
45
],
["access", 21, "error", 103, 45],
["access", 22, "cannot apply '+': operands must both be text or both be numbers", 103, 45],
["array", 24, 0, 103, 45],
["push", 24, 22, 103, 45],
["frame", 22, 20, 2, 103, 45],
["null", 20, 103, 45],
["setarg", 22, 0, 20, 103, 45],
["setarg", 22, 1, 21, 103, 45],
["setarg", 22, 2, 24, 103, 45],
["invoke", 22, 20, 103, 45],
["disrupt", 103, 45],
"add_done_109",
["load_field", 20, 18, "path", 103, 51],
["is_text", 21, 23, 103, 51],
["jump_false", 21, "add_cn_113", 103, 51],
["is_text", 22, 20, 103, 51],
["jump_false", 22, "add_cn_113", 103, 51],
["concat", 24, 23, 20, 103, 51],
["jump", "add_done_112", 103, 51],
"add_cn_113",
["is_num", 21, 23, 103, 51],
["jump_false", 21, "add_err_114", 103, 51],
["is_num", 22, 20, 103, 51],
["jump_false", 22, "add_err_114", 103, 51],
["add", 24, 23, 20, 103, 51],
["jump", "add_done_112", 103, 51],
"add_err_114",
[
"access",
20,
{
"name": "log",
"kind": "name",
"make": "intrinsic"
},
103,
51
],
["access", 21, "error", 103, 51],
["access", 22, "cannot apply '+': operands must both be text or both be numbers", 103, 51],
["array", 23, 0, 103, 51],
["push", 23, 22, 103, 51],
["frame", 22, 20, 2, 103, 51],
["null", 20, 103, 51],
["setarg", 22, 0, 20, 103, 51],
["setarg", 22, 1, 21, 103, 51],
["setarg", 22, 2, 23, 103, 51],
["invoke", 22, 20, 103, 51],
["disrupt", 103, 51],
"add_done_112",
["frame", 20, 8, 2, 103, 3],
["null", 21, 103, 3],
["setarg", 20, 0, 21, 103, 3],
["setarg", 20, 1, 19, 103, 3],
["setarg", 20, 2, 24, 103, 3],
["invoke", 20, 19, 103, 3],
["access", 19, 1, 104, 13],
["is_num", 20, 17, 104, 13],
["jump_false", 20, "num_err_115", 104, 13],
"_nop_tc_9",
"_nop_tc_10",
["add", 20, 17, 19, 104, 13],
["jump", "num_done_116", 104, 13],
"num_err_115",
[
"access",
19,
{
"name": "log",
"kind": "name",
"make": "intrinsic"
},
104,
13
],
["access", 21, "error", 104, 13],
["access", 22, "cannot apply '+': operands must be numbers", 104, 13],
["array", 23, 0, 104, 13],
["push", 23, 22, 104, 13],
["frame", 22, 19, 2, 104, 13],
["null", 19, 104, 13],
["setarg", 22, 0, 19, 104, 13],
["setarg", 22, 1, 21, 104, 13],
["setarg", 22, 2, 23, 104, 13],
["invoke", 22, 19, 104, 13],
["disrupt", 104, 13],
"num_done_116",
["move", 17, 20, 104, 13],
["jump", "while_start_103", 104, 13],
"while_end_104",
["access", 6, "bootstrap: cache seeded\n", 106, 7],
[
"access",
8,
{
"name": "print",
"kind": "name",
"make": "intrinsic"
},
106,
1
],
["frame", 17, 8, 1, 106, 1],
["null", 8, 106, 1],
["setarg", 17, 0, 8, 106, 1],
["setarg", 17, 1, 6, 106, 1],
["invoke", 17, 6, 106, 1],
["return", 6, 106, 1]
],
"nr_args": 0
},"functions":[{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -414,9 +93,10 @@
"_nop_ur_2"
],
"name": "use_embed",
"filename": "internal/bootstrap.cm",
"filename": ".cell/packages/core/internal/bootstrap.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -464,9 +144,10 @@
"_nop_ur_2"
],
"name": "content_hash",
"filename": "internal/bootstrap.cm",
"filename": ".cell/packages/core/internal/bootstrap.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -580,9 +261,10 @@
"_nop_ur_3"
],
"name": "cache_path",
"filename": "internal/bootstrap.cm",
"filename": ".cell/packages/core/internal/bootstrap.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -705,9 +387,10 @@
"_nop_ur_3"
],
"name": "ensure_build_dir",
"filename": "internal/bootstrap.cm",
"filename": ".cell/packages/core/internal/bootstrap.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -1053,9 +736,10 @@
"_nop_ur_2"
],
"name": "boot_load",
"filename": "internal/bootstrap.cm",
"filename": ".cell/packages/core/internal/bootstrap.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 13,
"nr_close_slots": 0,
@@ -1494,9 +1178,10 @@
"_nop_ur_2"
],
"name": "analyze",
"filename": "internal/bootstrap.cm",
"filename": ".cell/packages/core/internal/bootstrap.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 15,
"nr_close_slots": 0,
@@ -1681,6 +1366,335 @@
["return", 3, 86, 5]
],
"name": "compile_and_cache",
"filename": "internal/bootstrap.cm",
"filename": ".cell/packages/core/internal/bootstrap.cm",
"nr_args": 2
}]}
}
],
"main": {
"nr_slots": 25,
"nr_close_slots": 0,
"instructions": [
["function", 1, 0, 0, 0],
["move", 2, 1, 0, 0],
["function", 1, 1, 0, 0],
["move", 3, 1, 0, 0],
["function", 1, 2, 0, 0],
["move", 4, 1, 0, 0],
["function", 1, 3, 0, 0],
["move", 5, 1, 0, 0],
["function", 1, 4, 0, 0],
["move", 6, 1, 0, 0],
["function", 1, 5, 0, 0],
["move", 7, 1, 0, 0],
["function", 1, 6, 0, 0],
["move", 8, 1, 0, 0],
[
"access",
1,
{
"name": "os",
"kind": "name",
"make": "intrinsic"
},
4,
21
],
["load_field", 9, 1, "load_internal", 4, 21],
["move", 1, 9, 4, 21],
["access", 9, "internal_fd", 9, 20],
["frame", 10, 2, 1, 9, 10],
["null", 11, 9, 10],
["setarg", 10, 0, 11, 9, 10],
["setarg", 10, 1, 9, 9, 10],
["invoke", 10, 9, 9, 10],
["move", 10, 9, 9, 10],
["access", 9, "json", 10, 26],
["frame", 11, 2, 1, 10, 16],
["null", 12, 10, 16],
["setarg", 11, 0, 12, 10, 16],
["setarg", 11, 1, 9, 10, 16],
["invoke", 11, 9, 10, 16],
["move", 11, 9, 10, 16],
["access", 9, "crypto", 11, 24],
["frame", 12, 2, 1, 11, 14],
["null", 13, 11, 14],
["setarg", 12, 0, 13, 11, 14],
["setarg", 12, 1, 9, 11, 14],
["invoke", 12, 9, 11, 14],
["move", 12, 9, 11, 14],
["access", 9, "tokenize", 43, 30],
["frame", 13, 6, 1, 43, 20],
["null", 14, 43, 20],
["setarg", 13, 0, 14, 43, 20],
["setarg", 13, 1, 9, 43, 20],
["invoke", 13, 9, 43, 20],
["move", 13, 9, 43, 20],
["access", 9, "parse", 44, 27],
["frame", 14, 6, 1, 44, 17],
["null", 15, 44, 17],
["setarg", 14, 0, 15, 44, 17],
["setarg", 14, 1, 9, 44, 17],
["invoke", 14, 9, 44, 17],
["move", 14, 9, 44, 17],
["access", 9, "fold", 45, 26],
["frame", 15, 6, 1, 45, 16],
["null", 16, 45, 16],
["setarg", 15, 0, 16, 45, 16],
["setarg", 15, 1, 9, 45, 16],
["invoke", 15, 9, 45, 16],
["move", 15, 9, 45, 16],
["access", 9, "mcode", 46, 27],
["frame", 16, 6, 1, 46, 17],
["null", 17, 46, 17],
["setarg", 16, 0, 17, 46, 17],
["setarg", 16, 1, 9, 46, 17],
["invoke", 16, 9, 46, 17],
["move", 16, 9, 46, 17],
["access", 9, "streamline", 47, 32],
["frame", 17, 6, 1, 47, 22],
["null", 6, 47, 22],
["setarg", 17, 0, 6, 47, 22],
["setarg", 17, 1, 9, 47, 22],
["invoke", 17, 6, 47, 22],
["move", 9, 6, 47, 22],
["record", 6, 2],
["access", 17, "tokenize", 92, 10],
["store_field", 6, 17, "name", 92, 10],
["access", 17, "tokenize.cm", 92, 28],
["store_field", 6, 17, "path", 92, 28],
["record", 17, 2],
["access", 18, "parse", 93, 10],
["store_field", 17, 18, "name", 93, 10],
["access", 18, "parse.cm", 93, 25],
["store_field", 17, 18, "path", 93, 25],
["record", 18, 2],
["access", 19, "fold", 94, 10],
["store_field", 18, 19, "name", 94, 10],
["access", 19, "fold.cm", 94, 24],
["store_field", 18, 19, "path", 94, 24],
["record", 19, 2],
["access", 20, "mcode", 95, 10],
["store_field", 19, 20, "name", 95, 10],
["access", 20, "mcode.cm", 95, 25],
["store_field", 19, 20, "path", 95, 25],
["record", 20, 2],
["access", 21, "streamline", 96, 10],
["store_field", 20, 21, "name", 96, 10],
["access", 21, "streamline.cm", 96, 30],
["store_field", 20, 21, "path", 96, 30],
["record", 21, 2],
["access", 22, "engine", 97, 10],
["store_field", 21, 22, "name", 97, 10],
["access", 22, "internal/engine.cm", 97, 26],
["store_field", 21, 22, "path", 97, 26],
["array", 22, 6, 97, 26],
["push", 22, 6, 97, 26],
["push", 22, 17, 97, 26],
["push", 22, 18, 97, 26],
["push", 22, 19, 97, 26],
["push", 22, 20, 97, 26],
["push", 22, 21, 97, 26],
["move", 6, 22, 97, 26],
["access", 17, 0, 99, 10],
["null", 18, 100, 13],
"while_start_103",
["length", 19, 6, 101, 20],
["is_int", 20, 17, 101, 20],
["jump_false", 20, "rel_ni_105", 101, 20],
"_nop_tc_1",
"_nop_tc_2",
["lt_int", 21, 17, 19, 101, 20],
["jump", "rel_done_107", 101, 20],
"rel_ni_105",
["is_num", 20, 17, 101, 20],
["jump_false", 20, "rel_nn_106", 101, 20],
"_nop_tc_3",
"_nop_tc_4",
["lt_float", 21, 17, 19, 101, 20],
["jump", "rel_done_107", 101, 20],
"rel_nn_106",
["is_text", 20, 17, 101, 20],
["jump_false", 20, "rel_err_108", 101, 20],
"_nop_tc_5",
["jump", "rel_err_108", 101, 20],
["lt_text", 21, 17, 19, 101, 20],
["jump", "rel_done_107", 101, 20],
"rel_err_108",
[
"access",
19,
{
"name": "log",
"kind": "name",
"make": "intrinsic"
},
101,
20
],
["access", 20, "error", 101, 20],
["access", 22, "cannot compare with '<': operands must be same type", 101, 20],
["array", 23, 0, 101, 20],
["push", 23, 22, 101, 20],
["frame", 22, 19, 2, 101, 20],
["null", 19, 101, 20],
["setarg", 22, 0, 19, 101, 20],
["setarg", 22, 1, 20, 101, 20],
["setarg", 22, 2, 23, 101, 20],
["invoke", 22, 19, 101, 20],
["disrupt", 101, 20],
"rel_done_107",
["jump_false", 21, "while_end_104", 101, 20],
["load_dynamic", 19, 6, 17, 102, 22],
["move", 18, 19, 102, 22],
["load_field", 19, 18, "name", 103, 21],
[
"access",
20,
{
"name": "core_path",
"kind": "name",
"make": "intrinsic"
},
103,
33
],
["access", 21, "/", 103, 45],
["is_text", 22, 20, 103, 45],
["jump_false", 22, "add_cn_110", 103, 45],
"_nop_tc_6",
"_nop_tc_7",
["concat", 23, 20, 21, 103, 45],
["jump", "add_done_109", 103, 45],
"add_cn_110",
["is_num", 22, 20, 103, 45],
["jump_false", 22, "add_err_111", 103, 45],
"_nop_tc_8",
["jump", "add_err_111", 103, 45],
["add", 23, 20, 21, 103, 45],
["jump", "add_done_109", 103, 45],
"add_err_111",
[
"access",
20,
{
"name": "log",
"kind": "name",
"make": "intrinsic"
},
103,
45
],
["access", 21, "error", 103, 45],
["access", 22, "cannot apply '+': operands must both be text or both be numbers", 103, 45],
["array", 24, 0, 103, 45],
["push", 24, 22, 103, 45],
["frame", 22, 20, 2, 103, 45],
["null", 20, 103, 45],
["setarg", 22, 0, 20, 103, 45],
["setarg", 22, 1, 21, 103, 45],
["setarg", 22, 2, 24, 103, 45],
["invoke", 22, 20, 103, 45],
["disrupt", 103, 45],
"add_done_109",
["load_field", 20, 18, "path", 103, 51],
["is_text", 21, 23, 103, 51],
["jump_false", 21, "add_cn_113", 103, 51],
["is_text", 22, 20, 103, 51],
["jump_false", 22, "add_cn_113", 103, 51],
["concat", 24, 23, 20, 103, 51],
["jump", "add_done_112", 103, 51],
"add_cn_113",
["is_num", 21, 23, 103, 51],
["jump_false", 21, "add_err_114", 103, 51],
["is_num", 22, 20, 103, 51],
["jump_false", 22, "add_err_114", 103, 51],
["add", 24, 23, 20, 103, 51],
["jump", "add_done_112", 103, 51],
"add_err_114",
[
"access",
20,
{
"name": "log",
"kind": "name",
"make": "intrinsic"
},
103,
51
],
["access", 21, "error", 103, 51],
["access", 22, "cannot apply '+': operands must both be text or both be numbers", 103, 51],
["array", 23, 0, 103, 51],
["push", 23, 22, 103, 51],
["frame", 22, 20, 2, 103, 51],
["null", 20, 103, 51],
["setarg", 22, 0, 20, 103, 51],
["setarg", 22, 1, 21, 103, 51],
["setarg", 22, 2, 23, 103, 51],
["invoke", 22, 20, 103, 51],
["disrupt", 103, 51],
"add_done_112",
["frame", 20, 8, 2, 103, 3],
["null", 21, 103, 3],
["setarg", 20, 0, 21, 103, 3],
["setarg", 20, 1, 19, 103, 3],
["setarg", 20, 2, 24, 103, 3],
["invoke", 20, 19, 103, 3],
["access", 19, 1, 104, 13],
["is_num", 20, 17, 104, 13],
["jump_false", 20, "num_err_115", 104, 13],
"_nop_tc_9",
"_nop_tc_10",
["add", 20, 17, 19, 104, 13],
["jump", "num_done_116", 104, 13],
"num_err_115",
[
"access",
19,
{
"name": "log",
"kind": "name",
"make": "intrinsic"
},
104,
13
],
["access", 21, "error", 104, 13],
["access", 22, "cannot apply '+': operands must be numbers", 104, 13],
["array", 23, 0, 104, 13],
["push", 23, 22, 104, 13],
["frame", 22, 19, 2, 104, 13],
["null", 19, 104, 13],
["setarg", 22, 0, 19, 104, 13],
["setarg", 22, 1, 21, 104, 13],
["setarg", 22, 2, 23, 104, 13],
["invoke", 22, 19, 104, 13],
["disrupt", 104, 13],
"num_done_116",
["move", 17, 20, 104, 13],
["jump", "while_start_103", 104, 13],
"while_end_104",
["access", 6, "bootstrap: cache seeded\n", 106, 7],
[
"access",
8,
{
"name": "print",
"kind": "name",
"make": "intrinsic"
},
106,
1
],
["frame", 17, 8, 1, 106, 1],
["null", 8, 106, 1],
["setarg", 17, 0, 8, 106, 1],
["setarg", 17, 1, 6, 106, 1],
["invoke", 17, 6, 106, 1],
["return", 6, 106, 1]
],
"nr_args": 0
},
"filename": ".cell/packages/core/internal/bootstrap.cm",
"data": {}
}

View File

@@ -1,15 +1,7 @@
{"name":"fold.cm","main":{
"nr_slots": 3,
"nr_close_slots": 0,
"instructions": [
["function", 1, 28, 4, 12],
["move", 2, 1, 4, 12],
["return", 2, 1047, 8],
"_nop_ur_1",
"_nop_ur_2"
],
"nr_args": 0
},"functions":[{
{
"name": ".cell/packages/core/fold.cm",
"functions": [
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -283,9 +275,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -1731,9 +1724,10 @@
"_nop_ur_14"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 4,
"nr_close_slots": 0,
@@ -1753,9 +1747,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1793,9 +1788,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1816,9 +1812,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1853,9 +1850,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 5,
"nr_close_slots": 0,
@@ -1875,9 +1873,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -2319,9 +2318,10 @@
"_nop_ur_7"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -2463,9 +2463,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -2529,9 +2530,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -2609,9 +2611,10 @@
["return", 4, 176, 21]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -2689,9 +2692,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -2769,9 +2773,10 @@
["return", 4, 188, 21]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -2944,9 +2949,10 @@
["return", 2, 197, 34]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 16,
"nr_close_slots": 0,
@@ -4628,9 +4634,10 @@
["return", 3, 261, 15]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -5338,9 +5345,10 @@
["return", 2, 289, 17]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -6466,9 +6474,10 @@
["return", 3, 344, 15]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 5,
"nr_close_slots": 0,
@@ -6517,9 +6526,10 @@
["return", 1, 352, 5]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 24,
"nr_close_slots": 0,
@@ -13799,9 +13809,10 @@
"_nop_ur_48"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -15466,9 +15477,10 @@
"_nop_ur_19"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 13,
"nr_close_slots": 0,
@@ -16244,9 +16256,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -16615,9 +16628,10 @@
["return", 2, 739, 34]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 13,
"nr_close_slots": 0,
@@ -17048,9 +17062,10 @@
["return", 2, 803, 7]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -17818,9 +17833,10 @@
["return", 2, 835, 19]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 11,
"nr_close_slots": 0,
@@ -19005,9 +19021,10 @@
["return", 2, 889, 17]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -20104,9 +20121,10 @@
["return", 2, 935, 19]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -21430,9 +21448,10 @@
["return", 2, 996, 17]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 14,
"nr_close_slots": 0,
@@ -22212,9 +22231,10 @@
["return", 1, 1011, 5]
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 43,
"nr_close_slots": 0,
@@ -22711,6 +22731,22 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "fold.cm",
"filename": ".cell/packages/core/fold.cm",
"nr_args": 1
}]}
}
],
"main": {
"nr_slots": 3,
"nr_close_slots": 0,
"instructions": [
["function", 1, 28, 4, 12],
["move", 2, 1, 4, 12],
["return", 2, 1047, 8],
"_nop_ur_1",
"_nop_ur_2"
],
"nr_args": 0
},
"filename": ".cell/packages/core/fold.cm",
"data": {}
}

View File

@@ -1,32 +1,7 @@
{"name":"mcode.cm","main":{
"nr_slots": 4,
"nr_close_slots": 0,
"instructions": [
["access", 1, "json", 1, 16],
[
"access",
2,
{
"name": ".cell/packages/core/mcode.cm",
"functions": [
{
"name": "use",
"kind": "name",
"make": "intrinsic"
},
1,
12
],
["frame", 3, 2, 1, 1, 12],
["null", 2, 1, 12],
["setarg", 3, 0, 2, 1, 12],
["setarg", 3, 1, 1, 1, 12],
["invoke", 3, 1, 1, 12],
["function", 1, 59, 3, 13],
["move", 2, 1, 3, 13],
["return", 2, 2842, 8],
"_nop_ur_1",
"_nop_ur_2"
],
"nr_args": 0
},"functions":[{
"disruption_pc": 0,
"nr_slots": 3,
"nr_close_slots": 0,
@@ -71,9 +46,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 3,
"nr_close_slots": 0,
@@ -116,9 +92,10 @@
["return", 2, 118, 24]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -213,9 +190,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -259,9 +237,10 @@
["return", 4, 133, 75]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -405,9 +384,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -551,9 +531,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -743,9 +724,10 @@
"_nop_ur_4"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -881,9 +863,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -1058,9 +1041,10 @@
["return", 2, 189, 38]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1156,9 +1140,10 @@
["return", 2, 197, 26]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1196,9 +1181,10 @@
["return", 2, 201, 26]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 5,
"nr_close_slots": 0,
@@ -1215,9 +1201,10 @@
["return", 2, 205, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1235,9 +1222,10 @@
["return", 3, 209, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -1256,9 +1244,10 @@
["return", 4, 213, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -1278,9 +1267,10 @@
["return", 5, 217, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 4
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -1310,9 +1300,10 @@
["return", 3, 227, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1332,9 +1323,10 @@
["return", 3, 231, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1354,9 +1346,10 @@
["return", 3, 235, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1385,9 +1378,10 @@
["return", 3, 242, 7]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 5,
"nr_close_slots": 0,
@@ -1404,9 +1398,10 @@
["return", 2, 247, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 11,
"nr_close_slots": 0,
@@ -1572,9 +1567,10 @@
["return", 2, 268, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 5,
"nr_close_slots": 0,
@@ -1593,9 +1589,10 @@
["return", 2, 272, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -1614,9 +1611,10 @@
["return", 4, 276, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1719,9 +1717,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -1863,9 +1862,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1962,9 +1962,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 11,
"nr_close_slots": 0,
@@ -2262,9 +2263,10 @@
"_nop_ur_5"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -2497,9 +2499,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 15,
"nr_close_slots": 0,
@@ -2899,9 +2902,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 16,
"nr_close_slots": 0,
@@ -3349,9 +3353,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 20,
"nr_close_slots": 0,
@@ -3790,9 +3795,10 @@
"_nop_ur_5"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -3905,9 +3911,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -4377,9 +4384,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 4
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -4400,9 +4408,10 @@
["return", 4, 665, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -4423,9 +4432,10 @@
["return", 4, 669, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -4552,9 +4562,10 @@
["return", 5, 678, 7]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 4
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -4681,9 +4692,10 @@
["return", 5, 688, 7]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 4
},{
},
{
"disruption_pc": 0,
"nr_slots": 13,
"nr_close_slots": 0,
@@ -4869,9 +4881,10 @@
["return", 4, 706, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 18,
"nr_close_slots": 0,
@@ -5314,9 +5327,10 @@
["return", 5, 757, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 4
},{
},
{
"disruption_pc": 0,
"nr_slots": 18,
"nr_close_slots": 0,
@@ -5802,9 +5816,10 @@
["return", 5, 816, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 4
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -5989,9 +6004,10 @@
["return", 3, 833, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 13,
"nr_close_slots": 0,
@@ -6176,9 +6192,10 @@
["return", 4, 850, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -6592,9 +6609,10 @@
["return", 2, 876, 17]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 16,
"nr_close_slots": 0,
@@ -7359,9 +7377,10 @@
["return", 1, 914, 17]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -7505,9 +7524,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 20,
"nr_close_slots": 0,
@@ -7730,9 +7750,10 @@
["return", 4, 974, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 18,
"nr_close_slots": 0,
@@ -7961,9 +7982,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 20,
"nr_close_slots": 0,
@@ -8232,9 +8254,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 20,
"nr_close_slots": 0,
@@ -8503,9 +8526,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 20,
"nr_close_slots": 0,
@@ -8785,9 +8809,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 28,
"nr_close_slots": 0,
@@ -9643,9 +9668,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -9672,9 +9698,10 @@
["return", 3, 1255, 5]
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 15,
"nr_close_slots": 0,
@@ -10269,9 +10296,10 @@
"_nop_ur_6"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 27,
"nr_close_slots": 0,
@@ -11299,9 +11327,10 @@
"_nop_ur_5"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 26,
"nr_close_slots": 0,
@@ -12180,9 +12209,10 @@
"_nop_ur_6"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 82,
"nr_close_slots": 0,
@@ -20029,9 +20059,10 @@
"_nop_ur_45"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 65,
"nr_close_slots": 0,
@@ -24607,9 +24638,10 @@
"_nop_ur_22"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 38,
"nr_close_slots": 0,
@@ -26691,9 +26723,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 22,
"nr_close_slots": 0,
@@ -28290,9 +28323,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 104,
"nr_close_slots": 0,
@@ -28658,6 +28692,71 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "mcode.cm",
"nr_args": 1
}]}
"filename": ".cell/packages/core/mcode.cm",
"nr_args": 1,
"closure_written": {
"4": true,
"89": true,
"85": true,
"75": true,
"94": true,
"88": true,
"79": true,
"92": true,
"83": true,
"93": true,
"82": true,
"5": true,
"81": true,
"91": true,
"3": true,
"77": true,
"7": true,
"80": true,
"98": true,
"84": true,
"76": true,
"86": true,
"97": true,
"6": true,
"95": true,
"78": true,
"96": true,
"87": true,
"90": true,
"2": true
}
}
],
"main": {
"nr_slots": 4,
"nr_close_slots": 0,
"instructions": [
["access", 1, "json", 1, 16],
[
"access",
2,
{
"name": "use",
"kind": "name",
"make": "intrinsic"
},
1,
12
],
["frame", 3, 2, 1, 1, 12],
["null", 2, 1, 12],
["setarg", 3, 0, 2, 1, 12],
["setarg", 3, 1, 1, 1, 12],
["invoke", 3, 1, 1, 12],
["function", 1, 59, 3, 13],
["move", 2, 1, 3, 13],
["return", 2, 2842, 8],
"_nop_ur_1",
"_nop_ur_2"
],
"nr_args": 0
},
"filename": ".cell/packages/core/mcode.cm",
"data": {}
}

View File

@@ -1,15 +1,7 @@
{"name":"parse.cm","main":{
"nr_slots": 3,
"nr_close_slots": 0,
"instructions": [
["function", 1, 40, 1, 13],
["move", 2, 1, 1, 13],
["return", 2, 2178, 8],
"_nop_ur_1",
"_nop_ur_2"
],
"nr_args": 0
},"functions":[{
{
"name": ".cell/packages/core/parse.cm",
"functions": [
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -355,9 +347,10 @@
["return", 1, 42, 35]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 11,
"nr_close_slots": 0,
@@ -748,9 +741,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 3,
"nr_close_slots": 0,
@@ -766,9 +760,10 @@
["return", 1, 64, 5]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 5,
"nr_close_slots": 0,
@@ -786,9 +781,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 4,
"nr_close_slots": 0,
@@ -804,9 +800,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -999,9 +996,10 @@
["return", 3, 97, 15]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1053,9 +1051,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -1856,9 +1855,10 @@
"_nop_ur_4"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 48,
"nr_close_slots": 0,
@@ -8594,9 +8594,10 @@
"_nop_ur_17"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -9557,9 +9558,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -10137,9 +10139,10 @@
"_nop_ur_8"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 15,
"nr_close_slots": 0,
@@ -10419,9 +10422,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -10633,9 +10637,10 @@
"_nop_ur_4"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 14,
"nr_close_slots": 0,
@@ -11252,9 +11257,10 @@
"_nop_ur_4"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 4,
"nr_close_slots": 0,
@@ -11269,9 +11275,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -11413,9 +11420,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -11631,9 +11639,10 @@
["return", 1, 808, 5]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -12285,9 +12294,10 @@
["return", 1, 820, 7]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -12537,9 +12547,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 18,
"nr_close_slots": 0,
@@ -13873,9 +13884,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 19,
"nr_close_slots": 0,
@@ -15014,9 +15026,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 34,
"nr_close_slots": 0,
@@ -20648,9 +20661,10 @@
"_nop_ur_27"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -20932,9 +20946,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -21141,9 +21156,10 @@
["return", 3, 1427, 22]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -21246,9 +21262,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -21338,9 +21355,10 @@
["return", 4, 1449, 16]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 3
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -21686,9 +21704,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 5,
"nr_close_slots": 0,
@@ -21707,9 +21726,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -21779,9 +21799,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -21850,9 +21871,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -21952,9 +21974,10 @@
["return", 2, 1501, 58]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -22006,9 +22029,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -22485,9 +22509,10 @@
"_nop_ur_11"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -22516,9 +22541,10 @@
["return", 3, 1539, 5]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -22749,9 +22775,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 15,
"nr_close_slots": 0,
@@ -23463,9 +23490,10 @@
["return", 3, 1604, 15]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 13,
"nr_close_slots": 0,
@@ -25529,9 +25557,10 @@
["return", 3, 1673, 15]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 22,
"nr_close_slots": 0,
@@ -29382,9 +29411,10 @@
["return", 3, 1865, 14]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 25,
"nr_close_slots": 0,
@@ -33313,9 +33343,10 @@
["return", 3, 2103, 14]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -33857,9 +33888,10 @@
["return", 2, 2146, 7]
],
"name": "<anonymous>",
"filename": "parse.cm",
"filename": ".cell/packages/core/parse.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 71,
"nr_close_slots": 0,
@@ -34254,30 +34286,30 @@
["eq_int", 64, 14, 45, 2157, 22],
["jump", "eq_done_4361", 2157, 22],
"eq_ni_4362",
["is_num", 68, 14, 2157, 22],
["jump_false", 68, "eq_nn_4363", 2157, 22],
"_nop_tc_5",
"_nop_tc_6",
"_nop_tc_7",
"_nop_tc_8",
["eq_float", 64, 14, 45, 2157, 22],
["jump", "eq_done_4361", 2157, 22],
"eq_nn_4363",
"_nop_tc_9",
["jump", "eq_nt_4364", 2157, 22],
"_nop_tc_10",
["is_text", 68, 14, 2157, 22],
["jump_false", 68, "eq_nt_4364", 2157, 22],
"_nop_tc_7",
["jump", "eq_nt_4364", 2157, 22],
["eq_text", 64, 14, 45, 2157, 22],
["jump", "eq_done_4361", 2157, 22],
"eq_nt_4364",
"_nop_tc_11",
["jump", "eq_nnl_4365", 2157, 22],
"_nop_tc_12",
["is_null", 68, 14, 2157, 22],
["jump_false", 68, "eq_nnl_4365", 2157, 22],
"_nop_tc_8",
["jump", "eq_nnl_4365", 2157, 22],
["true", 64, 2157, 22],
["jump", "eq_done_4361", 2157, 22],
"eq_nnl_4365",
"_nop_tc_13",
["jump", "eq_nb_4366", 2157, 22],
"_nop_tc_14",
["is_bool", 68, 14, 2157, 22],
["jump_false", 68, "eq_nb_4366", 2157, 22],
"_nop_tc_9",
["jump", "eq_nb_4366", 2157, 22],
["eq_bool", 64, 14, 45, 2157, 22],
["jump", "eq_done_4361", 2157, 22],
@@ -34296,23 +34328,23 @@
["access", 45, 0, 2162, 13],
["length", 64, 18, 2163, 14],
["access", 67, 0, 2163, 24],
"_nop_tc_15",
"_nop_tc_16",
"_nop_tc_17",
"_nop_tc_18",
"_nop_tc_10",
"_nop_tc_11",
"_nop_tc_12",
"_nop_tc_13",
["gt_int", 68, 64, 67, 2163, 24],
["jump", "rel_done_4371", 2163, 24],
"rel_ni_4369",
"_nop_tc_19",
"_nop_tc_20",
"_nop_tc_21",
"_nop_tc_22",
"_nop_tc_14",
"_nop_tc_15",
"_nop_tc_16",
"_nop_tc_17",
["gt_float", 68, 64, 67, 2163, 24],
["jump", "rel_done_4371", 2163, 24],
"rel_nn_4370",
"_nop_tc_23",
"_nop_tc_18",
["jump", "rel_err_4372", 2163, 24],
"_nop_tc_24",
"_nop_tc_19",
["jump", "rel_err_4372", 2163, 24],
["gt_text", 68, 64, 67, 2163, 24],
["jump", "rel_done_4371", 2163, 24],
@@ -34352,35 +34384,35 @@
"ne_ni_4377",
["is_int", 69, 64, 2164, 23],
["jump_false", 69, "ne_nn_4378", 2164, 23],
"_nop_tc_25",
"_nop_tc_20",
["jump", "ne_nn_4378", 2164, 23],
["ne_int", 68, 64, 67, 2164, 23],
["jump", "ne_done_4375", 2164, 23],
"ne_nn_4378",
["is_num", 69, 64, 2164, 23],
["jump_false", 69, "ne_nt_4379", 2164, 23],
"_nop_tc_26",
"_nop_tc_21",
["jump", "ne_nt_4379", 2164, 23],
["ne_float", 68, 64, 67, 2164, 23],
["jump", "ne_done_4375", 2164, 23],
"ne_nt_4379",
["is_text", 69, 64, 2164, 23],
["jump_false", 69, "ne_nnl_4380", 2164, 23],
"_nop_tc_27",
"_nop_tc_22",
["jump", "ne_nnl_4380", 2164, 23],
["ne_text", 68, 64, 67, 2164, 23],
["jump", "ne_done_4375", 2164, 23],
"ne_nnl_4380",
["is_null", 69, 64, 2164, 23],
["jump_false", 69, "ne_nb_4381", 2164, 23],
"_nop_tc_28",
"_nop_tc_29",
"_nop_tc_23",
"_nop_tc_24",
["false", 68, 2164, 23],
["jump", "ne_done_4375", 2164, 23],
"ne_nb_4381",
["is_bool", 69, 64, 2164, 23],
["jump_false", 69, "ne_mis_4382", 2164, 23],
"_nop_tc_30",
"_nop_tc_25",
["jump", "ne_mis_4382", 2164, 23],
["ne_bool", 68, 64, 67, 2164, 23],
["jump", "ne_done_4375", 2164, 23],
@@ -34393,21 +34425,21 @@
["length", 64, 18, 2166, 27],
["is_int", 67, 45, 2166, 27],
["jump_false", 67, "rel_ni_4385", 2166, 27],
"_nop_tc_31",
"_nop_tc_32",
"_nop_tc_26",
"_nop_tc_27",
["lt_int", 68, 45, 64, 2166, 27],
["jump", "rel_done_4387", 2166, 27],
"rel_ni_4385",
["is_num", 67, 45, 2166, 27],
["jump_false", 67, "rel_nn_4386", 2166, 27],
"_nop_tc_33",
"_nop_tc_34",
"_nop_tc_28",
"_nop_tc_29",
["lt_float", 68, 45, 64, 2166, 27],
["jump", "rel_done_4387", 2166, 27],
"rel_nn_4386",
["is_text", 67, 45, 2166, 27],
["jump_false", 67, "rel_err_4388", 2166, 27],
"_nop_tc_35",
"_nop_tc_30",
["jump", "rel_err_4388", 2166, 27],
["lt_text", 68, 45, 64, 2166, 27],
["jump", "rel_done_4387", 2166, 27],
@@ -34469,8 +34501,8 @@
["access", 64, 1, 2168, 21],
["is_num", 67, 45, 2168, 21],
["jump_false", 67, "num_err_4391", 2168, 21],
"_nop_tc_36",
"_nop_tc_37",
"_nop_tc_31",
"_nop_tc_32",
["add", 67, 45, 64, 2168, 21],
["jump", "num_done_4392", 2168, 21],
"num_err_4391",
@@ -34512,6 +34544,35 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "parse.cm",
"nr_args": 4
}]}
"filename": ".cell/packages/core/parse.cm",
"nr_args": 4,
"closure_written": {
"49": true,
"21": true,
"24": true,
"6": true,
"50": true,
"7": true,
"26": true,
"68": true,
"27": true,
"19": true,
"8": true
}
}
],
"main": {
"nr_slots": 3,
"nr_close_slots": 0,
"instructions": [
["function", 1, 40, 1, 13],
["move", 2, 1, 1, 13],
["return", 2, 2178, 8],
"_nop_ur_1",
"_nop_ur_2"
],
"nr_args": 0
},
"filename": ".cell/packages/core/parse.cm",
"data": {}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,7 @@
{"name":"tokenize.cm","main":{
"nr_slots": 3,
"nr_close_slots": 0,
"instructions": [
["function", 1, 20, 1, 16],
["move", 2, 1, 1, 16],
["return", 2, 454, 8],
"_nop_ur_1",
"_nop_ur_2"
],
"nr_args": 0
},"functions":[{
{
"name": ".cell/packages/core/tokenize.cm",
"functions": [
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -74,9 +66,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -178,9 +171,10 @@
"_nop_ur_3"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 7,
"nr_close_slots": 0,
@@ -339,9 +333,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -445,9 +440,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -747,9 +743,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 8,
"nr_close_slots": 0,
@@ -1308,9 +1305,10 @@
"_nop_ur_5"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -1564,9 +1562,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 9,
"nr_close_slots": 0,
@@ -1768,9 +1767,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 5,
"nr_close_slots": 0,
@@ -1796,9 +1796,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -1902,9 +1903,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -2096,9 +2098,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 6,
"nr_close_slots": 0,
@@ -2127,9 +2130,10 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 14,
"nr_close_slots": 0,
@@ -2816,9 +2820,10 @@
["return", 2, 124, 14]
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 17,
"nr_close_slots": 0,
@@ -4531,9 +4536,10 @@
["return", 1, 179, 14]
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 11,
"nr_close_slots": 0,
@@ -6300,9 +6306,10 @@
["return", 1, 214, 27]
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 11,
"nr_close_slots": 0,
@@ -6528,9 +6535,10 @@
["return", 1, 238, 16]
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 10,
"nr_close_slots": 0,
@@ -6985,9 +6993,10 @@
["return", 1, 265, 14]
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -7126,9 +7135,10 @@
["return", 3, 278, 31]
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 2
},{
},
{
"disruption_pc": 0,
"nr_slots": 11,
"nr_close_slots": 0,
@@ -7289,9 +7299,10 @@
["return", 2, 292, 14]
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 1
},{
},
{
"disruption_pc": 0,
"nr_slots": 12,
"nr_close_slots": 0,
@@ -12363,9 +12374,10 @@
"_nop_ur_77"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 0
},{
},
{
"disruption_pc": 0,
"nr_slots": 35,
"nr_close_slots": 0,
@@ -12494,25 +12506,25 @@
["function", 7, 19, 296, 22],
["move", 30, 7, 296, 22],
"while_start_1420",
"_nop_tc_1",
"_nop_tc_2",
["is_int", 7, 4, 444, 16],
["is_int", 7, 3, 444, 16],
["jump_false", 7, "rel_ni_1422", 444, 16],
["lt_int", 31, 3, 4, 444, 16],
["is_int", 31, 4, 444, 16],
["jump_false", 31, "rel_ni_1422", 444, 16],
["lt_int", 32, 3, 4, 444, 16],
["jump", "rel_done_1424", 444, 16],
"rel_ni_1422",
"_nop_tc_3",
"_nop_tc_4",
["is_num", 7, 4, 444, 16],
["is_num", 7, 3, 444, 16],
["jump_false", 7, "rel_nn_1423", 444, 16],
["lt_float", 31, 3, 4, 444, 16],
["is_num", 31, 4, 444, 16],
["jump_false", 31, "rel_nn_1423", 444, 16],
["lt_float", 32, 3, 4, 444, 16],
["jump", "rel_done_1424", 444, 16],
"rel_nn_1423",
"_nop_tc_5",
["jump", "rel_err_1425", 444, 16],
["is_text", 7, 4, 444, 16],
["is_text", 7, 3, 444, 16],
["jump_false", 7, "rel_err_1425", 444, 16],
["lt_text", 31, 3, 4, 444, 16],
["is_text", 31, 4, 444, 16],
["jump_false", 31, "rel_err_1425", 444, 16],
["lt_text", 32, 3, 4, 444, 16],
["jump", "rel_done_1424", 444, 16],
"rel_err_1425",
[
@@ -12526,19 +12538,19 @@
444,
16
],
["access", 32, "error", 444, 16],
["access", 31, "error", 444, 16],
["access", 33, "cannot compare with '<': operands must be same type", 444, 16],
["array", 34, 0, 444, 16],
["push", 34, 33, 444, 16],
["frame", 33, 7, 2, 444, 16],
["null", 7, 444, 16],
["setarg", 33, 0, 7, 444, 16],
["setarg", 33, 1, 32, 444, 16],
["setarg", 33, 1, 31, 444, 16],
["setarg", 33, 2, 34, 444, 16],
["invoke", 33, 7, 444, 16],
["disrupt", 444, 16],
"rel_done_1424",
["jump_false", 31, "while_end_1421", 444, 16],
["jump_false", 32, "while_end_1421", 444, 16],
["frame", 7, 30, 0, 445, 5],
["null", 31, 445, 5],
["setarg", 7, 0, 31, 445, 5],
@@ -12589,6 +12601,27 @@
"_nop_ur_2"
],
"name": "<anonymous>",
"filename": "tokenize.cm",
"nr_args": 2
}]}
"filename": ".cell/packages/core/tokenize.cm",
"nr_args": 2,
"closure_written": {
"4": true,
"26": true,
"19": true
}
}
],
"main": {
"nr_slots": 3,
"nr_close_slots": 0,
"instructions": [
["function", 1, 20, 1, 16],
["move", 2, 1, 1, 16],
["return", 2, 454, 8],
"_nop_ur_1",
"_nop_ur_2"
],
"nr_args": 0
},
"filename": ".cell/packages/core/tokenize.cm",
"data": {}
}

View File

@@ -62,12 +62,13 @@ See [Mcode IR](mcode.md) for the instruction format and complete instruction ref
Optimizes the Mcode IR through a series of independent passes. Operates per-function:
1. **Backward type inference**: Infers parameter types from how they are used in typed operators (`add_int`, `store_index`, `load_field`, `push`, `pop`, etc.). Immutable `def` parameters keep their inferred type across label join points.
2. **Type-check elimination**: When a slot's type is known, eliminates `is_<type>` + conditional jump pairs. Narrows `load_dynamic`/`store_dynamic` to typed variants.
3. **Algebraic simplification**: Rewrites identity operations (add 0, multiply 1, divide 1) and folds same-slot comparisons.
4. **Boolean simplification**: Fuses `not` + conditional jump into a single jump with inverted condition.
5. **Move elimination**: Removes self-moves (`move a, a`).
6. **Unreachable elimination**: Nops dead code after `return` until the next label.
7. **Dead jump elimination**: Removes jumps to the immediately following label.
2. **Write-type invariance**: Determines which local slots have a consistent write type across all instructions. Slots written by child closures (via `put`) are excluded (forced to unknown).
3. **Type-check elimination**: When a slot's type is known, eliminates `is_<type>` + conditional jump pairs. Narrows `load_dynamic`/`store_dynamic` to typed variants.
4. **Algebraic simplification**: Rewrites identity operations (add 0, multiply 1, divide 1) and folds same-slot comparisons.
5. **Boolean simplification**: Fuses `not` + conditional jump into a single jump with inverted condition.
6. **Move elimination**: Removes self-moves (`move a, a`).
7. **Unreachable elimination**: Nops dead code after `return` until the next label.
8. **Dead jump elimination**: Removes jumps to the immediately following label.
See [Streamline Optimizer](streamline.md) for detailed pass descriptions.

View File

@@ -95,7 +95,9 @@ Write type mapping:
| `move`, `load_field`, `load_index`, `load_dynamic`, `pop`, `get` | T_UNKNOWN |
| `invoke`, `tail_invoke` | T_UNKNOWN |
The result is a map of slot→type for slots where all writes agree on a single known type. Parameter slots (1..nr_args) and slot 0 are excluded.
Before filtering, a pre-pass (`mark_closure_writes`) scans all inner functions for `put` instructions (closure variable writes). For each `put`, the pass traverses the parent chain to find the target ancestor function and marks the written slot as `closure_written`. Slots marked as closure-written are forced to T_UNKNOWN regardless of what the local write analysis infers, because the actual runtime write happens in a child function and can produce any type.
The result is a map of slot→type for slots where all writes agree on a single known type. Parameter slots (1..nr_args) and slot 0 are excluded. Closure-written slots are excluded (forced to unknown).
Common patterns this enables:

View File

@@ -78,6 +78,7 @@ function load_pipeline_module(name, env) {
var boot_par = null
var boot_fld = null
var boot_mc = null
var boot_sl = null
var tok_result = null
var ast = null
var compiled = null
@@ -105,6 +106,8 @@ function load_pipeline_module(name, env) {
}
ast = boot_fld(ast)
compiled = boot_mc(ast)
boot_sl = boot_load("streamline")
compiled = boot_sl(compiled)
mcode_json = json.encode(compiled)
mach_blob = mach_compile_mcode_bin(name, mcode_json)
if (cached) {

View File

@@ -54,6 +54,7 @@ var compiled = null
var optimized = null
var mcode_json = null
var out_path = null
var build_dir = null
// Regenerate pipeline module seeds
for (i = 0; i < length(pipeline_modules); i++) {
@@ -103,7 +104,7 @@ if (fd.is_file(bootstrap_path)) {
print('\nRegenerated ' + text(generated) + ' seed(s)')
if (clean) {
var build_dir = shop.get_build_dir()
build_dir = shop.get_build_dir()
if (fd.is_dir(build_dir)) {
print('Clearing build cache: ' + build_dir)
os.system('rm -rf "' + build_dir + '"')

View File

@@ -336,6 +336,7 @@ var streamline = function(ir, log) {
var slot = 0
var typ = null
var rule = null
var cw_keys = null
if (instructions == null) {
return array(func.nr_slots)
@@ -362,6 +363,19 @@ var streamline = function(ir, log) {
i = i + 1
}
// Closure-written slots can have any type at runtime — mark unknown
if (func.closure_written != null) {
cw_keys = array(func.closure_written)
k = 0
while (k < length(cw_keys)) {
slot = number(cw_keys[k])
if (slot >= 0 && slot < length(write_types)) {
write_types[slot] = T_UNKNOWN
}
k = k + 1
}
}
// Filter to only slots with known (non-unknown) types
k = 0
while (k < length(write_types)) {
@@ -1475,6 +1489,100 @@ var streamline = function(ir, log) {
return null
}
// =========================================================
// Pre-pass: mark closure-written slots
// Scans child functions for 'put' instructions and annotates
// the target ancestor func with closure_written[slot] = true.
// =========================================================
var mark_closure_writes = function(ir) {
var functions = ir.functions != null ? ir.functions : []
var fc = length(functions)
var parent_of = array(fc, -1)
var instrs = null
var instr = null
var fi = 0
var i = 0
var j = 0
var level = 0
var anc = 0
var slot = 0
var target = null
if (fc == 0) {
return null
}
// Build parent_of map
if (ir.main != null && ir.main.instructions != null) {
instrs = ir.main.instructions
i = 0
while (i < length(instrs)) {
instr = instrs[i]
if (is_array(instr) && instr[0] == "function") {
if (instr[2] >= 0 && instr[2] < fc) {
parent_of[instr[2]] = fc
}
}
i = i + 1
}
}
fi = 0
while (fi < fc) {
instrs = functions[fi].instructions
if (instrs != null) {
i = 0
while (i < length(instrs)) {
instr = instrs[i]
if (is_array(instr) && instr[0] == "function") {
if (instr[2] >= 0 && instr[2] < fc) {
parent_of[instr[2]] = fi
}
}
i = i + 1
}
}
fi = fi + 1
}
// Scan for 'put' instructions and mark ancestor slots
fi = 0
while (fi < fc) {
instrs = functions[fi].instructions
if (instrs != null) {
i = 0
while (i < length(instrs)) {
instr = instrs[i]
if (is_array(instr) && instr[0] == "put") {
slot = instr[2]
level = instr[3]
anc = fi
j = 0
while (j < level && anc >= 0) {
anc = parent_of[anc]
j = j + 1
}
if (anc >= 0) {
if (anc == fc) {
target = ir.main
} else {
target = functions[anc]
}
if (target != null) {
if (target.closure_written == null) {
target.closure_written = {}
}
target.closure_written[text(slot)] = true
}
}
}
i = i + 1
}
}
fi = fi + 1
}
return null
}
// =========================================================
// Compose all passes
// =========================================================
@@ -1530,6 +1638,12 @@ var streamline = function(ir, log) {
return null
}
// Pre-pass: mark slots written by child closures via 'put' instructions.
// Without this, infer_slot_write_types would assume those slots keep their
// initial type (e.g. T_NULL from 'var x = null'), causing the type-check
// eliminator to mis-optimize comparisons on closure-written variables.
mark_closure_writes(ir)
// Process main function
if (ir.main != null) {
optimize_function(ir.main, log)

View File

@@ -4284,6 +4284,32 @@ run("closure set and get", function() {
assert_eq(o.get(), 42, "overwrite")
})
run("closure write heap values visible to outer scope", function() {
var a = null
var b = null
var c = null
var d = null
var e = null
var f1 = function() { a = 42 }
var f2 = function() { b = true }
var f3 = function() { c = "hello" }
var f4 = function() { d = {x: 1} }
var f5 = function() { e = [1, 2] }
f1()
f2()
f3()
f4()
f5()
assert_eq(a, 42, "closure write number")
assert_eq(b, true, "closure write boolean")
assert_eq(c != null, true, "closure write text not null")
assert_eq(c, "hello", "closure write text value")
assert_eq(d != null, true, "closure write object not null")
assert_eq(d.x, 1, "closure write object property")
assert_eq(e != null, true, "closure write array not null")
assert_eq(e[0], 1, "closure write array element")
})
// ============================================================================
// STRING COMPARISON OPERATORS
// ============================================================================