streamline mcode

This commit is contained in:
2026-02-12 09:43:13 -06:00
parent 68fb440502
commit 900db912a5
22 changed files with 1475 additions and 93 deletions

View File

@@ -1428,6 +1428,52 @@ var mcode = function(ast) {
return d
}
// Tier 1 intrinsic inlining: emit direct opcodes instead of frame/invoke
if (callee_kind == "name" && callee.intrinsic == true) {
fname = callee.name
nargs = args_list != null ? length(args_list) : 0
// 1-arg type check intrinsics → direct opcode
if (nargs == 1) {
if (fname == "is_array" || fname == "is_function" ||
fname == "is_object" || fname == "is_stone" ||
fname == "is_integer" || fname == "is_text" ||
fname == "is_number" || fname == "is_logical" ||
fname == "is_null" || fname == "length") {
a0 = gen_expr(args_list[0], -1)
d = alloc_slot()
if (fname == "is_array") {
emit_2("is_array", d, a0)
} else if (fname == "is_function") {
emit_2("is_func", d, a0)
} else if (fname == "is_object") {
emit_2("is_record", d, a0)
} else if (fname == "is_stone") {
emit_2("is_stone", d, a0)
} else if (fname == "is_integer") {
emit_2("is_int", d, a0)
} else if (fname == "is_text") {
emit_2("is_text", d, a0)
} else if (fname == "is_number") {
emit_2("is_num", d, a0)
} else if (fname == "is_logical") {
emit_2("is_bool", d, a0)
} else if (fname == "is_null") {
emit_2("is_null", d, a0)
} else if (fname == "length") {
emit_2("length", d, a0)
}
return d
}
}
// 2-arg push: push(arr, val) → direct opcode
if (nargs == 2 && fname == "push") {
a0 = gen_expr(args_list[0], -1)
a1 = gen_expr(args_list[1], -1)
emit_2("push", a0, a1)
return a1
}
}
// Collect arg slots
arg_slots = []
_i = 0