jseption 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +30 -6
  2. package/dist/atoms.d.ts +1 -0
  3. package/dist/atoms.js +2 -1
  4. package/dist/atoms.js.map +1 -1
  5. package/dist/builtins/base64.d.ts +14 -0
  6. package/dist/builtins/base64.js +219 -0
  7. package/dist/builtins/base64.js.map +1 -0
  8. package/dist/builtins/bigint.js +3 -3
  9. package/dist/builtins/bigint.js.map +1 -1
  10. package/dist/builtins/date.d.ts +1 -0
  11. package/dist/builtins/date.js +26 -12
  12. package/dist/builtins/date.js.map +1 -1
  13. package/dist/builtins/error.js +9 -0
  14. package/dist/builtins/error.js.map +1 -1
  15. package/dist/builtins/float16.d.ts +3 -0
  16. package/dist/builtins/float16.js +69 -0
  17. package/dist/builtins/float16.js.map +1 -0
  18. package/dist/builtins/function.js +2 -2
  19. package/dist/builtins/index.js +9 -6
  20. package/dist/builtins/index.js.map +1 -1
  21. package/dist/builtins/iterator.d.ts +2 -0
  22. package/dist/builtins/iterator.js +624 -0
  23. package/dist/builtins/iterator.js.map +1 -0
  24. package/dist/builtins/json.d.ts +13 -1
  25. package/dist/builtins/json.js +283 -211
  26. package/dist/builtins/json.js.map +1 -1
  27. package/dist/builtins/mapset.js +365 -6
  28. package/dist/builtins/mapset.js.map +1 -1
  29. package/dist/builtins/math.js +203 -3
  30. package/dist/builtins/math.js.map +1 -1
  31. package/dist/builtins/native.js +6 -6
  32. package/dist/builtins/object.js +9 -2
  33. package/dist/builtins/object.js.map +1 -1
  34. package/dist/builtins/promise.js +31 -11
  35. package/dist/builtins/promise.js.map +1 -1
  36. package/dist/builtins/proxy.js +2 -2
  37. package/dist/builtins/reflect.js +6 -2
  38. package/dist/builtins/reflect.js.map +1 -1
  39. package/dist/builtins/regexp.js +74 -3
  40. package/dist/builtins/regexp.js.map +1 -1
  41. package/dist/builtins/string.js +1 -1
  42. package/dist/builtins/symbol.js +1 -1
  43. package/dist/builtins/symbol.js.map +1 -1
  44. package/dist/builtins/typedarray.d.ts +4 -1
  45. package/dist/builtins/typedarray.js +325 -37
  46. package/dist/builtins/typedarray.js.map +1 -1
  47. package/dist/builtins/weakref.js +7 -7
  48. package/dist/embed.d.ts +5 -0
  49. package/dist/embed.js +36 -11
  50. package/dist/embed.js.map +1 -1
  51. package/dist/interpreter.js +15 -14
  52. package/dist/interpreter.js.map +1 -1
  53. package/dist/jit.d.ts +1 -0
  54. package/dist/jit.js +51 -13
  55. package/dist/jit.js.map +1 -1
  56. package/dist/jit_hook.d.ts +1 -0
  57. package/dist/jit_hook.js.map +1 -1
  58. package/dist/jit_runtime.d.ts +1 -1
  59. package/dist/jit_runtime.js +6 -6
  60. package/dist/jit_runtime.js.map +1 -1
  61. package/dist/jit_stack.d.ts +1 -0
  62. package/dist/jit_stack.js +2 -1
  63. package/dist/jit_stack.js.map +1 -1
  64. package/dist/jseption.d.ts +2 -0
  65. package/dist/jseption.js +1 -0
  66. package/dist/jseption.js.map +1 -1
  67. package/dist/membrane.d.ts +6 -0
  68. package/dist/membrane.js +7 -3
  69. package/dist/membrane.js.map +1 -1
  70. package/dist/module.js +5 -3
  71. package/dist/module.js.map +1 -1
  72. package/dist/parser.js +26 -9
  73. package/dist/parser.js.map +1 -1
  74. package/dist/print.d.ts +12 -0
  75. package/dist/print.js +494 -0
  76. package/dist/print.js.map +1 -0
  77. package/dist/qjs.js +13 -10
  78. package/dist/qjs.js.map +1 -1
  79. package/dist/quickjs.d.ts +8 -0
  80. package/dist/quickjs.js +132 -53
  81. package/dist/quickjs.js.map +1 -1
  82. package/dist/std.d.ts +4 -2
  83. package/dist/std.js +42 -8
  84. package/dist/std.js.map +1 -1
  85. package/dist/values.d.ts +31 -27
  86. package/dist/values.js.map +1 -1
  87. package/dist/version.d.ts +1 -1
  88. package/dist/version.js +1 -1
  89. package/dist/version.js.map +1 -1
  90. package/package.json +1 -1
package/dist/jit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jit.js","sourceRoot":"","sources":["../src/jit.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Compiled tier: translates a JSFunctionBytecode (final bytecode, after\n * resolve_labels) into host JavaScript source and evaluates it once with\n * `new Function`. See docs/HOST_VALUES.md (\"Compiled tier\").\n *\n * Pipeline:\n * 1. decode - split the byte code into instructions\n * 2. analyze - abstract interpretation of the operand stack: the\n * depth and the *kind* of every slot (value, catch\n * offset, for-of iterator marker, gosub return address)\n * are static at every pc\n * 3. blocks - basic blocks + control flow graph; blocks are also\n * split where the set of active exception handlers\n * changes, so every block belongs to exactly one\n * try-region\n * 4. emit blocks - stack slots become locals ($s<depth>); each block is\n * translated with a pending-expression model so that\n * `a[i] = b[i] * 2` becomes one host statement\n * 5. reloop - a relooper turns the CFG into labeled blocks/loops\n * and nests try-regions as host try/catch statements;\n * a `for(;;) switch` fallback exists for debugging\n * (JSEPTION_JIT_CFG=switch)\n *\n * Calling convention of compiled functions (and of everything the runtime\n * adapter exposes): `fn($this, $new_target, ...args)`. `this` and\n * new.target are explicit parameters so that guest-to-guest calls are\n * plain host calls (no Function.prototype.call / Reflect.apply, which are\n * 30-50x slower and would need the guest-visible `call` property).\n * A constructor call passes `$this = undefined` and a defined\n * `$new_target`; the callee creates `this` and returns the object.\n *\n * Generated code never contains free identifiers other than the `$`-prefixed\n * names created here. Guest globals, closures, classes, regexps, spread,\n * iteration and every operation on a primitive base go through the `$RT`\n * object (src/jit_runtime.ts).\n */\nimport { JSContext, JSFunctionBytecode, JS_AtomGetStr, __JS_AtomIsTaggedInt, __JS_AtomToUInt32 } from './quickjs.ts';\nimport { JSFunctionKind, JS_MODE_STRICT, JSFunctionData, JS_CALL_FLAG_CONSTRUCTOR, JSVarRef, new_var_ref_cell, JS_IsCatchOffset, type JSValue } from './values.ts';\nimport { OP, OpFmt, short_opcode_info, get_u8, get_i8, get_u16, get_i16, get_u32, get_i32, OPSpecialObject,\n JS_DEFINE_CLASS_HAS_HERITAGE } from './opcodes.ts';\nimport { jit_hooks, JIT_NOT_COMPILED } from './jit_hook.ts';\nimport { jit_set_osr_threshold } from './interpreter.ts';\nimport { make_jit_runtime, jit_runtime_call_compiled, jit_runtime_call_priv, jit_runtime_make_wrapper, jit_runtime_factory_args, JIT_FACTORY_PARAMS } from './jit_runtime.ts';\nimport { js_direct, JS_GetFunctionData, js_host_exception_to_guest } from './quickjs.ts';\nimport { jit_stack_alloc_id, jit_stack_register, jit_stack_install, type CompiledEntry } from './jit_stack.ts';\n\n/* ---------------------------------------------------------------------\n Configuration\n --------------------------------------------------------------------- */\n\nexport interface JitConfig {\n /* off: never compile; hot: compile after `threshold` calls; always: compile on first call */\n mode: 'off' | 'hot' | 'always';\n /* the host forbids code generation from strings (`new Function` throws: a CSP without\n 'unsafe-eval', Cloudflare Workers): the tier is off and `unavailable_reason` is the host's\n message. Set by jit_probe(). */\n unavailable: boolean;\n unavailable_reason: string;\n threshold: number;\n /* reloop: structured output (default); switch: `for(;;) switch($l)` state machine */\n cfg: 'reloop' | 'switch';\n /* print the generated source of every compiled function */\n dump: boolean;\n /* calling convention of compiled functions (see docs/JIT.md):\n forwarder: body = direct($this, $nt, ...args), guest object = thin forwarder;\n natural: body = host-convention function, direct entry = adapter (Function.prototype.call) */\n conv: 'forwarder' | 'natural';\n /* on-stack replacement of interpreter frames running a loop (any mode but off) */\n osr: boolean;\n /* backward jumps taken in a function's interpreter frames before its frame is replaced */\n osr_threshold: number;\n}\n\nfunction env(name: string): string | undefined {\n return (globalThis as any).process?.env?.[name];\n}\n\n/* 'hot' is the default (measured with bench/inproc.ts, see docs/JIT.md): compiling every\n function that runs ('always') costs 300-400 us per function in Bun, most of it the host\n compiling the generated source, which made code that runs once (application start-up, the\n cold bundles) 3-5x slower than interpreting it; hot mode leaves such code interpreted, and\n with retargetable wrappers, closures compiled at creation by compiled code and on-stack\n replacement of hot loops its steady state is mostly within 1.15x of 'always'. */\n/* the mode used when JSEPTION_JIT is unset (or `1`) */\nexport const jit_default_mode: JitConfig['mode'] = 'hot';\n\nfunction parse_mode(v: string | undefined): JitConfig['mode'] {\n if (v === undefined || v === '' || v === '1') return jit_default_mode;\n if (v === 'always') return 'always';\n if (v === '0' || v === 'off' || v === 'false') return 'off';\n if (v === 'hot') return 'hot';\n return jit_default_mode;\n}\n\nexport const jit_config: JitConfig = {\n mode: parse_mode(env('JSEPTION_JIT')),\n unavailable: false,\n unavailable_reason: '',\n threshold: 2,\n cfg: env('JSEPTION_JIT_CFG') === 'switch' ? 'switch' : 'reloop',\n dump: env('JSEPTION_JIT_DUMP') === '1',\n conv: env('JSEPTION_JIT_CONV') === 'forwarder' ? 'forwarder' : 'natural',\n osr: env('JSEPTION_JIT_OSR') !== '0',\n osr_threshold: Number(env('JSEPTION_JIT_OSR') ?? '') > 0 ? Number(env('JSEPTION_JIT_OSR')) : 500,\n};\nif (env('JSEPTION_JIT_THRESHOLD') !== undefined && Number(env('JSEPTION_JIT_THRESHOLD')) > 0) {\n jit_config.threshold = Number(env('JSEPTION_JIT_THRESHOLD'));\n}\n\n/* Does the host allow code generation from strings? Probed once (or again with `force`); when\n it does not, the tier turns itself off and the interpreter runs everything. Never throws. */\nlet probed = false;\nexport function jit_probe(force = false): boolean {\n if (probed && !force) return !jit_config.unavailable;\n probed = true;\n try {\n new Function('return 1');\n jit_config.unavailable = false;\n jit_config.unavailable_reason = '';\n jit_stats.unavailable = null;\n return true;\n } catch (e) {\n const reason = String((e as Error)?.message ?? e);\n jit_config.unavailable = true;\n jit_config.unavailable_reason = reason;\n jit_config.mode = 'off';\n jit_stats.unavailable = reason;\n jit_stack_install(false);\n return false;\n }\n}\n\n/* change the configuration at run time; returns it (`mode` is 'off' and `unavailable` is set\n when the host forbids code generation) */\nexport function jit_configure(c: Partial<JitConfig>): Readonly<JitConfig> {\n Object.assign(jit_config, c);\n if (jit_config.mode !== 'off' && !jit_probe()) jit_config.mode = 'off';\n jit_stack_install(jit_config.mode !== 'off');\n jit_set_osr_threshold(jit_config.osr_threshold);\n return jit_config;\n}\n\n/* statistics (for tests and debugging) */\nexport const jit_stats = {\n compiled: 0, bailed: 0, bail_reasons: new Map<string, number>(),\n /* static counts of method call sites: native member call vs direct-entry/slow path */\n method_calls_fused: 0, method_calls_unfused: 0,\n /* on-stack replacement: variants compiled, and frames replaced */\n osr_compiled: 0, osr_entered: 0,\n /* the host's message when code generation from strings is forbidden (the tier is off) */\n unavailable: null as string | null,\n};\n\nexport class JitBail extends Error {}\nfunction bail(msg: string): never { throw new JitBail(msg); }\n\n/* ---------------------------------------------------------------------\n 1. Decoding\n --------------------------------------------------------------------- */\n\ninterface Insn {\n pc: number;\n op: number;\n size: number;\n next: number;\n name: string;\n fmt: OpFmt;\n /* operands */\n a: number; /* first operand (u8/u16/u32/i8/i16/i32/atom/const index/loc index) */\n b: number; /* second operand (u8/u16 after an atom/label) */\n label: number; /* absolute jump target, or -1 */\n}\n\nfunction decode(b: JSFunctionBytecode): Insn[] {\n const buf = b.byte_code_buf;\n const len = b.byte_code_len;\n const insns: Insn[] = [];\n let pos = 0;\n while (pos < len) {\n const op = buf[pos];\n const oi = short_opcode_info(op);\n if (!oi || op === OP.invalid) bail(`invalid opcode ${op} at ${pos}`);\n const p = pos + 1;\n const insn: Insn = { pc: pos, op, size: oi.size, next: pos + oi.size, name: oi.name, fmt: oi.fmt, a: 0, b: 0, label: -1 };\n switch (oi.fmt) {\n case OpFmt.none: break;\n case OpFmt.none_int: insn.a = op - OP.push_0; break;\n case OpFmt.none_loc: insn.a = (op - OP.get_loc0) % 4; break;\n case OpFmt.none_arg: insn.a = (op - OP.get_arg0) % 4; break;\n case OpFmt.none_var_ref: insn.a = (op - OP.get_var_ref0) % 4; break;\n case OpFmt.u8: case OpFmt.loc8: case OpFmt.const8: insn.a = get_u8(buf, p); break;\n case OpFmt.i8: insn.a = get_i8(buf, p); break;\n case OpFmt.label8: insn.label = p + get_i8(buf, p); break;\n case OpFmt.u16: case OpFmt.npop: case OpFmt.loc: case OpFmt.arg: case OpFmt.var_ref: insn.a = get_u16(buf, p); break;\n case OpFmt.npopx: insn.a = op - OP.call0; break;\n case OpFmt.i16: insn.a = get_i16(buf, p); break;\n case OpFmt.label16: insn.label = p + get_i16(buf, p); break;\n case OpFmt.npop_u16: insn.a = get_u16(buf, p); insn.b = get_u16(buf, p + 2); break;\n case OpFmt.u32: insn.a = get_u32(buf, p); break;\n case OpFmt.i32: insn.a = get_i32(buf, p); break;\n case OpFmt.const: insn.a = get_u32(buf, p); break;\n case OpFmt.label: insn.label = p + get_i32(buf, p); break;\n case OpFmt.atom: insn.a = get_u32(buf, p); break;\n case OpFmt.atom_u8: insn.a = get_u32(buf, p); insn.b = get_u8(buf, p + 4); break;\n case OpFmt.atom_u16: insn.a = get_u32(buf, p); insn.b = get_u16(buf, p + 4); break;\n case OpFmt.atom_label_u8: insn.a = get_u32(buf, p); insn.label = p + 4 + get_i32(buf, p + 4); insn.b = get_u8(buf, p + 8); break;\n case OpFmt.atom_label_u16: insn.a = get_u32(buf, p); insn.label = p + 4 + get_i32(buf, p + 4); insn.b = get_u16(buf, p + 8); break;\n case OpFmt.label_u16: insn.label = p + get_i32(buf, p); insn.a = get_u16(buf, p + 4); break;\n default: bail(`unknown operand format for ${oi.name}`);\n }\n insns.push(insn);\n pos += oi.size;\n }\n return insns;\n}\n\n/* ---------------------------------------------------------------------\n 2. Abstract stack analysis\n --------------------------------------------------------------------- */\n\nconst enum KT { V, CATCH, CATCH0, RET, REF }\n\n/* REF: a variable reference object created by make_loc_ref/make_arg_ref/make_var_ref_ref.\n It never exists at run time in compiled code: get_ref_value/put_ref_value on it are\n translated into direct variable accesses. */\nconst enum RefKind { LOC, ARG, VAR_REF }\n\ninterface Kind {\n t: KT;\n origin: number; /* pc of the instruction that pushed the catch slot */\n handler: number; /* CATCH: handler pc */\n sites: number[] | null; /* RET: gosub site ids that may have pushed it */\n ref_kind?: RefKind; /* REF */\n ref_idx?: number; /* REF */\n}\n\nconst KV: Kind = { t: KT.V, origin: -1, handler: -1, sites: null };\n\ninterface GosubSite { id: number; pc: number; cont: number }\n\ninterface Analysis {\n states: (Kind[] | null)[]; /* abstract stack before each pc (null: unreachable) */\n sites: GosubSite[];\n insnAt: (Insn | undefined)[]; /* instruction starting at each pc */\n uses_arguments: boolean;\n uses_this: boolean;\n uses_mapped_arguments: boolean;\n is_ctor: boolean;\n}\n\nfunction kinds_equal(a: Kind[], b: Kind[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n const x = a[i], y = b[i];\n if (x.t !== y.t) return false;\n if (x.t === KT.CATCH || x.t === KT.CATCH0) { if (x.origin !== y.origin) return false; }\n if (x.t === KT.REF) { if (x.ref_kind !== y.ref_kind || x.ref_idx !== y.ref_idx) return false; }\n }\n return true;\n}\n\n/* merge ret sites; returns true if `into` changed */\nfunction kinds_merge(into: Kind[], from: Kind[]): boolean {\n let changed = false;\n for (let i = 0; i < into.length; i++) {\n if (into[i].t === KT.RET) {\n const a = into[i].sites!, bs = from[i].sites!;\n for (const s of bs) if (!a.includes(s)) { a.push(s); changed = true; }\n }\n }\n return changed;\n}\n\nfunction analyze(b: JSFunctionBytecode, insns: Insn[]): Analysis {\n const len = b.byte_code_len;\n const states: (Kind[] | null)[] = new Array(len).fill(null);\n const insnAt: (Insn | undefined)[] = new Array(len);\n for (const i of insns) insnAt[i.pc] = i;\n const sites: GosubSite[] = [];\n const siteByPc = new Map<number, GosubSite>();\n const A: Analysis = { states, sites, insnAt, uses_arguments: false, uses_this: false, uses_mapped_arguments: false, is_ctor: false };\n\n const work: number[] = [];\n const visit = (pc: number, st: Kind[]): void => {\n if (pc < 0 || pc >= len) bail(`jump out of range: ${pc}`);\n if (insnAt[pc] === undefined) bail(`jump into the middle of an instruction: ${pc}`);\n const cur = states[pc];\n if (cur === null) {\n let has_ret = false;\n for (let i = 0; i < st.length; i++) if (st[i].t === KT.RET) { has_ret = true; break; }\n states[pc] = has_ret ? st.map(k => k.t === KT.RET ? { ...k, sites: k.sites!.slice() } : k) : st.slice();\n work.push(pc);\n } else {\n if (!kinds_equal(cur, st)) bail(`inconsistent stack at ${pc}`);\n if (kinds_merge(cur, st)) work.push(pc);\n }\n };\n visit(0, []);\n\n /* the instruction being analyzed and its (copied) input stack; the helpers are created once */\n let pc = 0;\n let insn: Insn = insns[0];\n let st: Kind[] = [];\n const pop = (n: number): Kind[] => {\n if (st.length < n) bail(`stack underflow at ${pc} (${insn.name})`);\n return st.splice(st.length - n, n);\n };\n const push = (k: Kind): void => { st.push(k); };\n const pushV = (n: number): void => { for (let i = 0; i < n; i++) st.push(KV); };\n const top = (i = 1): Kind => st[st.length - i];\n while (work.length) {\n pc = work.pop()!;\n insn = insnAt[pc]!;\n st = states[pc]!.slice();\n const oi = short_opcode_info(insn.op);\n let n_pop = oi.n_pop;\n if (oi.fmt === OpFmt.npop || oi.fmt === OpFmt.npop_u16) n_pop += insn.a;\n else if (oi.fmt === OpFmt.npopx) n_pop += insn.a;\n\n switch (insn.op) {\n /* unsupported in the first version */\n case OP.with_get_var: case OP.with_put_var: case OP.with_delete_var: case OP.with_make_ref: case OP.with_get_ref:\n bail('with statement');\n case OP.eval: case OP.apply_eval:\n bail('direct eval');\n case OP.await: case OP.yield: case OP.yield_star: case OP.async_yield_star: case OP.initial_yield:\n case OP.return_async: case OP.for_await_of_start: case OP.for_await_of_next: case OP.iterator_get_value_done:\n bail('generator/async');\n case OP.make_loc_ref: case OP.make_arg_ref: case OP.make_var_ref_ref:\n push({ t: KT.REF, origin: pc, handler: -1, sites: null,\n ref_kind: insn.op === OP.make_loc_ref ? RefKind.LOC : insn.op === OP.make_arg_ref ? RefKind.ARG : RefKind.VAR_REF,\n ref_idx: insn.b });\n pushV(1);\n break;\n /* instructions that keep their lower operands (iterator triples carry catch kinds) */\n case OP.for_of_next: case OP.for_in_next: pushV(2); break;\n case OP.iterator_next: pop(1); pushV(1); break;\n case OP.iterator_call: pushV(1); break;\n case OP.iterator_check_object: break;\n case OP.special_object:\n if (insn.a === OPSpecialObject.ARGUMENTS) A.uses_arguments = true;\n if (insn.a === OPSpecialObject.MAPPED_ARGUMENTS) { A.uses_arguments = true; A.uses_mapped_arguments = true; }\n pushV(1);\n break;\n case OP.rest: case OP.init_ctor:\n A.uses_arguments = true;\n if (insn.op === OP.init_ctor) A.is_ctor = true;\n pushV(1);\n break;\n case OP.check_ctor:\n A.is_ctor = true;\n break;\n case OP.push_this:\n A.uses_this = true;\n pushV(1);\n break;\n\n /* terminators */\n case OP.return: case OP.return_undef: case OP.throw: case OP.throw_error: case OP.tail_call: case OP.tail_call_method:\n continue;\n case OP.goto: case OP.goto8: case OP.goto16:\n visit(insn.label, st);\n continue;\n case OP.if_true: case OP.if_false: case OP.if_true8: case OP.if_false8:\n pop(1);\n visit(insn.label, st);\n visit(insn.next, st);\n continue;\n case OP.catch: {\n /* handler: the catch slot is replaced by the exception */\n const hst = st.slice(); hst.push(KV);\n visit(insn.label, hst);\n push({ t: KT.CATCH, origin: pc, handler: insn.label, sites: null });\n break;\n }\n case OP.gosub: {\n let site = siteByPc.get(pc);\n if (!site) { site = { id: sites.length, pc, cont: insn.next }; sites.push(site); siteByPc.set(pc, site); }\n push({ t: KT.RET, origin: pc, handler: -1, sites: [site.id] });\n visit(insn.label, st);\n continue;\n }\n case OP.ret: {\n const k = pop(1)[0];\n if (k.t !== KT.RET) bail('ret without gosub');\n for (const sid of k.sites!) visit(sites[sid].cont, st);\n continue;\n }\n case OP.for_of_start:\n pop(1); pushV(2);\n push({ t: KT.CATCH0, origin: pc, handler: 0, sites: null });\n break;\n case OP.iterator_close:\n pop(3);\n break;\n case OP.nip_catch: {\n const rv = pop(1)[0];\n let found = false;\n while (st.length > 0) {\n const k = st.pop()!;\n if (k.t === KT.CATCH || k.t === KT.CATCH0) { found = true; break; }\n }\n if (!found) bail('nip_catch without catch');\n push(rv.t === KT.V ? KV : rv);\n break;\n }\n /* stack manipulation (kinds move with the values) */\n case OP.drop: pop(1); break;\n case OP.nip: { const [, y] = pop(2); push(y); break; }\n case OP.nip1: { const [, y, z] = pop(3); push(y); push(z); break; }\n case OP.dup: { const x = top(); push(x); break; }\n case OP.dup1: { const [x, y] = pop(2); push(x); push(x); push(y); break; }\n case OP.dup2: { const x = top(2), y = top(1); push(x); push(y); break; }\n case OP.dup3: { const x = top(3), y = top(2), z = top(1); push(x); push(y); push(z); break; }\n case OP.insert2: { const [x, y] = pop(2); push(y); push(x); push(y); break; }\n case OP.insert3: { const [x, y, z] = pop(3); push(z); push(x); push(y); push(z); break; }\n case OP.insert4: { const [w, x, y, z] = pop(4); push(z); push(w); push(x); push(y); push(z); break; }\n case OP.perm3: { const [x, y, z] = pop(3); push(y); push(x); push(z); break; }\n case OP.perm4: { const [w, x, y, z] = pop(4); push(y); push(w); push(x); push(z); break; }\n case OP.perm5: { const [v, w, x, y, z] = pop(5); push(y); push(v); push(w); push(x); push(z); break; }\n case OP.swap: { const [x, y] = pop(2); push(y); push(x); break; }\n case OP.swap2: { const [w, x, y, z] = pop(4); push(y); push(z); push(w); push(x); break; }\n case OP.rot3l: { const [x, y, z] = pop(3); push(y); push(z); push(x); break; }\n case OP.rot3r: { const [x, y, z] = pop(3); push(z); push(x); push(y); break; }\n case OP.rot4l: { const [w, x, y, z] = pop(4); push(x); push(y); push(z); push(w); break; }\n case OP.rot5l: { const [v, w, x, y, z] = pop(5); push(w); push(x); push(y); push(z); push(v); break; }\n default:\n if (st.length < n_pop) bail(`stack underflow at ${pc} (${insn.name})`);\n st.length -= n_pop;\n for (let i = 0; i < oi.n_push; i++) st.push(KV);\n break;\n }\n visit(insn.next, st);\n }\n return A;\n}\n\n/* ---------------------------------------------------------------------\n 3. Blocks, control flow graph, try-regions\n --------------------------------------------------------------------- */\n\ninterface Term {\n kind: 'fall' | 'jump' | 'cond' | 'multi' | 'none';\n cond?: string; /* host expression (cond) */\n tTrue?: number; /* block id when cond is truthy */\n tFalse?: number;\n target?: number; /* jump/fall */\n multi?: { expr: string; cases: { value: number; target: number }[] };\n}\n\nclass Block {\n id: number;\n start: number;\n insns: Insn[] = [];\n stateIn: Kind[];\n region: Region | null = null;\n code = ''; /* statements (without the terminator) */\n term: Term = { kind: 'fall' };\n succs: number[] = []; /* block ids (deduplicated, in terminator order) */\n dead = false; /* unreachable from an on-stack replacement entry: not emitted */\n constructor(id: number, start: number, stateIn: Kind[]) { this.id = id; this.start = start; this.stateIn = stateIn; }\n}\n\nclass Region {\n id: number;\n origin: number; /* pc of OP.catch / OP.for_of_start, -1 for the root */\n parent: Region | null;\n kind: KT; /* CATCH, CATCH0 or V for the root */\n slot: number; /* stack index of the catch slot */\n handler: number; /* CATCH: handler pc */\n blocks: Block[] = [];\n children: Region[] = [];\n entry: Block | null = null;\n /* on-stack replacement: the region contains the entry (the loop header), which is its entry\n node (a block id, or the node id of the child region containing it) */\n entry_node: number | null = null;\n osr_chain = false;\n exits = new Set<number>(); /* block ids outside this region targeted from inside */\n constructor(id: number, origin: number, parent: Region | null, kind: KT, slot: number, handler: number) {\n this.id = id; this.origin = origin; this.parent = parent; this.kind = kind; this.slot = slot; this.handler = handler;\n }\n}\n\nfunction handler_chain(st: Kind[]): { kind: Kind; slot: number }[] {\n const r: { kind: Kind; slot: number }[] = [];\n for (let i = 0; i < st.length; i++) if (st[i].t === KT.CATCH || st[i].t === KT.CATCH0) r.push({ kind: st[i], slot: i });\n return r;\n}\n\n/* same handler chain (catch kinds, in order) without allocating */\nfunction same_chain(a: Kind[], b: Kind[]): boolean {\n let i = 0, j = 0;\n for (;;) {\n while (i < a.length && a[i].t !== KT.CATCH && a[i].t !== KT.CATCH0) i++;\n while (j < b.length && b[j].t !== KT.CATCH && b[j].t !== KT.CATCH0) j++;\n if (i === a.length || j === b.length) return i === a.length && j === b.length;\n if (a[i].origin !== b[j].origin) return false;\n i++; j++;\n }\n}\n\nfunction is_terminator(op: number): boolean {\n switch (op) {\n case OP.return: case OP.return_undef: case OP.throw: case OP.throw_error: case OP.tail_call: case OP.tail_call_method:\n case OP.goto: case OP.goto8: case OP.goto16: case OP.if_true: case OP.if_false: case OP.if_true8: case OP.if_false8:\n case OP.gosub: case OP.ret:\n return true;\n }\n return false;\n}\n\ninterface CFG { blocks: Block[]; byPc: Map<number, Block>; root: Region; regions: Region[] }\n\nfunction build_blocks(insns: Insn[], A: Analysis): CFG {\n const leaders = new Set<number>([0]);\n for (const insn of insns) {\n if (A.states[insn.pc] === null) continue;\n if (insn.label >= 0) leaders.add(insn.label);\n if (is_terminator(insn.op)) { if (insn.next < insns[insns.length - 1].next) leaders.add(insn.next); }\n /* handler chain change */\n const nextState = A.states[insn.next];\n if (nextState !== null && nextState !== undefined && !same_chain(A.states[insn.pc]!, nextState)) leaders.add(insn.next);\n if (insn.op === OP.catch || insn.op === OP.for_of_start) leaders.add(insn.next);\n }\n for (const s of A.sites) leaders.add(s.cont);\n\n const blocks: Block[] = [];\n const byPc = new Map<number, Block>();\n let cur: Block | null = null;\n for (const insn of insns) {\n if (A.states[insn.pc] === null) { cur = null; continue; }\n if (leaders.has(insn.pc)) {\n cur = new Block(blocks.length, insn.pc, A.states[insn.pc]!);\n blocks.push(cur);\n byPc.set(insn.pc, cur);\n }\n if (cur === null) bail(`reachable code without a leader at ${insn.pc}`);\n cur.insns.push(insn);\n }\n\n /* regions */\n const root = new Region(0, -1, null, KT.V, -1, -1);\n const regions: Region[] = [root];\n const byOrigin = new Map<number, Region>();\n for (const blk of blocks) {\n let parent = root;\n for (const { kind, slot } of handler_chain(blk.stateIn)) {\n let r = byOrigin.get(kind.origin);\n if (!r) {\n r = new Region(regions.length, kind.origin, parent, kind.t, slot, kind.handler);\n regions.push(r);\n byOrigin.set(kind.origin, r);\n parent.children.push(r);\n } else if (r.parent !== parent || r.slot !== slot) {\n bail('inconsistent try-region nesting');\n }\n parent = r;\n }\n blk.region = parent;\n parent.blocks.push(blk);\n }\n for (const r of regions) {\n if (r.origin < 0) { r.entry = blocks[0]; continue; }\n const originInsn = A.insnAt[r.origin]!;\n const e = byPc.get(originInsn.next);\n if (!e || e.region !== r) bail('try-region without entry');\n r.entry = e;\n }\n return { blocks, byPc, root, regions };\n}\n\n/* On-stack replacement: make the loop header at `H` the entry of the function. Blocks that are\n unreachable from it are dropped, try-regions without live blocks disappear, and every region\n containing the header takes it (or the child region containing it) as its entry node. A\n region containing the header that can also be entered normally (e.g. a try statement inside\n an outer loop) is not supported (Relooper.build bails). */\nfunction osr_prepare(cfg: CFG, A: Analysis, H: number): void {\n const hb = cfg.byPc.get(H);\n if (!hb) bail('osr: the loop header is not a block');\n for (const k of hb.stateIn) {\n if (k.t !== KT.V && k.t !== KT.CATCH && k.t !== KT.CATCH0) bail('osr: unsupported stack at the loop header');\n }\n const live = new Set<Block>([hb]);\n const work: Block[] = [hb];\n const add = (pc: number): void => {\n const t = cfg.byPc.get(pc);\n if (t !== undefined && !live.has(t)) { live.add(t); work.push(t); }\n };\n while (work.length) {\n const blk = work.pop()!;\n const last = blk.insns[blk.insns.length - 1];\n switch (last.op) {\n case OP.return: case OP.return_undef: case OP.throw: case OP.throw_error: case OP.tail_call: case OP.tail_call_method:\n case OP.ret: /* its continuations are added at the gosub sites */\n break;\n case OP.goto: case OP.goto8: case OP.goto16:\n add(last.label); break;\n case OP.if_true: case OP.if_false: case OP.if_true8: case OP.if_false8:\n add(last.label); add(last.next); break;\n case OP.gosub: {\n add(last.label);\n const site = A.sites.find(st => st.pc === last.pc);\n if (site) add(site.cont);\n break;\n }\n default:\n add(last.next);\n if (last.op === OP.catch) add(last.label);\n break;\n }\n /* exception edges */\n for (let r: Region | null = blk.region; r !== null; r = r.parent) if (r.kind === KT.CATCH) add(r.handler);\n }\n for (const blk of cfg.blocks) if (!live.has(blk)) blk.dead = true;\n for (const r of cfg.regions) r.blocks = r.blocks.filter(blk => !blk.dead);\n const kept = new Set<Region>();\n const keep = (r: Region): boolean => {\n r.children = r.children.filter(keep);\n const k = r.origin < 0 || r.blocks.length > 0 || r.children.length > 0;\n if (k) kept.add(r);\n return k;\n };\n keep(cfg.root);\n cfg.regions = cfg.regions.filter(r => kept.has(r));\n let child: Region | null = null;\n for (let r: Region | null = hb.region; r !== null; r = r.parent) {\n r.entry_node = child === null ? hb.id : -child.id - 1;\n r.osr_chain = true;\n child = r;\n }\n /* the arguments object (and rest parameters) are created from the call's `arguments`, which\n the replacement entry does not have */\n for (const blk of live) for (const insn of blk.insns) {\n if (insn.op === OP.rest || insn.op === OP.init_ctor ||\n (insn.op === OP.special_object && (insn.a === OPSpecialObject.ARGUMENTS || insn.a === OPSpecialObject.MAPPED_ARGUMENTS))) {\n bail('osr: arguments object created after the loop header');\n }\n }\n}\n\n/* ---------------------------------------------------------------------\n 4. Block emission (pending expression model)\n --------------------------------------------------------------------- */\n\nconst enum PK { LIT, TEMP, LOCAL, EXPR }\n\ninterface Pending {\n code: string;\n kind: PK;\n cpool: number; /* const pool index for push_const (-1 otherwise) */\n local: string; /* LOCAL: the referenced variable name */\n /* a method reference produced by get_field2/get_array_el2: `recv<access>`; a following\n call_method on the same receiver is emitted as a native member call. `prim(prim_args, args)`\n is the runtime call for primitive receivers; `pc` locates the property access. */\n method?: { recv: string; access: string; prim: string; prim_args: string; pc: number } | null;\n /* a fresh object literal (OP_object): its fields can be assigned instead of defined while\n Object.prototype has no accessors ($P.ok); `mkeys` are keys defined by define_method */\n fresh?: boolean;\n mkeys?: Set<string> | null;\n /* `code` starts with a position marker (set by push(); inspecting the first characters of a\n concatenated string would make the host flatten it) */\n marked?: boolean;\n /* cache of the stack temps `$s<n>` referenced by `code` (valid while trefs_code === code) */\n trefs_code?: string;\n trefs?: number[];\n}\n\n/* stack temps referenced by a pending expression (cached: push() asks for every live slot) */\nfunction temps_of(p: Pending): number[] {\n if (p.trefs_code === p.code) return p.trefs!;\n const code = p.code;\n const r: number[] = [];\n let i = code.indexOf('$s');\n while (i >= 0) {\n let j = i + 2, n = 0, c = code.charCodeAt(j);\n if (c >= 48 && c <= 57) {\n do { n = n * 10 + (c - 48); c = code.charCodeAt(++j); } while (c >= 48 && c <= 57);\n r.push(n);\n }\n i = code.indexOf('$s', j);\n }\n p.trefs_code = code;\n p.trefs = r;\n return r;\n}\n\nfunction P(code: string, kind: PK, extra?: Partial<Pending>): Pending {\n /* explicit fields (an object spread here was a measurable part of code generation) */\n const p: Pending = { code, kind, cpool: -1, local: '', method: undefined, fresh: undefined, mkeys: undefined };\n if (extra !== undefined) {\n if (extra.cpool !== undefined) p.cpool = extra.cpool;\n if (extra.local !== undefined) p.local = extra.local;\n if (extra.method !== undefined) p.method = extra.method;\n if (extra.fresh !== undefined) p.fresh = extra.fresh;\n if (extra.mkeys !== undefined) p.mkeys = extra.mkeys;\n }\n return p;\n}\n\n/* the interrupt poll emitted at every function entry and loop head: the interpreter's\n counter, decremented in place (`$C` is the context); the handler is asked when it runs out */\nconst POLL = 'if (--$C.interrupt_counter <= 0) $RT.poll_handler();\\n';\n\nconst IDENT_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nconst RESERVED = new Set(['__proto__']);\n\nfunction fmt_number(n: number): string {\n if (Number.isNaN(n)) return '(0/0)';\n if (n === Infinity) return '(1/0)';\n if (n === -Infinity) return '(-1/0)';\n if (n === 0 && 1 / n < 0) return '(-0)';\n const s = String(n);\n return n < 0 ? `(${s})` : s;\n}\n\nfunction fmt_const(v: any, cpool_index: number): Pending | null {\n switch (typeof v) {\n case 'number': return P(fmt_number(v), PK.LIT, { cpool: cpool_index });\n case 'string': return P(JSON.stringify(v), PK.LIT, { cpool: cpool_index });\n case 'boolean': return P(v ? 'true' : 'false', PK.LIT, { cpool: cpool_index });\n case 'bigint': return P(v < 0n ? `(${v}n)` : `${v}n`, PK.LIT, { cpool: cpool_index });\n case 'undefined': return P('undefined', PK.LIT, { cpool: cpool_index });\n default:\n if (v === null) return P('null', PK.LIT, { cpool: cpool_index });\n return null;\n }\n}\n\ninterface FuncInfo {\n ctx: JSContext;\n b: JSFunctionBytecode;\n A: Analysis;\n strict: boolean;\n constructible: boolean;\n derived: boolean;\n uses_direct: boolean; /* generated code uses `$d` */\n uses_global: boolean; /* generated code uses `$g` */\n uses_w: boolean; /* generated code uses `$w` (a store value evaluated once) */\n natural: boolean; /* natural calling convention (body reads this/new.target directly) */\n arg_off: number; /* index of the first guest argument in `arguments` (2 for the direct convention) */\n /* sloppy global writes: atom -> index of the `$ss<i>` setter declared in the factory scope */\n sloppy_sets: Map<number, number>;\n /* sloppy property writes `o.name = v`: atom -> index of the `$sp<i>` helper */\n sloppy_props: Map<number, number>;\n uses_spe: boolean; /* `$spe(o, k, v)`: sloppy `o[k] = v` */\n uses_sdel: boolean; /* `$sdel(o, k)`: sloppy `delete o[k]` */\n argName: string[]; /* per arg index: '$a0' or '$c0' (cell) */\n argCell: boolean[];\n varName: string[]; /* per var index: '$v3' */\n varCell: boolean[];\n atom_name: (atom: number) => string;\n atom_is_symbol: (atom: number) => boolean;\n}\n\n/* property key text for a static atom: `.name` or `[..]` */\nfunction key_access(fi: FuncInfo, atom: number): string {\n if (__JS_AtomIsTaggedInt(atom)) return `[${__JS_AtomToUInt32(atom)}]`;\n if (fi.atom_is_symbol(atom)) bail('symbol atom in static property access');\n const name = fi.atom_name(atom);\n if (IDENT_RE.test(name) && !RESERVED.has(name)) return `.${name}`;\n return `[${JSON.stringify(name)}]`;\n}\n\n/* property key value for a static atom (string/number literal) */\nfunction key_value(fi: FuncInfo, atom: number): string {\n if (__JS_AtomIsTaggedInt(atom)) return String(__JS_AtomToUInt32(atom));\n if (fi.atom_is_symbol(atom)) bail('symbol atom as property key');\n return JSON.stringify(fi.atom_name(atom));\n}\n\n/* references to stack temps `$s<n>` in generated code (manual scans: these run for every push) */\nfunction refs_temp_above(code: string, idx: number): boolean {\n let i = code.indexOf('$s');\n while (i >= 0) {\n let j = i + 2, n = 0, c = code.charCodeAt(j);\n if (c >= 48 && c <= 57) {\n do { n = n * 10 + (c - 48); c = code.charCodeAt(++j); } while (c >= 48 && c <= 57);\n if (n > idx) return true;\n }\n i = code.indexOf('$s', j);\n }\n return false;\n}\nfunction refs_temp(code: string, idx: number): boolean {\n let i = code.indexOf('$s');\n while (i >= 0) {\n let j = i + 2, n = 0, c = code.charCodeAt(j);\n if (c >= 48 && c <= 57) {\n do { n = n * 10 + (c - 48); c = code.charCodeAt(++j); } while (c >= 48 && c <= 57);\n if (n === idx) return true;\n }\n i = code.indexOf('$s', j);\n }\n return false;\n}\nconst TEMP_NAMES: string[] = [];\nfunction temp_name(i: number): string {\n let n = TEMP_NAMES[i];\n if (n === undefined) { n = `$s${i}`; TEMP_NAMES[i] = n; }\n return n;\n}\n/* position markers are emitted as comments `/*@<pc>*\\/` (see src/jit_stack.ts) */\nfunction starts_with_marker(code: string): boolean {\n return code.charCodeAt(0) === 47 && code.charCodeAt(1) === 42 && code.charCodeAt(2) === 64;\n}\n/* a statement `$name = /*@<pc>*\\/...`: the pc of the expression it assigns, else -1 */\nfunction stmt_expr_pc(stmt: string): number {\n if (stmt.charCodeAt(0) !== 36 /* $ */) return -1;\n let i = 1, c = stmt.charCodeAt(1);\n if (!(c === 36 || c === 95 || (c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122))) return -1;\n while (c === 36 || c === 95 || (c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122)) c = stmt.charCodeAt(++i);\n if (c !== 32 || stmt.charCodeAt(i + 1) !== 61 || stmt.charCodeAt(i + 2) !== 32 ||\n stmt.charCodeAt(i + 3) !== 47 || stmt.charCodeAt(i + 4) !== 42 || stmt.charCodeAt(i + 5) !== 64) return -1;\n let j = i + 6, pc = 0;\n c = stmt.charCodeAt(j);\n if (!(c >= 48 && c <= 57)) return -1;\n while (c >= 48 && c <= 57) { pc = pc * 10 + (c - 48); c = stmt.charCodeAt(++j); }\n return c === 42 ? pc : -1;\n}\n\n/* a primitive literal (never an object): property operations go straight to the runtime */\nconst PRIM_LIT_RE = /^(?:-?\\d|\\(|\"|'|true$|false$|null$|undefined$|\\d)/;\nfunction is_prim_literal(code: string): boolean {\n return PRIM_LIT_RE.test(code) && !code.startsWith('$');\n}\n\nfunction is_obj_guard(x: string): string {\n return `(typeof ${x} === 'object' ? ${x} !== null : typeof ${x} === 'function')`;\n}\n\nclass BlockEmitter {\n fi: FuncInfo;\n blk: Block;\n slots: Pending[] = [];\n out: string[] = [];\n scratch = 0;\n\n /* temps `$s<k>` that may occur in pending code of this block: those of the input stack and\n every temp slot pushed or materialized since (a pending expression can only mention a temp\n that existed as a slot). Lets push() skip scanning expression strings, which would make the\n host flatten every nested expression. */\n temp_seen: boolean[] = [];\n max_seen = -1;\n see_temp(i: number): void {\n if (this.temp_seen[i] !== true) { this.temp_seen[i] = true; if (i > this.max_seen) this.max_seen = i; }\n }\n\n constructor(fi: FuncInfo, blk: Block) {\n this.fi = fi;\n this.blk = blk;\n for (let i = 0; i < blk.stateIn.length; i++) { this.slots.push(P(temp_name(i), PK.TEMP)); this.see_temp(i); }\n }\n\n get depth(): number { return this.slots.length; }\n /* every statement starts with a position marker (see M): that of the expression it assigns,\n else of the current instruction */\n emit(stmt: string): void {\n if (starts_with_marker(stmt)) { this.out.push(stmt); return; }\n const pc = stmt_expr_pc(stmt);\n this.out.push((pc >= 0 ? `/*@${pc}*/` : this.M()) + stmt);\n }\n\n /* Position marker: a comment \"/*@<pc>*\\/\" that the host parses as whitespace; the table\n (line, column) -> pc is built from the source when a backtrace needs it (src/jit_stack.ts),\n so that a host stack frame of the compiled function maps back to the guest operation. Every pushed expression starts with\n one; property accesses and calls carry one before their `.`/`[`/`(` and one at their end,\n binary operators one at the operator: the hosts report one of those points. */\n M(pc = this.cur_pc): string { return `/*@${pc}*/`; }\n\n /* a fresh scratch variable (declared at function level as $x0, $x1, ...) */\n tmp(): string { return `$x${this.scratch++}`; }\n\n /* materialize slot i into its canonical temp. Pending expressions below i are evaluated\n first so that the evaluation order of the original code is preserved. */\n materialize(i: number): void {\n const p = this.slots[i];\n if (p.kind === PK.TEMP && p.code === `$s${i}`) return;\n if (p.kind === PK.EXPR) {\n for (let j = 0; j < i; j++) if (this.slots[j].kind === PK.EXPR) this.materialize(j);\n }\n this.emit(`$s${i} = ${p.code};`);\n this.slots[i] = P(temp_name(i), PK.TEMP, { fresh: p.fresh, mkeys: p.mkeys });\n this.see_temp(i);\n }\n /* materialize every pending expression that is not trivially duplicable, in order */\n flush_exprs(upto = this.depth): void {\n for (let i = 0; i < upto; i++) if (this.slots[i].kind === PK.EXPR) this.materialize(i);\n }\n /* materialize all pending reads of a local before writing it */\n flush_local(name: string): void {\n for (let i = 0; i < this.depth; i++) if (this.slots[i].kind === PK.LOCAL && this.slots[i].local === name) this.materialize(i);\n }\n /* materialize everything so that slot i holds `$s<i>` */\n finalize(): void {\n /* 1. expressions and literals that are not in canonical form */\n const moves: { i: number; from: string }[] = [];\n for (let i = 0; i < this.depth; i++) {\n const p = this.slots[i];\n if (p.kind === PK.TEMP) { if (p.code !== `$s${i}`) moves.push({ i, from: p.code }); }\n else if (p.kind === PK.EXPR) this.materialize(i);\n }\n /* 2. literal/local assignments: the sources are not temps, no ordering issue, but they must\n happen after the temp moves if a temp move reads a slot they overwrite... simplest: do\n temp moves first via a parallel-move resolver, then the others. */\n this.parallel_moves(moves);\n for (let i = 0; i < this.depth; i++) {\n const p = this.slots[i];\n if (p.kind === PK.LIT || p.kind === PK.LOCAL) this.materialize(i);\n }\n }\n private parallel_moves(moves: { i: number; from: string }[]): void {\n /* moves: $s<i> = from, where from is some $s<j>. Resolve cycles with $x scratch. */\n const pending = new Map<number, string>(); /* dest -> src */\n for (const m of moves) pending.set(m.i, m.from);\n const isRead = (name: string): boolean => { for (const s of pending.values()) if (s === name) return true; return false; };\n while (pending.size) {\n let progress = false;\n for (const [dest, src] of [...pending]) {\n if (!isRead(`$s${dest}`)) {\n this.emit(`$s${dest} = ${src};`);\n this.slots[dest] = P(temp_name(dest), PK.TEMP);\n this.see_temp(dest);\n pending.delete(dest);\n progress = true;\n }\n }\n if (!progress) {\n /* break a cycle */\n const [dest, src] = pending.entries().next().value as [number, string];\n const t = this.tmp();\n this.emit(`${t} = ${src};`);\n for (const [d2, s2] of pending) if (s2 === src) pending.set(d2, t);\n void dest;\n }\n }\n }\n\n push(p: Pending): void {\n const idx = this.depth;\n /* a live slot below may still hold the temp `$s<idx>` (after dup/permutations): save it first */\n if (this.temp_seen[idx] === true) {\n const mine = temp_name(idx);\n for (let j = 0; j < idx; j++) {\n const q = this.slots[j];\n if ((q.kind === PK.TEMP && q.code === mine) || (q.kind === PK.EXPR && temps_of(q).includes(idx))) this.materialize(j);\n }\n }\n if (p.kind === PK.EXPR && p.marked !== true) { p.code = this.M() + p.code; p.marked = true; }\n else if (p.kind === PK.TEMP) {\n /* a temp slot: `$s<k>` (k may differ from idx after permutations) */\n const code = p.code;\n if (code.length > 2 && code.charCodeAt(0) === 36 && code.charCodeAt(1) === 115) {\n const k = Number(code.slice(2));\n if (Number.isInteger(k)) this.see_temp(k);\n }\n }\n this.slots.push(p);\n /* an expression that reads temps above its own slot must be evaluated now, before those\n temps are reused */\n if (p.kind === PK.EXPR && this.max_seen > idx) {\n const t = temps_of(p);\n for (let k = 0; k < t.length; k++) if (t[k] > idx) { this.materialize(idx); break; }\n }\n }\n /* make every slot a canonical temp (used after permutations) */\n canonicalize(): void { this.finalize(); }\n pop(): Pending {\n if (!this.slots.length) bail('emit: stack underflow');\n return this.slots.pop()!;\n }\n top(i = 1): Pending { return this.slots[this.slots.length - i]; }\n /* drop a slot: its side effects must still happen */\n drop_value(p: Pending): void {\n if (p.kind === PK.EXPR) this.emit(`${p.code};`);\n }\n /* make the slot duplicable (temp/local/lit) and return its code */\n dup_code(i: number): string {\n const p = this.slots[i];\n if (p.kind === PK.EXPR) this.materialize(i);\n return this.slots[i].code;\n }\n /* the value of a store that is written into two branches (fast native store / runtime\n fallback): an expression is evaluated once into `$w` first. Order-preserving: the statement\n follows immediately and the guard between them evaluates nothing. */\n store_value(v: Pending): string {\n if (v.kind !== PK.EXPR) return v.code;\n this.fi.uses_w = true;\n this.emit(`$w = ${v.code};`);\n return '$w';\n }\n /* code of an operand for use inside a larger expression */\n par(p: Pending): string {\n if (p.kind === PK.EXPR) return `(${p.code})`;\n return p.code;\n }\n /* before emitting a statement with side effects */\n before_stmt(): void { this.flush_exprs(); }\n\n /* --- variable access --- */\n arg_read(i: number): Pending {\n const fi = this.fi;\n if (i >= fi.argName.length) return P('undefined', PK.LIT);\n return fi.argCell[i] ? P(`${fi.argName[i]}.get()`, PK.EXPR) : P(fi.argName[i], PK.LOCAL, { local: fi.argName[i] });\n }\n var_read(i: number): Pending {\n const fi = this.fi;\n if (i >= fi.varName.length) bail(`bad local index ${i}`);\n return fi.varCell[i] ? P(`${fi.varName[i]}.get()`, PK.EXPR) : P(fi.varName[i], PK.LOCAL, { local: fi.varName[i] });\n }\n write_local(is_arg: boolean, i: number, value: string): void {\n const fi = this.fi;\n const name = is_arg ? fi.argName[i] : fi.varName[i];\n const cell = is_arg ? fi.argCell[i] : fi.varCell[i];\n if (name === undefined) bail(`bad variable index ${i}`);\n if (cell) { this.before_stmt(); this.emit(`${name}.set(${value});`); }\n else { this.flush_local(name); this.emit(`${name} = ${value};`); }\n }\n /* current value expression of a local (duplicable) */\n local_value(is_arg: boolean, i: number): string {\n const fi = this.fi;\n const name = is_arg ? fi.argName[i] : fi.varName[i];\n const cell = is_arg ? fi.argCell[i] : fi.varCell[i];\n return cell ? `${name}.get()` : name;\n }\n\n /* --- property access and calls --- */\n guard_obj(x: string): string { return is_obj_guard(x); }\n\n get_field(obj: string, atom: number): string {\n if (is_prim_literal(obj)) return `$RT.get_field(${obj}, ${atom})`;\n const M = this.M();\n return `(${this.guard_obj(obj)} ? ${obj}${M}${key_access(this.fi, atom)}${M} : $RT.get_field(${obj}, ${atom}))`;\n }\n get_el(obj: string, key: string): string {\n if (is_prim_literal(obj)) return `$RT.get_el(${obj}, ${key})`;\n const M = this.M();\n return `(${this.guard_obj(obj)} ? ${obj}${M}[${key}]${M} : $RT.get_el(${obj}, ${key}))`;\n }\n put_field_stmt(obj: string, atom: number, val: string): string {\n const fi = this.fi;\n const M = this.M();\n if (is_prim_literal(obj)) return `$RT.put_field(${obj}, ${atom}, ${val}, ${fi.strict});`;\n if (fi.strict) return `if (${this.guard_obj(obj)}) ${obj}${M}${key_access(fi, atom)} = ${val}; else $RT.put_field${M}(${obj}, ${atom}, ${val}, true);`;\n /* sloppy assignment semantics (no throw) come from a non-strict helper in the factory scope */\n let idx = fi.sloppy_props.get(atom);\n if (idx === undefined) { idx = fi.sloppy_props.size; fi.sloppy_props.set(atom, idx); }\n return `if (${this.guard_obj(obj)}) $sp${idx}${M}(${obj}, ${val}); else $RT.put_field${M}(${obj}, ${atom}, ${val}, false);`;\n }\n put_el_stmt(obj: string, key: string, val: string): string {\n const fi = this.fi;\n const M = this.M();\n if (is_prim_literal(obj)) return `$RT.put_el(${obj}, ${key}, ${val}, ${fi.strict});`;\n if (fi.strict) return `if (${this.guard_obj(obj)}) ${obj}${M}[${key}] = ${val}; else $RT.put_el${M}(${obj}, ${key}, ${val}, true);`;\n fi.uses_spe = true;\n return `if (${this.guard_obj(obj)}) $spe${M}(${obj}, ${key}, ${val}); else $RT.put_el${M}(${obj}, ${key}, ${val}, false);`;\n }\n /* call with an explicit `this`: the direct entry of guest functions, else the engine */\n call_with_this(fn: string, thisv: string, args: string[]): string {\n this.fi.uses_direct = true;\n const a = args.join(', ');\n const M = this.M();\n return `(($d = $DIRECT.get(${fn})) !== undefined ? $d${M}(${thisv}, undefined${a ? ', ' + a : ''})${M} : $RT.call_slow${M}(${fn}, ${thisv}, [${a}])${M})`;\n }\n construct_with_target(fn: string, nt: string, args: string[]): string {\n this.fi.uses_direct = true;\n const a = args.join(', ');\n const M = this.M();\n return `(($d = $DIRECT.get(${fn})) !== undefined ? $d${M}(undefined, ${nt}${a ? ', ' + a : ''})${M} : $RT.construct_slow${M}(${fn}, ${nt}, [${a}])${M})`;\n }\n\n /* returns true if the instruction terminated the block */\n translate(insn: Insn, last: boolean): boolean {\n const fi = this.fi;\n const op = insn.op;\n switch (op) {\n /* --- constants --- */\n case OP.push_i32: case OP.push_i8: case OP.push_i16: case OP.push_minus1: case OP.push_0: case OP.push_1:\n case OP.push_2: case OP.push_3: case OP.push_4: case OP.push_5: case OP.push_6: case OP.push_7:\n this.push(P(fmt_number(insn.a), PK.LIT)); return false;\n case OP.push_bigint_i32:\n /* a negative literal is parenthesized: `-1n ** 2n` is a syntax error */\n this.push(P(insn.a < 0 ? `(${insn.a}n)` : `${insn.a}n`, PK.LIT)); return false;\n case OP.push_const: case OP.push_const8: {\n const v = fi.b.cpool[insn.a];\n const lit = v instanceof JSFunctionBytecode ? null : fmt_const(v, insn.a);\n this.push(lit ?? P(`$cpool[${insn.a}]`, PK.LIT, { cpool: insn.a }));\n return false;\n }\n case OP.push_empty_string: this.push(P('\"\"', PK.LIT)); return false;\n case OP.undefined: this.push(P('undefined', PK.LIT)); return false;\n case OP.null: this.push(P('null', PK.LIT)); return false;\n case OP.push_false: this.push(P('false', PK.LIT)); return false;\n case OP.push_true: this.push(P('true', PK.LIT)); return false;\n case OP.push_atom_value:\n if (fi.atom_is_symbol(insn.a)) this.push(P(`$RT.atom_value(${insn.a})`, PK.EXPR));\n else if (__JS_AtomIsTaggedInt(insn.a)) this.push(P(String(__JS_AtomToUInt32(insn.a)), PK.LIT));\n else this.push(P(JSON.stringify(fi.atom_name(insn.a)), PK.LIT));\n return false;\n case OP.private_symbol:\n this.push(P(`$RT.private_symbol(${insn.a})`, PK.EXPR)); return false;\n case OP.push_this:\n if (fi.strict) this.push(P('$t', PK.LOCAL, { local: '$t' }));\n else this.push(P(`(($t === undefined || $t === null) ? $G : ((typeof $t === 'object' || typeof $t === 'function') ? $t : $RT.to_object($t)))`, PK.EXPR));\n return false;\n case OP.object:\n this.push(P('new $Obj()', PK.EXPR, { fresh: true, mkeys: null })); return false;\n case OP.special_object:\n switch (insn.a) {\n case OPSpecialObject.ARGUMENTS: this.push(P(`$RT.arguments(arguments, ${fi.arg_off})`, PK.EXPR)); break;\n case OPSpecialObject.MAPPED_ARGUMENTS:\n this.push(P(`$RT.mapped_arguments(arguments, ${fi.arg_off}, [${fi.argName.join(', ')}], $fo)`, PK.EXPR)); break;\n case OPSpecialObject.THIS_FUNC: this.push(P('$fo', PK.LOCAL, { local: '$fo' })); break;\n case OPSpecialObject.NEW_TARGET:\n /* a non constructible function (method, arrow body) is never constructed */\n if (fi.constructible) this.push(P('$nt', PK.LOCAL, { local: '$nt' })); else this.push(P('undefined', PK.LIT));\n break;\n case OPSpecialObject.HOME_OBJECT: this.push(P('$RT.home_object($fo)', PK.EXPR)); break;\n case OPSpecialObject.VAR_OBJECT: this.push(P('$RT.new_object_null()', PK.EXPR)); break;\n case OPSpecialObject.IMPORT_META: this.push(P('$RT.import_meta($b)', PK.EXPR)); break;\n default: bail('special object ' + insn.a);\n }\n return false;\n case OP.rest:\n this.push(P(`$RT.rest(arguments, ${fi.arg_off}, ${insn.a})`, PK.EXPR)); return false;\n\n /* --- stack manipulation --- */\n case OP.drop: this.drop_value(this.pop()); return false;\n case OP.nip: { const y = this.pop(); const x = this.pop(); this.drop_value(x); this.push(y); return false; }\n case OP.nip1: { const z = this.pop(); const y = this.pop(); const x = this.pop(); this.drop_value(x); this.push(y); this.push(z); return false; }\n case OP.dup: { const c = this.dup_code(this.depth - 1); this.push({ ...this.top() , code: c }); return false; }\n case OP.dup1: { /* a b -> a a b */\n this.dup_code(this.depth - 2); this.dup_code(this.depth - 1);\n const b = this.pop(); const a = this.pop(); this.push(a); this.push({ ...a }); this.push(b); return false;\n }\n case OP.dup2: { this.dup_code(this.depth - 2); this.dup_code(this.depth - 1); const a = this.top(2), b = this.top(1); this.push({ ...a }); this.push({ ...b }); return false; }\n case OP.dup3: { this.dup_code(this.depth - 3); this.dup_code(this.depth - 2); this.dup_code(this.depth - 1); const a = this.top(3), b = this.top(2), c = this.top(1); this.push({ ...a }); this.push({ ...b }); this.push({ ...c }); return false; }\n case OP.insert2: case OP.insert3: case OP.insert4: case OP.perm3: case OP.perm4: case OP.perm5:\n case OP.swap: case OP.swap2: case OP.rot3l: case OP.rot3r: case OP.rot4l: case OP.rot5l: {\n const oi = short_opcode_info(op);\n const n = oi.n_pop;\n for (let i = this.depth - n; i < this.depth; i++) this.dup_code(i);\n const v = this.slots.splice(this.depth - n, n);\n let r: Pending[];\n switch (op) {\n case OP.insert2: r = [v[1], v[0], v[1]]; break;\n case OP.insert3: r = [v[2], v[0], v[1], v[2]]; break;\n case OP.insert4: r = [v[3], v[0], v[1], v[2], v[3]]; break;\n case OP.perm3: r = [v[1], v[0], v[2]]; break;\n case OP.perm4: r = [v[2], v[0], v[1], v[3]]; break;\n case OP.perm5: r = [v[3], v[0], v[1], v[2], v[4]]; break;\n case OP.swap: r = [v[1], v[0]]; break;\n case OP.swap2: r = [v[2], v[3], v[0], v[1]]; break;\n case OP.rot3l: r = [v[1], v[2], v[0]]; break;\n case OP.rot3r: r = [v[2], v[0], v[1]]; break;\n case OP.rot4l: r = [v[1], v[2], v[3], v[0]]; break;\n default: r = [v[1], v[2], v[3], v[4], v[0]]; break;\n }\n for (const p of r) this.slots.push({ ...p });\n this.canonicalize();\n return false;\n }\n\n /* --- closures --- */\n case OP.fclosure: case OP.fclosure8: {\n const child = fi.b.cpool[insn.a];\n if (!(child instanceof JSFunctionBytecode)) bail('fclosure without bytecode');\n this.push(P(`$RT.closure($cpool[${insn.a}], ${this.closure_refs(child)}, $fo)`, PK.EXPR));\n return false;\n }\n\n /* --- calls --- */\n case OP.call0: case OP.call1: case OP.call2: case OP.call3: case OP.call: case OP.tail_call: {\n /* plain call: native (this = undefined, strict callees) */\n const argc = insn.a;\n const args = this.pop_args(argc);\n const fn = this.pop();\n const M = this.M();\n const e = `${this.par(fn)}${M}(${args.join(', ')})${M}`;\n if (op === OP.tail_call) { this.before_stmt(); this.emit_return(e); return true; }\n this.push(P(e, PK.EXPR));\n return false;\n }\n case OP.call_method: case OP.tail_call_method: {\n const argc = insn.a;\n const args = this.pop_args(argc);\n const fn = this.top(1), thisv = this.top(2);\n let e: string;\n const a = args.join(', ');\n if (fn.method && fn.method.recv === thisv.code && a.length <= 400) {\n /* fused member call: evaluation order (receiver, property, arguments) is the\n bytecode's since the arguments are still pending expressions */\n this.pop(); this.pop();\n const r = fn.method.recv;\n const M = this.M();\n e = `(${this.guard_obj(r)} ? ${r}${this.M(fn.method.pc)}${fn.method.access}${M}(${a})${M} : ${fn.method.prim}${M}(${fn.method.prim_args}, [${a}])${M})`;\n jit_stats.method_calls_fused++;\n } else {\n const f = this.dup_code(this.depth - 1); const t = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n e = this.call_with_this(f, t, args);\n jit_stats.method_calls_unfused++;\n }\n if (op === OP.tail_call_method) { this.before_stmt(); this.emit_return(e); return true; }\n this.push(P(e, PK.EXPR));\n return false;\n }\n case OP.call_constructor: {\n const argc = insn.a;\n const args = this.pop_args(argc);\n const nt = this.top(1), fn = this.top(2);\n let e: string;\n if ((nt.kind === PK.TEMP || nt.kind === PK.LOCAL) && nt.kind === fn.kind && nt.code === fn.code) {\n /* `new C(args)`: new.target is the constructor itself */\n this.pop(); this.pop();\n e = `new ${fn.code}${this.M()}(${args.join(', ')})${this.M()}`;\n } else {\n const t = this.dup_code(this.depth - 1); const f = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n e = this.construct_with_target(f, t, args);\n }\n this.push(P(e, PK.EXPR));\n return false;\n }\n case OP.array_from: {\n const args = this.pop_args(insn.a);\n this.push(P(`$RT.array([${args.join(', ')}])`, PK.EXPR));\n return false;\n }\n case OP.apply: {\n const arr = this.pop(); const thisv = this.pop(); const fn = this.pop();\n this.push(P(`$RT.apply(${this.par(fn)}, ${this.par(thisv)}, ${this.par(arr)}, ${insn.a})`, PK.EXPR));\n return false;\n }\n case OP.return: { const v = this.pop(); this.before_stmt(); this.emit_return(v.code); return true; }\n case OP.return_undef: this.before_stmt(); this.emit_return('undefined'); return true;\n case OP.check_ctor_return: {\n const r = this.dup_code(this.depth - 1);\n this.before_stmt();\n this.emit(`if (!${this.guard_obj(r)} && ${r} !== undefined) $RT.throw_type_error(\"derived class constructor must return an object or undefined\");`);\n this.push(P(`!${this.guard_obj(r)}`, PK.EXPR));\n return false;\n }\n case OP.check_ctor:\n this.before_stmt();\n this.emit(`if ($nt === undefined) $RT.throw_type_error(\"class constructors must be invoked with 'new'\");`);\n return false;\n case OP.init_ctor:\n this.push(P(`$RT.init_ctor($fo, $nt, arguments, ${fi.arg_off})`, PK.EXPR)); return false;\n case OP.check_brand: {\n const f = this.dup_code(this.depth - 1), o = this.dup_code(this.depth - 2);\n this.before_stmt();\n this.emit(`$RT.check_brand(${o}, ${f});`);\n return false;\n }\n case OP.add_brand: {\n const f = this.pop(), o = this.pop();\n this.before_stmt();\n this.emit(`$RT.add_brand(${this.par(o)}, ${this.par(f)});`);\n return false;\n }\n case OP.throw: { const v = this.pop(); this.before_stmt(); this.emit(`throw ${v.code};`); this.blk.term = { kind: 'none' }; return true; }\n case OP.throw_error:\n this.before_stmt();\n this.emit(`$RT.throw_error(${insn.a}, ${insn.b});`);\n this.blk.term = { kind: 'none' };\n return true;\n case OP.regexp: {\n const flags = this.pop(), pat = this.pop();\n this.push(P(`$RT.regexp(${this.par(pat)}, ${this.par(flags)})`, PK.EXPR));\n return false;\n }\n case OP.get_super: {\n const o = this.dup_code(this.depth - 1); this.pop();\n this.push(P(`(${this.guard_obj(o)} ? $getproto(${o}) : $RT.get_prototype(${o}))`, PK.EXPR));\n return false;\n }\n\n /* --- globals --- */\n case OP.check_var: this.push(P(`$RT.check_var(${insn.a})`, PK.EXPR)); return false;\n case OP.get_var_undef: case OP.get_var: {\n /* inline fast path: the global variable table ($GV, lexical globals, TDZ sentinel $U)\n then the global object ($G); the runtime handles the slow cases (undefined values,\n missing variables, errors) */\n const acc = this.global_access(insn.a);\n if (acc === null) { this.push(P(`$RT.get_global(${insn.a}, ${op === OP.get_var})`, PK.EXPR)); return false; }\n fi.uses_global = true;\n const slow = `$RT.get_global(${insn.a}, ${op === OP.get_var})`;\n const g = op === OP.get_var ? `(($g = $G${acc}) !== undefined ? $g : ${slow})` : `$G${acc}`;\n this.push(P(`(($g = $GV${acc}) !== undefined ? ($g === $U ? ${slow} : $g) : ${g})`, PK.EXPR));\n return false;\n }\n case OP.put_var: case OP.put_var_init: {\n const acc = this.global_access(insn.a);\n if (op === OP.put_var_init || acc === null) {\n const v = this.pop(); this.before_stmt();\n this.emit(`$RT.put_global(${insn.a}, ${v.code}, ${op - OP.put_var}, ${fi.strict});`);\n return false;\n }\n const v = this.dup_code(this.depth - 1); this.pop(); this.before_stmt();\n const key = key_value(fi, insn.a);\n if (fi.strict) {\n this.emit(`if (${key} in $GV || !(${key} in $G)) $RT.put_global(${insn.a}, ${v}, 0, true); else $G${acc} = ${v};`);\n } else {\n /* sloppy assignment semantics (no throw) come from a non-strict helper in the factory scope */\n let idx = fi.sloppy_sets.get(insn.a);\n if (idx === undefined) { idx = fi.sloppy_sets.size; fi.sloppy_sets.set(insn.a, idx); }\n this.emit(`$ss${idx}(${v});`);\n }\n return false;\n }\n case OP.put_var_strict: {\n const v = this.pop(); const flag = this.pop(); this.before_stmt();\n this.emit(`$RT.put_global_strict(${insn.a}, ${this.par(flag)}, ${v.code});`);\n return false;\n }\n case OP.check_define_var: this.before_stmt(); this.emit(`$RT.check_define_var(${insn.a}, ${insn.b});`); return false;\n case OP.define_var: this.before_stmt(); this.emit(`$RT.define_var(${insn.a}, ${insn.b});`); return false;\n case OP.define_func: { const v = this.pop(); this.before_stmt(); this.emit(`$RT.define_func(${insn.a}, ${v.code}, ${insn.b});`); return false; }\n case OP.make_loc_ref: case OP.make_arg_ref: case OP.make_var_ref_ref: {\n /* the reference object is static (see KT.REF); only the property name is a value */\n this.push(P('undefined', PK.LIT));\n if (fi.atom_is_symbol(insn.a)) this.push(P(`$RT.atom_value(${insn.a})`, PK.EXPR));\n else this.push(P(JSON.stringify(fi.atom_name(insn.a)), PK.LIT));\n return false;\n }\n case OP.make_var_ref: {\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = $RT.get_global_ref(${insn.a}); $s${d + 1} = $s${d}[1]; $s${d} = $s${d}[0];`);\n this.push(P(`$s${d}`, PK.TEMP)); this.push(P(`$s${d + 1}`, PK.TEMP));\n return false;\n }\n case OP.delete_var: this.push(P(`$RT.delete_global(${insn.a})`, PK.EXPR)); return false;\n\n /* --- locals --- */\n case OP.get_loc: case OP.get_loc8: case OP.get_loc0: case OP.get_loc1: case OP.get_loc2: case OP.get_loc3:\n this.push(this.var_read(insn.a)); return false;\n case OP.put_loc: case OP.put_loc8: case OP.put_loc0: case OP.put_loc1: case OP.put_loc2: case OP.put_loc3: {\n const v = this.pop(); this.write_local(false, insn.a, v.code); return false;\n }\n case OP.set_loc: case OP.set_loc8: case OP.set_loc0: case OP.set_loc1: case OP.set_loc2: case OP.set_loc3: {\n const c = this.dup_code(this.depth - 1); this.write_local(false, insn.a, c); return false;\n }\n case OP.get_arg: case OP.get_arg0: case OP.get_arg1: case OP.get_arg2: case OP.get_arg3:\n this.push(this.arg_read(insn.a)); return false;\n case OP.put_arg: case OP.put_arg0: case OP.put_arg1: case OP.put_arg2: case OP.put_arg3: {\n const v = this.pop(); this.write_local(true, insn.a, v.code); return false;\n }\n case OP.set_arg: case OP.set_arg0: case OP.set_arg1: case OP.set_arg2: case OP.set_arg3: {\n const c = this.dup_code(this.depth - 1); this.write_local(true, insn.a, c); return false;\n }\n case OP.get_var_ref: case OP.get_var_ref0: case OP.get_var_ref1: case OP.get_var_ref2: case OP.get_var_ref3:\n this.push(P(`$vr[${insn.a}].get()`, PK.EXPR)); return false;\n case OP.put_var_ref: case OP.put_var_ref0: case OP.put_var_ref1: case OP.put_var_ref2: case OP.put_var_ref3: {\n const v = this.pop(); this.before_stmt(); this.emit(`$vr[${insn.a}].set(${v.code});`); return false;\n }\n case OP.set_var_ref: case OP.set_var_ref0: case OP.set_var_ref1: case OP.set_var_ref2: case OP.set_var_ref3: {\n const c = this.dup_code(this.depth - 1); this.before_stmt(); this.emit(`$vr[${insn.a}].set(${c});`); return false;\n }\n case OP.get_var_ref_check: {\n const d = this.depth; this.before_stmt();\n this.emit(`$s${d} = $vr[${insn.a}].get(); if ($s${d} === $U) $RT.throw_uninitialized($b, ${insn.a}, true);`);\n this.push(P(`$s${d}`, PK.TEMP)); return false;\n }\n case OP.put_var_ref_check: {\n const v = this.pop(); this.before_stmt();\n this.emit(`if ($vr[${insn.a}].get() === $U) $RT.throw_uninitialized($b, ${insn.a}, true); $vr[${insn.a}].set(${v.code});`);\n return false;\n }\n case OP.put_var_ref_check_init: {\n const v = this.pop(); this.before_stmt();\n this.emit(`if ($vr[${insn.a}].get() !== $U) $RT.throw_uninitialized($b, ${insn.a}, true); $vr[${insn.a}].set(${v.code});`);\n return false;\n }\n case OP.set_loc_uninitialized: this.write_local(false, insn.a, '$U'); return false;\n case OP.get_loc_check: case OP.get_loc_checkthis: {\n const d = this.depth; this.before_stmt();\n this.emit(`$s${d} = ${this.local_value(false, insn.a)}; if ($s${d} === $U) $RT.throw_uninitialized($b, ${insn.a}, false);`);\n this.push(P(`$s${d}`, PK.TEMP)); return false;\n }\n case OP.put_loc_check: {\n const v = this.pop(); this.before_stmt();\n this.emit(`if (${this.local_value(false, insn.a)} === $U) $RT.throw_uninitialized($b, ${insn.a}, false);`);\n this.write_local(false, insn.a, v.code);\n return false;\n }\n case OP.put_loc_check_init: {\n const v = this.pop(); this.before_stmt();\n this.emit(`if (${this.local_value(false, insn.a)} !== $U) $RT.throw_reference_error(\"'this' can be initialized only once\");`);\n this.write_local(false, insn.a, v.code);\n return false;\n }\n case OP.close_loc:\n if (fi.varCell[insn.a]) { this.before_stmt(); this.emit(`${fi.varName[insn.a]} = $RT.new_cell(${fi.varName[insn.a]}.get());`); }\n return false;\n\n /* --- control flow --- */\n case OP.goto: case OP.goto8: case OP.goto16:\n this.finalize();\n this.blk.term = { kind: 'jump', target: insn.label };\n return true;\n case OP.if_true: case OP.if_false: case OP.if_true8: case OP.if_false8: {\n let cond = this.pop();\n if (this.needs_moves() && cond.kind !== PK.LIT) {\n const t = this.tmp();\n this.flush_exprs();\n this.emit(`${t} = ${cond.code};`);\n cond = P(t, PK.TEMP);\n }\n this.finalize();\n const isTrue = (op === OP.if_true || op === OP.if_true8);\n this.blk.term = { kind: 'cond', cond: cond.code, tTrue: isTrue ? insn.label : insn.next, tFalse: isTrue ? insn.next : insn.label };\n return true;\n }\n case OP.catch:\n this.push(P('undefined', PK.LIT));\n return false;\n case OP.gosub: {\n const d = this.depth;\n const site = fi.A.sites.find(s => s.pc === insn.pc)!;\n this.push(P(`$s${d}`, PK.TEMP));\n this.finalize();\n this.emit(`$s${d} = ${site.id};`);\n this.blk.term = { kind: 'jump', target: insn.label };\n return true;\n }\n case OP.ret: {\n const k = fi.A.states[insn.pc]![this.depth - 1];\n if (!k || k.t !== KT.RET) bail('ret without return address');\n this.pop();\n this.finalize();\n const d = this.depth;\n this.blk.term = { kind: 'multi', multi: { expr: `$s${d}`, cases: k.sites!.map(id => ({ value: id, target: fi.A.sites[id].cont })) } };\n return true;\n }\n case OP.nip_catch: {\n const rv = this.pop();\n let i = this.depth - 1;\n while (i >= 0 && this.blk_kind(i).t !== KT.CATCH && this.blk_kind(i).t !== KT.CATCH0) i--;\n if (i < 0) bail('nip_catch');\n /* drop everything above the catch slot (their effects, if pending) and the catch slot */\n const dropped = this.slots.splice(i, this.depth - i);\n this.flush_exprs();\n for (const p of dropped) this.drop_value(p);\n this.push(rv);\n return false;\n }\n\n /* --- iteration --- */\n case OP.for_in_start: {\n const o = this.pop();\n this.push(P(`$RT.for_in_start(${this.par(o)})`, PK.EXPR)); return false;\n }\n case OP.for_in_next: {\n const it = this.dup_code(this.depth - 1);\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = $RT.for_in_next(${it}); if ($s${d} === $D) { $s${d} = undefined; $s${d + 1} = true; } else $s${d + 1} = false;`);\n this.push(P(`$s${d}`, PK.TEMP)); this.push(P(`$s${d + 1}`, PK.TEMP));\n return false;\n }\n case OP.for_of_start: {\n const o = this.pop();\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = $RT.get_iterator(${this.par(o)}); $s${d + 1} = ${this.get_field_atom(`$s${d}`, 'next')};`);\n this.push(P(`$s${d}`, PK.TEMP)); this.push(P(`$s${d + 1}`, PK.TEMP)); this.push(P('undefined', PK.LIT));\n return false;\n }\n case OP.for_of_next: {\n const offset = -3 - insn.a;\n const iter = this.depth + offset;\n if (iter < 0) bail('for_of_next offset');\n this.materialize(iter); this.materialize(iter + 1);\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = $RT.for_of_next($s${iter}, $s${iter + 1}); if ($s${d} === $D) { $s${iter} = undefined; $s${d} = undefined; $s${d + 1} = true; } else $s${d + 1} = false;`);\n this.push(P(`$s${d}`, PK.TEMP)); this.push(P(`$s${d + 1}`, PK.TEMP));\n return false;\n }\n case OP.iterator_check_object: {\n const v = this.dup_code(this.depth - 1);\n this.before_stmt();\n this.emit(`if (!${this.guard_obj(v)}) $RT.throw_type_error(\"iterator must return an object\");`);\n return false;\n }\n case OP.iterator_close: {\n const c = this.pop(); const nx = this.pop(); const it = this.pop();\n this.before_stmt();\n this.drop_value(c); this.drop_value(nx);\n const itc = it.kind === PK.EXPR ? (() => { const t = this.tmp(); this.emit(`${t} = ${it.code};`); return t; })() : it.code;\n this.emit(`if (${itc} !== undefined) $RT.iterator_close(${itc});`);\n return false;\n }\n case OP.iterator_next: {\n /* iter next catch val -> iter next catch ret */\n const val = this.pop();\n const it = this.dup_code(this.depth - 3), nx = this.dup_code(this.depth - 2);\n this.push(P(this.call_with_this(nx, it, [this.par(val)]), PK.EXPR));\n return false;\n }\n case OP.iterator_call: {\n const val = this.dup_code(this.depth - 1);\n const it = this.dup_code(this.depth - 4);\n const d = this.depth;\n this.before_stmt();\n const t = this.tmp();\n this.emit(`${t} = $RT.iterator_call(${it}, ${val}, ${insn.a}); if (${t} === $D) $s${d} = true; else { $s${d - 1} = ${t}; $s${d} = false; }`);\n this.push(P(`$s${d}`, PK.TEMP));\n return false;\n }\n\n /* --- properties --- */\n case OP.get_field: {\n const o = this.dup_code(this.depth - 1); this.pop();\n this.push(P(this.get_field(o, insn.a), PK.EXPR)); return false;\n }\n case OP.get_field2: {\n const o = this.dup_code(this.depth - 1);\n const method = is_prim_literal(o) ? null\n : { recv: o, access: key_access(fi, insn.a), prim: '$RT.call_method_prim', prim_args: `${o}, ${insn.a}`, pc: this.cur_pc };\n this.push(P(this.get_field(o, insn.a), PK.EXPR, { method })); return false;\n }\n case OP.get_length: {\n const o = this.dup_code(this.depth - 1); this.pop();\n this.push(P(is_prim_literal(o) ? `$RT.get_length(${o})` : `(${this.guard_obj(o)} ? ${o}${this.M()}.length${this.M()} : $RT.get_length(${o}))`, PK.EXPR));\n return false;\n }\n case OP.put_field: {\n const v = this.pop(); const o = this.dup_code(this.depth - 1); this.pop();\n this.before_stmt();\n this.emit(this.put_field_stmt(o, insn.a, is_prim_literal(o) ? v.code : this.store_value(v)));\n return false;\n }\n case OP.get_array_el: {\n const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n this.push(P(this.get_el(o, k), PK.EXPR)); return false;\n }\n case OP.get_array_el2: {\n const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.pop();\n const method = is_prim_literal(o) ? null\n : { recv: o, access: `[${k}]`, prim: '$RT.call_method_prim_key', prim_args: `${o}, ${k}`, pc: this.cur_pc };\n this.push(P(this.get_el(o, k), PK.EXPR, { method })); return false;\n }\n case OP.put_array_el: {\n const v = this.pop(); const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n this.before_stmt();\n this.emit(this.put_el_stmt(o, k, is_prim_literal(o) ? v.code : this.store_value(v)));\n return false;\n }\n case OP.get_ref_value: {\n const rk = this.kind_at(this.depth - 2);\n if (rk.t === KT.REF) { this.push(this.ref_read(rk)); return false; }\n const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.push(P(`$RT.get_ref_value(${o}, ${k}, ${fi.strict})`, PK.EXPR)); return false;\n }\n case OP.put_ref_value: {\n const rk = this.kind_at(this.depth - 3);\n const v = this.pop(); const k = this.pop(); const o = this.pop();\n if (rk.t === KT.REF) { this.drop_value(k); this.ref_write(rk, v.code); return false; }\n this.before_stmt();\n this.emit(`$RT.put_ref_value(${this.par(o)}, ${this.par(k)}, ${v.code}, ${fi.strict});`);\n return false;\n }\n case OP.get_super_value: {\n const k = this.pop(); const o = this.pop(); const t = this.pop();\n this.push(P(`$RT.get_super_value(${this.par(t)}, ${this.par(o)}, ${this.par(k)})`, PK.EXPR)); return false;\n }\n case OP.put_super_value: {\n const v = this.pop(); const k = this.pop(); const o = this.pop(); const t = this.pop();\n this.before_stmt();\n this.emit(`$RT.put_super_value(${this.par(t)}, ${this.par(o)}, ${this.par(k)}, ${v.code});`);\n return false;\n }\n case OP.define_field: {\n const v = this.pop(); const o = this.dup_code(this.depth - 1);\n const slot = this.top();\n this.before_stmt();\n const name = __JS_AtomIsTaggedInt(insn.a) ? null : fi.atom_name(insn.a);\n if (slot.fresh && name !== null && name !== '__proto__' && !(slot.mkeys && slot.mkeys.has(name))) {\n /* fresh object literal: a plain assignment while Object.prototype has no accessors */\n const vc = this.store_value(v);\n this.emit(`if ($P.ok) ${o}${key_access(fi, insn.a)} = ${vc}; else $RT.define_field(${o}, ${insn.a}, ${vc});`);\n } else {\n this.emit(`$RT.define_field(${o}, ${insn.a}, ${v.code});`);\n }\n return false;\n }\n case OP.define_array_el: {\n const v = this.pop(); const pos = this.dup_code(this.depth - 1); const arr = this.dup_code(this.depth - 2);\n this.before_stmt();\n this.emit(`$RT.define_array_el(${arr}, ${pos}, ${v.code});`);\n return false;\n }\n case OP.append: {\n const src = this.pop(); const pos = this.depth - 1; this.materialize(pos); const arr = this.dup_code(this.depth - 2);\n this.before_stmt();\n this.emit(`$s${pos} = $RT.append(${arr}, $s${pos}, ${src.code});`);\n return false;\n }\n case OP.copy_data_properties: {\n const mask = insn.a;\n const d = this.depth;\n const tgt = this.dup_code(d - 1 - (mask & 3)), src = this.dup_code(d - 1 - ((mask >> 2) & 7)), excl = this.dup_code(d - 1 - ((mask >> 5) & 7));\n this.before_stmt();\n this.emit(`$RT.copy_data_properties(${tgt}, ${src}, ${excl});`);\n return false;\n }\n case OP.get_private_field: {\n const name = this.pop(); const o = this.pop();\n this.push(P(`$RT.get_private_field(${this.par(o)}, ${this.par(name)})`, PK.EXPR)); return false;\n }\n case OP.put_private_field: { /* obj value prop -> */\n const name = this.pop(); const v = this.pop(); const o = this.pop();\n this.before_stmt();\n this.emit(`$RT.put_private_field(${this.par(o)}, ${this.par(name)}, ${this.par(v)});`);\n return false;\n }\n case OP.define_private_field: { /* obj prop value -> obj */\n const v = this.pop(); const name = this.pop(); const o = this.dup_code(this.depth - 1);\n this.before_stmt();\n this.emit(`$RT.define_private_field(${o}, ${this.par(name)}, ${v.code});`);\n return false;\n }\n case OP.private_in: {\n const name = this.pop(); const o = this.pop();\n this.push(P(`$RT.private_in(${this.par(o)}, ${this.par(name)})`, PK.EXPR)); return false;\n }\n case OP.set_name: {\n const f = this.dup_code(this.depth - 1);\n this.before_stmt(); this.emit(`$RT.set_name(${f}, ${insn.a});`); return false;\n }\n case OP.set_name_computed: {\n const f = this.dup_code(this.depth - 1), name = this.dup_code(this.depth - 2);\n this.before_stmt(); this.emit(`$RT.set_name_computed(${f}, ${name});`); return false;\n }\n case OP.set_proto: {\n const p = this.pop(); const o = this.dup_code(this.depth - 1);\n this.top().fresh = false;\n this.before_stmt(); this.emit(`$RT.set_proto(${o}, ${p.code});`); return false;\n }\n case OP.set_home_object: {\n const f = this.dup_code(this.depth - 1), home = this.dup_code(this.depth - 2);\n this.before_stmt(); this.emit(`$RT.set_home_object(${f}, ${home});`); return false;\n }\n case OP.define_method: {\n const f = this.pop(); const o = this.dup_code(this.depth - 1);\n const slot = this.top();\n if (slot.fresh) { if (!slot.mkeys) slot.mkeys = new Set(); slot.mkeys.add(fi.atom_name(insn.a)); }\n this.before_stmt(); this.emit(`$RT.define_method(${o}, ${insn.a}, ${f.code}, ${insn.b}, false);`); return false;\n }\n case OP.define_method_computed: {\n const f = this.pop(); const name = this.pop(); const o = this.dup_code(this.depth - 1);\n this.top().fresh = false;\n this.before_stmt(); this.emit(`$RT.define_method(${o}, ${this.par(name)}, ${f.code}, ${insn.a}, true);`); return false;\n }\n case OP.define_class: case OP.define_class_computed: {\n /* [name] parent ctor_bytecode -> [name] ctor proto */\n const bf = this.pop(); const parent = this.pop();\n if (bf.cpool < 0 || !(fi.b.cpool[bf.cpool] instanceof JSFunctionBytecode)) bail('define_class without constructor bytecode');\n const child = fi.b.cpool[bf.cpool] as JSFunctionBytecode;\n const computed = op === OP.define_class_computed;\n const name = computed ? this.dup_code(this.depth - 1) : String(insn.a);\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = $RT.define_class(${name}, ${this.par(parent)}, $cpool[${bf.cpool}], ${insn.b}, ${this.closure_refs(child)}, ${computed}); $s${d + 1} = $s${d}[1]; $s${d} = $s${d}[0];`);\n this.push(P(`$s${d}`, PK.TEMP)); this.push(P(`$s${d + 1}`, PK.TEMP));\n return false;\n }\n case OP.to_object: {\n const v = this.dup_code(this.depth - 1); this.pop();\n this.push(P(is_prim_literal(v) ? `$RT.to_object(${v})` : `(${this.guard_obj(v)} ? ${v} : $RT.to_object(${v}))`, PK.EXPR)); return false;\n }\n case OP.to_propkey: {\n const v = this.dup_code(this.depth - 1); this.pop();\n this.push(P(`(typeof ${v} === 'string' || typeof ${v} === 'number' || typeof ${v} === 'symbol' ? ${v} : $RT.to_propkey(${v}))`, PK.EXPR));\n return false;\n }\n case OP.to_propkey2: {\n const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.pop();\n this.before_stmt();\n this.emit(`if (${o} === undefined || ${o} === null) $RT.throw_type_error(\"value has no property\");`);\n this.push(P(`(typeof ${k} === 'string' || typeof ${k} === 'number' || typeof ${k} === 'symbol' ? ${k} : $RT.to_propkey(${k}))`, PK.EXPR));\n return false;\n }\n case OP.delete: {\n const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n if (is_prim_literal(o)) this.push(P(`$RT.delete(${o}, ${k}, ${fi.strict})`, PK.EXPR));\n else if (fi.strict) this.push(P(`(${this.guard_obj(o)} ? delete ${o}[${k}] : $RT.delete(${o}, ${k}, true))`, PK.EXPR));\n else { fi.uses_sdel = true; this.push(P(`(${this.guard_obj(o)} ? $sdel(${o}, ${k}) : $RT.delete(${o}, ${k}, false))`, PK.EXPR)); }\n return false;\n }\n\n /* --- operators --- */\n case OP.add: return this.binop('+');\n case OP.sub: return this.binop('-');\n case OP.mul: return this.binop('*');\n case OP.div: return this.binop('/');\n case OP.mod: return this.binop('%');\n case OP.pow: return this.binop('**');\n case OP.shl: return this.binop('<<');\n case OP.sar: return this.binop('>>');\n case OP.shr: return this.binop('>>>');\n case OP.and: return this.binop('&');\n case OP.or: return this.binop('|');\n case OP.xor: return this.binop('^');\n case OP.lt: return this.binop('<');\n case OP.lte: return this.binop('<=');\n case OP.gt: return this.binop('>');\n case OP.gte: return this.binop('>=');\n case OP.eq: return this.binop('==');\n case OP.neq: return this.binop('!=');\n case OP.strict_eq: return this.binop('===');\n case OP.strict_neq: return this.binop('!==');\n case OP.add_loc: {\n const v = this.pop();\n const cur = this.local_value(false, insn.a);\n this.write_local(false, insn.a, `${cur} + ${this.par(v)}`);\n return false;\n }\n case OP.inc_loc: case OP.dec_loc: {\n const cur = this.local_value(false, insn.a);\n const o = op === OP.inc_loc ? '+' : '-';\n this.write_local(false, insn.a, `(typeof ${cur} === 'number' ? ${cur} ${o} 1 : $RT.${op === OP.inc_loc ? 'inc' : 'dec'}(${cur}))`);\n return false;\n }\n case OP.inc: case OP.dec: {\n const x = this.dup_code(this.depth - 1); this.pop();\n const o = op === OP.inc ? '+' : '-';\n this.push(P(`(typeof ${x} === 'number' ? ${x} ${o} 1 : $RT.${op === OP.inc ? 'inc' : 'dec'}(${x}))`, PK.EXPR));\n return false;\n }\n case OP.post_inc: case OP.post_dec: {\n const x = this.dup_code(this.depth - 1); this.pop();\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = typeof ${x} === 'number' ? ${x} : $RT.to_numeric(${x});`);\n this.push(P(`$s${d}`, PK.TEMP));\n const o = op === OP.post_inc ? '+' : '-';\n this.push(P(`(typeof $s${d} === 'number' ? $s${d} ${o} 1 : $RT.${op === OP.post_inc ? 'inc' : 'dec'}($s${d}))`, PK.EXPR));\n return false;\n }\n case OP.neg: case OP.plus: case OP.not: {\n const x = this.pop();\n const o = op === OP.neg ? '-' : op === OP.plus ? '+' : '~';\n this.push(P(`${o}${this.par(x)}`, PK.EXPR));\n return false;\n }\n case OP.lnot: { const x = this.pop(); this.push(P(`!${this.par(x)}`, PK.EXPR)); return false; }\n case OP.typeof: {\n const x = this.pop();\n this.push(P(`typeof ${this.par(x)}`, PK.EXPR)); return false;\n }\n case OP.typeof_is_undefined: { const x = this.pop(); this.push(P(`(typeof ${this.par(x)} === 'undefined')`, PK.EXPR)); return false; }\n case OP.typeof_is_function: { const x = this.pop(); this.push(P(`(typeof ${this.par(x)} === 'function')`, PK.EXPR)); return false; }\n case OP.is_undefined: { const x = this.pop(); this.push(P(`(${this.par(x)} === undefined)`, PK.EXPR)); return false; }\n case OP.is_null: { const x = this.pop(); this.push(P(`(${this.par(x)} === null)`, PK.EXPR)); return false; }\n case OP.is_undefined_or_null: {\n const x = this.dup_code(this.depth - 1); this.pop();\n this.push(P(`(${x} === undefined || ${x} === null)`, PK.EXPR)); return false;\n }\n case OP.in: {\n const o = this.dup_code(this.depth - 1); const k = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n if (is_prim_literal(o)) this.push(P(`$RT.in(${k}, ${o})`, PK.EXPR));\n else this.push(P(`(${this.guard_obj(o)} ? (${k} in ${o}) : $RT.in(${k}, ${o}))`, PK.EXPR));\n return false;\n }\n case OP.import: {\n /* dynamic import(specifier, options): a promise; the specifier is converted to a string first */\n const opts = this.dup_code(this.depth - 1); const spec = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n this.push(P(`$RT.dynamic_import($b, ${spec}, ${opts})`, PK.EXPR));\n return false;\n }\n case OP.instanceof: {\n const c = this.dup_code(this.depth - 1); const v = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n if (is_prim_literal(c)) this.push(P(`$RT.instanceof(${v}, ${c})`, PK.EXPR));\n else this.push(P(`(${this.guard_obj(c)} ? (${v} instanceof ${c}) : $RT.instanceof(${v}, ${c}))`, PK.EXPR));\n return false;\n }\n case OP.nop: return false;\n default:\n bail(`unsupported opcode ${insn.name}`);\n }\n }\n\n binop(o: string): boolean {\n const b = this.pop(); const a = this.pop();\n /* JSC reports a binary expression at its start (the marker push() adds), V8 at the operator */\n this.push(P(`${this.par(a)} ${this.M()}${o} ${this.par(b)}`, PK.EXPR));\n return false;\n }\n\n /* kind of slot i before the current instruction */\n kind_at(i: number): Kind {\n const st = this.fi.A.states[this.cur_pc]!;\n return st[i] ?? KV;\n }\n blk_kind(i: number): Kind { return this.kind_at(i); }\n cur_pc = 0;\n\n ref_read(k: Kind): Pending {\n switch (k.ref_kind) {\n case RefKind.LOC: return this.var_read(k.ref_idx!);\n case RefKind.ARG: return this.arg_read(k.ref_idx!);\n default: return P(`$vr[${k.ref_idx}].get()`, PK.EXPR);\n }\n }\n ref_write(k: Kind, value: string): void {\n switch (k.ref_kind) {\n case RefKind.LOC: this.write_local(false, k.ref_idx!, value); break;\n case RefKind.ARG: this.write_local(true, k.ref_idx!, value); break;\n default: this.before_stmt(); this.emit(`$vr[${k.ref_idx}].set(${value});`); break;\n }\n }\n\n needs_moves(): boolean {\n for (let i = 0; i < this.depth; i++) { const p = this.slots[i]; if (!(p.kind === PK.TEMP && p.code === `$s${i}`)) return true; }\n return false;\n }\n\n pop_args(argc: number): string[] {\n const args: string[] = [];\n for (let i = 0; i < argc; i++) args.push(this.pop().code);\n return args.reverse();\n }\n\n get_field_atom(obj: string, name: string): string {\n if (is_prim_literal(obj)) return `$RT.get_field_str(${obj}, ${JSON.stringify(name)})`;\n return `(${this.guard_obj(obj)} ? ${obj}${this.M()}.${name}${this.M()} : $RT.get_field_str(${obj}, ${JSON.stringify(name)}))`;\n }\n\n emit_return(value: string): void {\n const fi = this.fi;\n if (fi.constructible && !fi.derived) {\n const t = this.tmp();\n this.emit(`${t} = ${value}; return $nt !== undefined ? (${this.guard_obj(t)} ? ${t} : $t) : ${t};`);\n } else if (value.indexOf('(') >= 0) {\n /* never `return f()`: JavaScriptCore elides the frame of a strict-mode tail call, which\n would hide the function from backtraces and turn tail recursion into an endless loop\n instead of a stack overflow */\n this.emit(`$r = ${value}; return $r;`);\n } else {\n this.emit(`return ${value};`);\n }\n this.blk.term = { kind: 'none' };\n }\n\n /* `.name` / `[\"name\"]` access text for a global variable atom, or null for a symbol */\n global_access(atom: number): string | null {\n if (__JS_AtomIsTaggedInt(atom) || this.fi.atom_is_symbol(atom)) return null;\n return key_access(this.fi, atom);\n }\n\n /* the var_refs array expression for a child closure */\n closure_refs(child: JSFunctionBytecode): string {\n const fi = this.fi;\n const refs: string[] = [];\n for (const cv of child.closure_var) {\n if (cv.is_local) {\n if (cv.is_arg) {\n if (!fi.argCell[cv.var_idx]) bail('closure captures an argument that is not a cell');\n refs.push(fi.argName[cv.var_idx]);\n } else {\n if (!fi.varCell[cv.var_idx]) bail('closure captures a local that is not a cell');\n refs.push(fi.varName[cv.var_idx]);\n }\n } else {\n refs.push(`$vr[${cv.var_idx}]`);\n }\n }\n return `[${refs.join(', ')}]`;\n }\n}\n\n/* ---------------------------------------------------------------------\n 5. Relooper\n --------------------------------------------------------------------- */\n\n/* a node of a region graph: a block or a nested try-region */\ninterface Node {\n id: number; /* block id, or -(region id) - 1 for regions */\n block: Block | null;\n region: Region | null;\n succs: number[]; /* node ids inside the same region graph */\n}\n\ninterface Struct {\n kind: 'loop' | 'block' | 'try' | 'switch' | 'tryswitch';\n label: string;\n entries: Set<number>; /* loop: continue targets */\n nextEntries: Set<number>; /* targets reached by `break label` */\n nextIsMulti: boolean;\n nodes?: Set<number>; /* switch: node ids handled by the switch */\n}\n\nclass Relooper {\n fi: FuncInfo;\n cfg: CFG;\n labelCount = 0;\n nodeMap = new Map<number, Node>(); /* all nodes of all regions, by node id */\n blockNode = new Map<number, number>(); /* block id -> node id representing it in its parent's graph (block or region) */\n\n constructor(fi: FuncInfo, cfg: CFG) {\n this.fi = fi; this.cfg = cfg;\n }\n\n label(prefix: string): string { return `${prefix}${this.labelCount++}`; }\n\n /* region whose graph is being emitted */\n curRegion: Region | null = null;\n\n /* node id representing the block at `pc` inside the current region graph: the block itself,\n or the child region that contains it */\n target_node(pc: number): number {\n const tb = this.cfg.byPc.get(pc);\n if (!tb) bail(`branch to unknown block ${pc}`);\n const r = this.curRegion!;\n if (tb.region === r) return tb.id;\n let d = tb.region;\n while (d && d.parent !== r) d = d.parent;\n if (d) return this.region_node_id(d);\n /* exit to an enclosing region: the block id (resolved through the context stack) */\n return tb.id;\n }\n\n region_node_id(r: Region): number { return -r.id - 1; }\n\n /* build the node graph of every region */\n build(): void {\n const { blocks, byPc } = this.cfg;\n /* block successors */\n for (const blk of blocks) {\n if (blk.dead) continue;\n const t = blk.term;\n const targets: number[] = [];\n const add = (pc: number | undefined): void => {\n if (pc === undefined) return;\n const tb = byPc.get(pc);\n if (!tb) bail(`branch to unknown block ${pc}`);\n targets.push(tb.id);\n };\n switch (t.kind) {\n case 'fall': case 'jump': add(t.target); break;\n case 'cond': add(t.tTrue); add(t.tFalse); break;\n case 'multi': for (const c of t.multi!.cases) add(c.target); break;\n case 'none': break;\n }\n blk.succs = [...new Set(targets)];\n }\n /* region exits and node graphs */\n for (const r of this.cfg.regions) {\n for (const blk of r.blocks) {\n for (const s of blk.succs) {\n const tb = blocks[s];\n if (tb.region === r) continue;\n /* descendant? */\n let d = tb.region;\n while (d && d.parent !== r) d = d.parent;\n if (d) {\n if (d.osr_chain) bail('osr: a try-region containing the loop header is re-entered');\n if (d.entry !== tb) bail('jump into the middle of a try-region');\n continue;\n }\n /* exit: must be in the parent region */\n if (!r.parent || tb.region !== r.parent) bail('try-region exit skips a level');\n r.exits.add(tb.id);\n }\n }\n }\n for (const r of this.cfg.regions) {\n for (const blk of r.blocks) {\n const succs: number[] = [];\n for (const s of blk.succs) {\n const tb = blocks[s];\n if (tb.region === r) succs.push(tb.id);\n else {\n let d = tb.region;\n while (d && d.parent !== r) d = d.parent;\n if (d) succs.push(this.region_node_id(d));\n /* else: exit, not an internal edge */\n }\n }\n this.nodeMap.set(blk.id, { id: blk.id, block: blk, region: null, succs });\n }\n for (const c of r.children) {\n const succs = [...c.exits];\n if (c.kind === KT.CATCH) {\n const hb = byPc.get(c.handler);\n if (!hb || hb.region !== r) bail('catch handler outside the parent region');\n if (!succs.includes(hb.id)) succs.push(hb.id);\n }\n this.nodeMap.set(this.region_node_id(c), { id: this.region_node_id(c), block: null, region: c, succs });\n }\n }\n }\n\n /* node successors restricted to `nodes` and excluding loop back-edges */\n succs_in(n: Node, nodes: Set<number>, loopEntries: Set<number> | null): number[] {\n const r: number[] = [];\n for (const s of n.succs) if (nodes.has(s) && !(loopEntries && loopEntries.has(s))) r.push(s);\n return r;\n }\n\n reach(from: number, nodes: Set<number>, loopEntries: Set<number> | null): Set<number> {\n const seen = new Set<number>();\n const stack = [from];\n while (stack.length) {\n const succs = this.nodeMap.get(stack.pop()!)!.succs;\n for (let i = 0; i < succs.length; i++) {\n const s = succs[i];\n if (nodes.has(s) && !(loopEntries !== null && loopEntries.has(s)) && !seen.has(s)) { seen.add(s); stack.push(s); }\n }\n }\n return seen;\n }\n\n /* nodes of `nodes` from which an entry is reachable (the entries included): one backward\n search instead of a forward search from every node. Same edges as reach(). */\n reaching(entries: number[], nodes: Set<number>, loopEntries: Set<number> | null): Set<number> {\n const preds = new Map<number, number[]>();\n for (const id of nodes) {\n const succs = this.nodeMap.get(id)!.succs;\n for (let i = 0; i < succs.length; i++) {\n const s = succs[i];\n if (!nodes.has(s) || (loopEntries !== null && loopEntries.has(s))) continue;\n let l = preds.get(s);\n if (l === undefined) { l = []; preds.set(s, l); }\n l.push(id);\n }\n }\n const found = new Set<number>(entries);\n const stack = [...entries];\n while (stack.length) {\n const l = preds.get(stack.pop()!);\n if (l === undefined) continue;\n for (let i = 0; i < l.length; i++) if (!found.has(l[i])) { found.add(l[i]); stack.push(l[i]); }\n }\n /* entries first, then the other nodes in the order of `nodes` (emission follows set order) */\n const inner = new Set<number>(entries);\n for (const id of nodes) if (found.has(id)) inner.add(id);\n return inner;\n }\n\n /* --- branch emission --- */\n branch_to(target: number, ctx: Struct[], fallthroughOk: Set<number> | null): string {\n /* prefer continue to an enclosing loop */\n for (let i = ctx.length - 1; i >= 0; i--) {\n const s = ctx[i];\n if (s.kind === 'loop' && s.entries.has(target)) {\n return (s.entries.size > 1 ? `$l = ${target}; ` : '') + `continue ${s.label};`;\n }\n }\n for (let i = ctx.length - 1; i >= 0; i--) {\n const s = ctx[i];\n if (s.kind === 'switch') {\n if (s.nodes!.has(target)) return `$l = ${target}; continue ${s.label};`;\n continue;\n }\n if (s.kind === 'tryswitch') {\n if (s.nextEntries.has(target)) return `$l = ${target}; break ${s.label};`;\n continue;\n }\n if (s.nextEntries.has(target)) {\n if (fallthroughOk && fallthroughOk.has(target) && i === ctx.length - 1) return s.nextIsMulti ? `$l = ${target};` : '';\n return (s.nextIsMulti ? `$l = ${target}; ` : '') + `break ${s.label};`;\n }\n }\n bail(`unstructured branch to ${target}`);\n }\n\n /* the terminator of a block, given how each target is reached */\n emit_term(blk: Block, ctx: Struct[], fallthroughOk: Set<number> | null): string {\n const t = blk.term;\n const idOf = (pc: number): number => this.target_node(pc);\n switch (t.kind) {\n case 'none': return '';\n case 'fall': case 'jump': return this.branch_to(idOf(t.target!), ctx, fallthroughOk);\n case 'cond': {\n const a = idOf(t.tTrue!), b = idOf(t.tFalse!);\n if (a === b) return this.branch_to(a, ctx, fallthroughOk);\n const ba = this.branch_to(a, ctx, null), bb = this.branch_to(b, ctx, fallthroughOk);\n return `if (${t.cond}) { ${ba} } ${bb}`;\n }\n case 'multi': {\n const parts: string[] = [];\n const cases = t.multi!.cases;\n for (let i = 0; i < cases.length; i++) {\n const c = cases[i];\n const br = this.branch_to(idOf(c.target), ctx, i === cases.length - 1 ? fallthroughOk : null);\n if (i === cases.length - 1) parts.push(`{ ${br} }`);\n else parts.push(`if (${t.multi!.expr} === ${c.value}) { ${br} } else `);\n }\n return parts.join('');\n }\n }\n }\n\n /* --- structured emission of a region graph --- */\n emit_region(r: Region, ctx: Struct[]): string {\n const nodes = new Set<number>();\n for (const b of r.blocks) nodes.add(b.id);\n for (const c of r.children) nodes.add(this.region_node_id(c));\n const saved = this.curRegion;\n this.curRegion = r;\n try {\n if (jit_config.cfg === 'switch') return this.emit_switch(r, nodes, ctx);\n return this.reloop(nodes, [r.entry_node ?? r.entry!.id], ctx, null);\n } finally {\n this.curRegion = saved;\n }\n }\n\n reloop(nodes: Set<number>, entries: number[], ctx: Struct[], loopEntries: Set<number> | null): string {\n if (entries.length === 0 || nodes.size === 0) return '';\n if (entries.length === 1) {\n const e = entries[0];\n let hasPred = false;\n for (const id of nodes) {\n if (this.succs_in(this.nodeMap.get(id)!, nodes, loopEntries).includes(e)) { hasPred = true; break; }\n }\n if (!hasPred) return this.emit_simple(e, nodes, ctx, loopEntries);\n }\n /* loop: can some entry reach itself? */\n let isLoop = false;\n for (const e of entries) if (this.reach(e, nodes, loopEntries).has(e)) { isLoop = true; break; }\n if (isLoop) {\n const entrySet = new Set(entries);\n /* inner: nodes that can reach an entry */\n const inner = this.reaching(entries, nodes, loopEntries);\n const outer = new Set<number>();\n for (const id of nodes) if (!inner.has(id)) outer.add(id);\n const nextEntries = new Set<number>();\n for (const id of inner) for (const s of this.succs_in(this.nodeMap.get(id)!, nodes, loopEntries)) if (outer.has(s)) nextEntries.add(s);\n const label = this.label('$L');\n const st: Struct = { kind: 'loop', label, entries: entrySet, nextEntries, nextIsMulti: nextEntries.size > 1 };\n const body = this.reloop(inner, entries, [...ctx, st], entrySet);\n return `${label}: for (;;) {\\n${POLL}${body}\\n}\\n` + this.reloop(outer, [...nextEntries], ctx, loopEntries);\n }\n /* multiple */\n return this.emit_multiple(nodes, entries.map(e => ({ cond: `$l === ${e}`, entry: e })), ctx, loopEntries, '');\n }\n\n /* groups: nodes reachable from exactly one entry */\n groups(nodes: Set<number>, entries: number[], loopEntries: Set<number> | null): Map<number, Set<number>> {\n const reachFrom = new Map<number, Set<number>>();\n for (const e of entries) { const s = this.reach(e, nodes, loopEntries); s.add(e); reachFrom.set(e, s); }\n const g = new Map<number, Set<number>>();\n for (const e of entries) {\n const set = new Set<number>();\n for (const id of reachFrom.get(e)!) {\n let only = true;\n for (const e2 of entries) if (e2 !== e && reachFrom.get(e2)!.has(id)) { only = false; break; }\n if (only) set.add(id);\n }\n /* an entry that is reachable from another entry has no group of its own */\n if (!set.has(e)) set.clear();\n g.set(e, set);\n }\n return g;\n }\n\n /* emit a dispatch on `conds` (if/else chain), each arm containing the independent group of\n its entry; `prefix` is code emitted before the dispatch (the preceding block) */\n emit_multiple(nodes: Set<number>, arms: { cond: string | null; entry: number }[], ctx: Struct[], loopEntries: Set<number> | null, prefix: string): string {\n const isInternal = (e: number): boolean => nodes.has(e) && !(loopEntries && loopEntries.has(e));\n const entries = [...new Set(arms.map(a => a.entry))].filter(isInternal);\n const g = this.groups(nodes, entries, loopEntries);\n const handled = new Set<number>();\n for (const s of g.values()) for (const id of s) handled.add(id);\n const remaining = new Set<number>();\n for (const id of nodes) if (!handled.has(id)) remaining.add(id);\n const remEntries = new Set<number>();\n for (const e of entries) if (g.get(e)!.size === 0) remEntries.add(e);\n for (const id of handled) for (const s of this.succs_in(this.nodeMap.get(id)!, nodes, loopEntries)) if (remaining.has(s)) remEntries.add(s);\n const label = this.label('$M');\n const st: Struct = { kind: 'block', label, entries: new Set(), nextEntries: remEntries, nextIsMulti: remEntries.size > 1 };\n const innerCtx = [...ctx, st];\n let code = '';\n for (let i = 0; i < arms.length; i++) {\n const arm = arms[i];\n const grp = isInternal(arm.entry) ? g.get(arm.entry)! : null;\n let body: string;\n if (grp === null) body = this.branch_to(arm.entry, innerCtx, null);\n else if (grp.size === 0) body = this.branch_to(arm.entry, innerCtx, remEntries);\n else body = this.reloop(grp, [arm.entry], innerCtx, loopEntries);\n if (arm.cond === null) {\n code += i > 0 ? `else {\\n${body}\\n}\\n` : `{\\n${body}\\n}\\n`;\n } else {\n code += `${i > 0 ? 'else ' : ''}if (${arm.cond}) {\\n${body}\\n}\\n`;\n }\n }\n const out = `${prefix}${label}: {\\n${code}\\n}\\n` + this.reloop(remaining, [...remEntries], ctx, loopEntries);\n return out;\n }\n\n emit_simple(e: number, nodes: Set<number>, ctx: Struct[], loopEntries: Set<number> | null): string {\n const node = this.nodeMap.get(e)!;\n const rest = new Set(nodes); rest.delete(e);\n const internal = this.succs_in(node, rest, loopEntries);\n const nextEntries = new Set(internal);\n\n if (node.region) {\n /* nested try-region */\n const r = node.region;\n const label = this.label('$T');\n const st: Struct = { kind: 'try', label, entries: new Set(), nextEntries, nextIsMulti: nextEntries.size > 1 };\n const innerCtx = [...ctx, st];\n const body = this.emit_region(r, innerCtx);\n let handler: string;\n if (r.kind === KT.CATCH) {\n const hb = this.cfg.byPc.get(r.handler)!;\n handler = `$s${r.slot} = $e; ${this.branch_to(hb.id, innerCtx, null)}`;\n } else {\n handler = `$RT.iterator_close_exc($s${r.slot - 2}); throw $e;`;\n }\n const code = `${label}: try {\\n${body}\\n} catch ($e) {\\n$e = $RT.catchable($e); ${handler}\\n}\\n`;\n return code + this.reloop(rest, [...nextEntries], ctx, loopEntries);\n }\n\n const blk = node.block!;\n const t = blk.term;\n const idOf = (pc: number): number => this.target_node(pc);\n let code = blk.code;\n switch (t.kind) {\n case 'none':\n return code;\n case 'fall': case 'jump': {\n const target = idOf(t.target!);\n if (rest.has(target) && !(loopEntries && loopEntries.has(target))) {\n /* fallthrough into the next structure */\n return code + this.reloop(rest, [target], ctx, loopEntries);\n }\n return code + this.branch_to(target, ctx, null) + '\\n';\n }\n case 'cond': {\n const a = idOf(t.tTrue!), b = idOf(t.tFalse!);\n const aIn = rest.has(a) && !(loopEntries && loopEntries.has(a));\n const bIn = rest.has(b) && !(loopEntries && loopEntries.has(b));\n if (aIn && bIn && a !== b) {\n return this.emit_multiple(rest, [{ cond: t.cond!, entry: a }, { cond: null, entry: b }], ctx, loopEntries, code);\n }\n if (aIn && !bIn) {\n return code + `if (!(${t.cond})) { ${this.branch_to(b, ctx, null)} }\\n` + this.reloop(rest, [a], ctx, loopEntries);\n }\n if (bIn && !aIn) {\n return code + `if (${t.cond}) { ${this.branch_to(a, ctx, null)} }\\n` + this.reloop(rest, [b], ctx, loopEntries);\n }\n if (a === b) {\n if (aIn) return code + this.reloop(rest, [a], ctx, loopEntries);\n return code + this.branch_to(a, ctx, null) + '\\n';\n }\n return code + `if (${t.cond}) { ${this.branch_to(a, ctx, null)} }\\n${this.branch_to(b, ctx, null)}\\n`;\n }\n case 'multi': {\n const cases = t.multi!.cases;\n const arms = cases.map((c, i) => ({ cond: i === cases.length - 1 ? null : `${t.multi!.expr} === ${c.value}`, entry: idOf(c.target) }));\n const anyIn = arms.some(a => rest.has(a.entry) && !(loopEntries && loopEntries.has(a.entry)));\n if (anyIn && new Set(arms.map(a => a.entry)).size === arms.length) {\n return this.emit_multiple(rest, arms, ctx, loopEntries, code);\n }\n return code + this.emit_term(blk, ctx, null) + '\\n';\n }\n }\n }\n\n /* --- state machine fallback --- */\n emit_switch(r: Region, nodes: Set<number>, ctx: Struct[]): string {\n const label = this.label('$S');\n const st: Struct = { kind: 'switch', label, entries: new Set(), nextEntries: new Set(), nextIsMulti: true, nodes };\n const innerCtx = [...ctx, st];\n let cases = '';\n for (const id of nodes) {\n const node = this.nodeMap.get(id)!;\n if (node.region) {\n const c = node.region;\n const tl = this.label('$T');\n const tst: Struct = { kind: 'tryswitch', label: tl, entries: new Set(), nextEntries: new Set(node.succs), nextIsMulti: true };\n const body = this.emit_region(c, [...innerCtx, tst]);\n let handler: string;\n if (c.kind === KT.CATCH) {\n const hb = this.cfg.byPc.get(c.handler)!;\n handler = `$s${c.slot} = $e; $l = ${hb.id}; break ${tl};`;\n } else {\n handler = `$RT.iterator_close_exc($s${c.slot - 2}); throw $e;`;\n }\n cases += `case ${id}: ${tl}: try {\\n${body}\\n} catch ($e) {\\n$e = $RT.catchable($e); ${handler}\\n}\\ncontinue ${label};\\n`;\n } else {\n const blk = node.block!;\n cases += `case ${blk.id}: {\\n${blk.code}${this.emit_term(blk, innerCtx, null)}\\n}\\n`;\n }\n }\n return `$l = ${r.entry_node ?? r.entry!.id};\\n${label}: for (;;) {\\n${POLL}switch ($l) {\\n${cases}default: $RT.throw_internal_error(\"jit: bad state \" + $l);\\n}\\n}\\n`;\n }\n}\n\n/* ---------------------------------------------------------------------\n 6. Driver\n --------------------------------------------------------------------- */\n\nexport interface JitCompiled {\n /* instantiate the function for one closure: returns [function object, direct entry, private\n copy factory]. `func_obj` overrides the function object (tier-up of an existing interpreter\n wrapper). The private copy factory (natural convention only, else null) returns a callable\n with the host convention and the host Function.prototype, never reachable from guest code. */\n make: (var_refs: any[], func_obj?: any) => [Function, Function, (() => Function) | null];\n source: string;\n name: string;\n /* the backtrace side table (src/jit_stack.ts), kept alive with the bytecode */\n stack: CompiledEntry;\n /* on-stack replacement variant: the state layout (see JitSource.osr) */\n osr?: { arg_cell: boolean[]; var_cell: boolean[]; depth: number };\n}\n\nexport interface JitSource {\n /* the factory source, markers as comments */\n source: string;\n name: string;\n /* on-stack replacement variant: which arguments/locals are cells, and the stack depth at the\n loop header */\n osr?: { arg_cell: boolean[]; var_cell: boolean[]; depth: number };\n}\n\n/* used by the runtime adapter when compiled code creates a closure: the compiled form if the\n function is (or should now be) compiled, else null (interpreter wrapper, tiered up later) */\nfunction jit_closure_compile(ctx: JSContext, b: JSFunctionBytecode): JitCompiled | null {\n if (b.compiled) return b.compiled as JitCompiled;\n if (b.no_jit || jit_config.mode === 'off') return null;\n /* closures created by compiled code are compiled when created in hot mode too: the creating\n code is hot, so its closures are likely to run, and a compiled function object is cheaper\n to call than a wrapper (closures created by the interpreter stay lazy) */\n return jit_compile(ctx, b);\n}\n\nfunction func_name(ctx: JSContext, b: JSFunctionBytecode): string {\n return b.func_name ? JS_AtomGetStr(ctx, b.func_name) : '';\n}\n\n/* generate the factory source for a function; throws JitBail. `id` is the compiled function's\n id in the backtrace registry (0 when it is not registered). */\nexport interface JitGenOptions {\n /* calling convention (default: jit_config.conv) */\n conv?: JitConfig['conv'];\n /* on-stack replacement variant entered at this loop header pc (explicit convention): the\n direct entry is `(this, new_target, state)` with state = { a: args, v: locals, s: stack }\n (cells for captured variables, see JitSource.osr) */\n osr?: number;\n}\n\nexport function jit_generate_source(ctx: JSContext, b: JSFunctionBytecode, id = 0, opts: JitGenOptions = {}): JitSource {\n if (b.func_kind !== JSFunctionKind.NORMAL) bail('generator or async function');\n const insns = decode(b);\n const A = analyze(b, insns);\n const cfg = build_blocks(insns, A);\n const osr = opts.osr;\n if (osr !== undefined) {\n if ((opts.conv ?? jit_config.conv) !== 'forwarder') bail('osr: needs the explicit convention');\n osr_prepare(cfg, A, osr);\n }\n const strict = (b.js_mode & JS_MODE_STRICT) !== 0;\n const constructible = b.has_prototype || b.is_derived_class_constructor || A.is_ctor;\n\n const fi: FuncInfo = {\n ctx, b, A, strict, constructible, derived: b.is_derived_class_constructor, uses_direct: false, uses_global: false, uses_w: false,\n natural: (opts.conv ?? jit_config.conv) === 'natural', arg_off: (opts.conv ?? jit_config.conv) === 'natural' ? 0 : 2,\n sloppy_sets: new Map(), sloppy_props: new Map(), uses_spe: false, uses_sdel: false,\n argName: [], argCell: [], varName: [], varCell: [],\n atom_name: (atom) => JS_AtomGetStr(ctx, atom),\n atom_is_symbol: (atom) => ctx.rt.atoms.isSymbol(atom),\n };\n for (let i = 0; i < b.arg_count; i++) {\n const vd = b.vardefs[i];\n const cell = (vd?.is_captured ?? false) || A.uses_mapped_arguments;\n fi.argCell.push(cell);\n fi.argName.push(cell ? `$c${i}` : `$a${i}`);\n }\n for (let i = 0; i < b.var_count; i++) {\n const vd = b.vardefs[b.arg_count + i];\n const cell = vd?.is_captured ?? false;\n fi.varCell.push(cell);\n fi.varName.push(`$v${i}`);\n }\n /* variables referenced by child closures must be cells even if the parser did not flag them */\n for (const c of b.cpool) {\n if (!(c instanceof JSFunctionBytecode)) continue;\n for (const cv of c.closure_var) {\n if (!cv.is_local) continue;\n if (cv.is_arg) { if (cv.var_idx < fi.argCell.length) { fi.argCell[cv.var_idx] = true; fi.argName[cv.var_idx] = `$c${cv.var_idx}`; } }\n else if (cv.var_idx < fi.varCell.length) fi.varCell[cv.var_idx] = true;\n }\n }\n\n /* blocks */\n let maxDepth = 0;\n let scratch = 0;\n for (const blk of cfg.blocks) {\n if (blk.dead) continue;\n const em = new BlockEmitter(fi, blk);\n /* translate instruction by instruction, tracking the pc for kind lookups */\n const n = blk.insns.length;\n let terminated = false;\n for (let idx = 0; idx < n; idx++) {\n const insn = blk.insns[idx];\n em.cur_pc = insn.pc;\n maxDepth = Math.max(maxDepth, em.depth + 4);\n if (em.translate(insn, idx === n - 1)) {\n if (idx !== n - 1) bail('terminator in the middle of a block');\n terminated = true;\n break;\n }\n maxDepth = Math.max(maxDepth, em.depth + 2);\n }\n if (!terminated) {\n em.finalize();\n blk.term = { kind: 'fall', target: blk.insns[n - 1].next };\n }\n blk.code = em.out.length ? em.out.join('\\n') + '\\n' : '';\n scratch = Math.max(scratch, em.scratch);\n }\n maxDepth = Math.max(maxDepth, b.stack_size + 2);\n\n const rl = new Relooper(fi, cfg);\n rl.build();\n const body = rl.emit_region(cfg.root, []);\n\n /* assemble */\n const name = func_name(ctx, b);\n const decls: string[] = [];\n for (let i = 0; i < maxDepth; i++) decls.push(`$s${i}`);\n for (let i = 0; i < scratch; i++) decls.push(`$x${i}`);\n decls.push('$l', '$e', '$r');\n if (fi.uses_direct) decls.push('$d');\n if (fi.uses_global) decls.push('$g');\n if (fi.uses_w) decls.push('$w');\n const params = ['$t', '$nt'];\n const fwparams: string[] = [];\n for (let i = 0; i < b.arg_count; i++) { params.push(`$a${i}`); fwparams.push(`$a${i}`); }\n /* every entry polls, as every loop head does: recursion can run unbounded without a back edge */\n let prologue = POLL;\n const natural = fi.natural;\n if (osr !== undefined) {\n /* replacement entry: the interpreter frame's state (cells for captured variables) */\n params.length = 2;\n params.push('$S');\n for (let i = 0; i < b.arg_count; i++) prologue += `let ${fi.argName[i]} = $S.a[${i}];\\n`;\n for (let i = 0; i < b.var_count; i++) prologue += `let $v${i} = $S.v[${i}];\\n`;\n const depth = cfg.byPc.get(osr)!.stateIn.length;\n for (let d = 0; d < depth; d++) prologue += `$s${d} = $S.s[${d}];\\n`;\n } else {\n for (let i = 0; i < b.arg_count; i++) if (fi.argCell[i]) prologue += `let $c${i} = $RT.new_cell($a${i});\\n`;\n for (let i = 0; i < b.var_count; i++) prologue += fi.varCell[i] ? `let $v${i} = $RT.new_cell(undefined);\\n` : `let $v${i};\\n`;\n if (constructible) {\n if (!b.is_derived_class_constructor) {\n /* construct call: create `this` unless the caller already did (the host, for `new fw()`\n with an object prototype, or the interpreter's legacy constructor path) */\n if (natural) prologue += `if ($nt !== undefined && (typeof ($xp = $nt.prototype) === 'object' ? $xp === null : typeof $xp !== 'function')) $t = $RT.create_this($nt);\\n`;\n else prologue += `if ($nt !== undefined && $t === undefined) $t = $RT.create_this($nt);\\n`;\n }\n } else if (!natural) {\n prologue += `if ($nt !== undefined) $RT.throw_not_a_constructor($fo);\\n`;\n }\n }\n const safe = name && IDENT_RE.test(name) ? name : '';\n const fname = safe ? `$f_${safe}` : '$f';\n const fwname = safe ? `$fw_${safe}` : '$fw';\n /* the forwarder is the guest-visible function object (natural host convention); it passes\n the declared parameters, or every argument when the body looks at `arguments`/rest */\n /* a rest parameter would forbid the \"use strict\" directive: forward `arguments` instead */\n const fwargs = A.uses_arguments ? [] : fwparams;\n const fwpass = A.uses_arguments ? ['...arguments'] : fwparams;\n const call = (t: string, nt: string): string => `$direct(${[t, nt, ...fwpass].join(', ')})`;\n let forwarder: string;\n if (constructible) {\n /* `new fw(...)`: the host already created `this` from new.target.prototype; keep it when\n that prototype is an object (the direct entry creates `this` itself otherwise) */\n const host_this = `((typeof ($xp = new.target.prototype) === 'object' ? $xp !== null : typeof $xp === 'function') ? this : undefined)`;\n forwarder = `function ${fwname}(${fwargs.join(', ')}) { \"use strict\"; let $xp; return new.target === undefined ? ${call('this', 'undefined')} : ${call(host_this, 'new.target')}; }`;\n } else {\n forwarder = `({ ${fwname}(${fwargs.join(', ')}) { \"use strict\"; return ${call('this', 'undefined')}; } }).${fwname}`;\n }\n /* non-strict helpers for sloppy global assignments (the factory body itself is not strict) */\n let helpers = '';\n for (const [atom, idx] of fi.sloppy_sets) {\n helpers += `function $ss${idx}($v) { if (${key_value(fi, atom)} in $GV) $RT.put_global(${atom}, $v, 0, false); else $G${key_access(fi, atom)} = $v; }\\n`;\n }\n for (const [atom, idx] of fi.sloppy_props) helpers += `function $sp${idx}($o, $v) { $o${key_access(fi, atom)} = $v; }\\n`;\n if (fi.uses_spe) helpers += `function $spe($o, $k, $v) { $o[$k] = $v; }\\n`;\n if (fi.uses_sdel) helpers += `function $sdel($o, $k) { return delete $o[$k]; }\\n`;\n let source: string;\n if (!natural) {\n source =\n`${helpers}return function $make($vr, $fo) {\n const $direct = function ${fname}(${params.join(', ')}) {\n\"use strict\";\nlet ${decls.join(', ')};\n${prologue}${body}};\n if ($fo === undefined) $fo = ${forwarder};\n return [$fo, $direct, null];\n};`;\n } else {\n /* natural convention: the body is the guest function object itself; the direct entry is\n an adapter used by the engine and by calls with an explicit this/new.target */\n const nparams = params.slice(2);\n const head = `\"use strict\";\\nlet ${decls.join(', ')}, $xp;\\nlet $t = this;\\n${constructible ? 'const $nt = new.target;\\n' : ''}`;\n const fn = constructible\n ? `function ${fname}(${nparams.join(', ')}) {\\n${head}${prologue}${body}}`\n : `({ ${fname}(${nparams.join(', ')}) {\\n${head}${prologue}${body}} }).${fname}`;\n /* the private copy (`$mkpriv`, created on demand from the same literal, so it shares the\n host's code and type feedback) keeps the host Function.prototype and is never reachable\n from guest code: `priv.apply(t, args)` is the host intrinsic, unlike `$CALL.call` on the\n guest-visible object (~35 ns). With an existing function object (`$fo`, the tier-up of an\n interpreter wrapper) `$fn` itself is private. */\n const direct = constructible\n ? `function ($t, $nt, ...$a) { return $nt === undefined ? $mkpriv().apply($t, $a) : $CONSTRUCT($fn, $a, $nt); }`\n : `function ($t, $nt, ...$a) { if ($nt !== undefined) $RT.throw_not_a_constructor($fo); return $mkpriv().apply($t, $a); }`;\n source =\n`${helpers}return function $make($vr, $fo) {\n const $lit = function () { return ${fn}; };\n const $fn = $lit();\n if ($fo === undefined) $fo = $fn;\n let $priv = $fn === $fo ? null : $fn;\n const $mkpriv = function () { return $priv !== null ? $priv : ($priv = $lit()); };\n const $direct = ${direct};\n return [$fo, $direct, $mkpriv];\n};`;\n }\n /* the url names the function for host stack traces; its id leads to the position table */\n source += `\\n//# sourceURL=jseption:${id}:${url_part(jit_file_name(ctx, b))}:${url_part(name || '<anonymous>')}`;\n const res: JitSource = { source, name };\n if (osr !== undefined) res.osr = { arg_cell: fi.argCell.slice(), var_cell: fi.varCell.slice(), depth: cfg.byPc.get(osr)!.stateIn.length };\n return res;\n}\n\n/* a file or function name as it goes into the generated code's `sourceURL` comment: the file\n name is the embedder's and the function name the guest's, so a line terminator in either\n would end the comment and make the rest host code (a function declaration there is hoisted\n into the compiled code's scope). Control characters and line terminators become `_`. */\nfunction url_part(s: string): string {\n return s.replace(/[\\u0000-\\u001f\\u007f\\u2028\\u2029]/g, '_');\n}\n\nfunction jit_file_name(ctx: JSContext, b: JSFunctionBytecode): string {\n return (b.has_debug && JS_AtomGetStr(ctx, b.debug.filename)) || '<eval>';\n}\n\n/* variant: 'main' = the function's own convention (jit_config.conv), stored in b.compiled;\n 'ctor' = explicit convention `(this | undefined, new_target, ...args)` for construct calls\n through retargetable wrappers, stored in b.compiled_ctor */\nexport function jit_compile(ctx: JSContext, b: JSFunctionBytecode, variant: 'main' | 'ctor' = 'main'): JitCompiled | null {\n if (variant === 'main' ? b.compiled : b.compiled_ctor) return (variant === 'main' ? b.compiled : b.compiled_ctor) as JitCompiled;\n if (b.no_jit || (variant === 'ctor' && b.compiled_ctor === false)) return null;\n const c = compile_variant(ctx, b, variant === 'ctor' ? { conv: 'forwarder' } : {});\n if (c === null) {\n /* a bail of the function's own variant keeps it interpreted (a failed constructor variant\n only disables that variant); a host that refuses code generation leaves no trace */\n if (!jit_config.unavailable) { if (variant === 'main') b.no_jit = true; else b.compiled_ctor = false; }\n return null;\n }\n if (variant === 'main') b.compiled = c; else b.compiled_ctor = c;\n return c;\n}\n\n/* the on-stack replacement variant of `b` entered at the loop header `pc` (cached; null when\n the compiler bails for that header) */\nexport function jit_compile_osr(ctx: JSContext, b: JSFunctionBytecode, pc: number): JitCompiled | null {\n if (b.osr === null) b.osr = new Map();\n let c = b.osr.get(pc);\n if (c !== undefined) return c;\n c = b.no_jit ? null : compile_variant(ctx, b, { conv: 'forwarder', osr: pc });\n b.osr.set(pc, c);\n return c;\n}\n\nfunction compile_variant(ctx: JSContext, b: JSFunctionBytecode, opts: JitGenOptions): JitCompiled | null {\n if (!jit_probe()) return null;\n try {\n const id = jit_stack_alloc_id();\n const gen = jit_generate_source(ctx, b, id, opts);\n const { source, name } = gen;\n if (jit_config.dump) console.log(`--- jit${opts.osr !== undefined ? ` (osr at ${opts.osr})` : opts.conv === 'forwarder' && jit_config.conv !== 'forwarder' ? ' (ctor)' : ''}: ${name || '<anonymous>'} ---\\n${source}`);\n const RT = make_jit_runtime(ctx, (bb) => jit_closure_compile(ctx, bb));\n let factory: Function;\n try {\n factory = new Function(...JIT_FACTORY_PARAMS, source);\n } catch (e) {\n /* code generation from strings forbidden by the host: the tier turns itself off and the\n interpreter takes over (a SyntaxError is a compiler bug: reported below) */\n if (!(e instanceof SyntaxError) && !jit_probe(true)) return null;\n throw e;\n }\n const make = factory(...jit_runtime_factory_args(RT, b)) as JitCompiled['make'];\n const stack: CompiledEntry = { b, name, file: jit_file_name(ctx, b), source, lines: null };\n jit_stack_register(id, stack);\n const compiled: JitCompiled = { make, source, name, stack, osr: gen.osr };\n jit_stats.compiled++;\n if (opts.osr !== undefined) jit_stats.osr_compiled++;\n return compiled;\n } catch (e) {\n jit_stats.bailed++;\n const msg = e instanceof JitBail ? e.message : `internal: ${(e as Error)?.message ?? e}`;\n jit_stats.bail_reasons.set(msg, (jit_stats.bail_reasons.get(msg) ?? 0) + 1);\n if (jit_config.dump || !(e instanceof JitBail)) console.log(`--- jit bail: ${func_name(ctx, b) || '<anonymous>'}: ${msg}`);\n if (!(e instanceof JitBail) && jit_config.dump) console.log((e as Error).stack);\n return null;\n }\n}\n\nexport function jit_should_compile(b: JSFunctionBytecode): boolean {\n if (jit_config.mode === 'off' || b.no_jit) return false;\n if (b.compiled) return true;\n if (jit_config.mode === 'always') return true;\n return ++b.call_count >= jit_config.threshold;\n}\n\n/* backtraces of compiled frames (src/jit_stack.ts) while the tier is on */\njit_stack_install(jit_config.mode !== 'off');\n\n/* JS_CallInternal entry hook (see src/jit_hook.ts) */\njit_hooks.try_call = (ctx: JSContext, func_obj, func_data: JSFunctionData, b, this_obj, new_target, argv, flags) => {\n let direct: Function | null = func_data.compiled;\n if (direct === null) {\n if (jit_config.mode === 'off') return JIT_NOT_COMPILED;\n if (!jit_should_compile(b)) return JIT_NOT_COMPILED;\n const compiled = jit_compile(ctx, b);\n if (!compiled) return JIT_NOT_COMPILED;\n /* tier-up of an existing function object (an interpreter wrapper): give the closure a\n compiled direct entry and its private copy; a retargetable wrapper calls the copy from\n now on, and a generic one reaches it through here */\n const [, d, mkpriv] = compiled.make(func_data.var_refs, func_obj);\n direct = d;\n func_data.compiled = d;\n func_data.mkpriv = mkpriv;\n func_data.priv = mkpriv !== null ? mkpriv() : null;\n if (!jit_is_wrapper(func_obj)) js_direct.set(func_obj as Function, d);\n }\n if ((flags & JS_CALL_FLAG_CONSTRUCTOR) !== 0 || new_target !== undefined) {\n /* construct call: the explicit-convention body (shared with the wrapper's construct path) */\n let c = func_data.ctor;\n if (c === null) c = jit_closure_ctor(ctx, func_obj, func_data, b);\n return jit_runtime_call_compiled(ctx, c ?? direct, this_obj, new_target, argv, flags);\n }\n let p = func_data.priv;\n if (p === null && func_data.mkpriv !== null) p = func_data.priv = func_data.mkpriv();\n if (p !== null) return jit_runtime_call_priv(ctx, p, this_obj, argv);\n return jit_runtime_call_compiled(ctx, direct, this_obj, new_target, argv, flags);\n};\n\n/* the explicit-convention constructor body of a closure (compiled on its first construct call\n through the engine or a wrapper), or null when the compiler bails */\nfunction jit_closure_ctor(ctx: JSContext, func_obj: JSValue, fd: JSFunctionData, b: JSFunctionBytecode): Function | null {\n if (jit_config.conv === 'forwarder') return fd.compiled; /* the direct entry is the body */\n const c = jit_compile(ctx, b, 'ctor');\n if (c === null) return null;\n fd.ctor = c.make(fd.var_refs, func_obj)[1];\n return fd.ctor;\n}\n\n/* On-stack replacement (see JitHooks.osr): the interpreter frame `sf` of `func_obj` has taken\n enough backward jumps; its loop header is `pc` and its stack depth `sp`. Runs the rest of the\n frame in the OSR variant and returns its result (JS_EXCEPTION with the exception pending), or\n JIT_NOT_COMPILED to continue interpreting. */\njit_set_osr_threshold(jit_config.osr_threshold);\njit_hooks.osr = (ctx: JSContext, func_obj, b, sf, pc, sp) => {\n if (jit_config.mode === 'off' || !jit_config.osr || b.no_jit) { b.loop_count = 0; return JIT_NOT_COMPILED; }\n const c = jit_compile_osr(ctx, b, pc);\n if (c === null || c.osr === undefined || c.osr.depth !== sp) {\n /* the compiler bailed for this header: back to counting (other headers may work) */\n b.loop_count = 0;\n return JIT_NOT_COMPILED;\n }\n const fd = JS_GetFunctionData(func_obj)!;\n const { arg_cell, var_cell, depth } = c.osr;\n /* captured variables: the frame's own variable references, detached (their values move into\n them) so that closures created so far stay connected to the compiled code */\n const cell = (is_arg: boolean, idx: number, v: JSValue): JSVarRef => {\n const refs: JSVarRef[] = sf.var_refs;\n for (let i = 0; i < refs.length; i++) {\n const vr = refs[i];\n if (!vr.is_detached && vr.is_arg === is_arg && vr.var_idx === idx) { vr.detach(); return vr; }\n }\n return new_var_ref_cell(v);\n };\n const a: JSValue[] = new Array(b.arg_count);\n for (let i = 0; i < b.arg_count; i++) {\n const v = i < sf.arg_buf.length ? sf.arg_buf[i] : undefined;\n a[i] = arg_cell[i] ? cell(true, i, v) : v;\n }\n const v: JSValue[] = new Array(b.var_count);\n for (let i = 0; i < b.var_count; i++) v[i] = var_cell[i] ? cell(false, i, sf.var_buf[i]) : sf.var_buf[i];\n /* catch slots hold catch offsets in the interpreter and nothing in compiled code */\n const st: JSValue[] = new Array(depth);\n for (let d = 0; d < depth; d++) { const x = sf.stack_buf[d]; st[d] = JS_IsCatchOffset(x) ? undefined : x; }\n const direct = c.make(fd.var_refs, func_obj)[1];\n sf.osr = true;\n jit_stats.osr_entered++;\n const rt = ctx.rt;\n try {\n return direct(sf.this_obj, sf.new_target, { a, v, s: st });\n } catch (e) {\n return js_host_exception_to_guest(ctx, e);\n } finally {\n rt.current_stack_frame = sf;\n }\n};\n\n/* function objects created by jit_runtime_make_wrapper */\nconst wrappers = new WeakSet<object>();\nexport function jit_is_wrapper(f: JSValue): boolean { return wrappers.has(f as object); }\n\n/* interpreted closures of normal functions are retargetable wrappers while the tier is on */\njit_hooks.make_wrapper = (ctx: JSContext, b, var_refs, proto, is_ctor) => {\n if (jit_config.mode === 'off') return null;\n const w = jit_runtime_make_wrapper(ctx, b, var_refs, proto, is_ctor);\n if (w !== null) wrappers.add(w as object);\n return w;\n};\n"]}
1
+ {"version":3,"file":"jit.js","sourceRoot":"","sources":["../src/jit.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Compiled tier: translates a JSFunctionBytecode (final bytecode, after\n * resolve_labels) into host JavaScript source and evaluates it once with\n * `new Function`. See docs/HOST_VALUES.md (\"Compiled tier\").\n *\n * Pipeline:\n * 1. decode - split the byte code into instructions\n * 2. analyze - abstract interpretation of the operand stack: the\n * depth and the *kind* of every slot (value, catch\n * offset, for-of iterator marker, gosub return address)\n * are static at every pc\n * 3. blocks - basic blocks + control flow graph; blocks are also\n * split where the set of active exception handlers\n * changes, so every block belongs to exactly one\n * try-region\n * 4. emit blocks - stack slots become locals ($s<depth>); each block is\n * translated with a pending-expression model so that\n * `a[i] = b[i] * 2` becomes one host statement\n * 5. reloop - a relooper turns the CFG into labeled blocks/loops\n * and nests try-regions as host try/catch statements;\n * a `for(;;) switch` fallback exists for debugging\n * (JSEPTION_JIT_CFG=switch)\n *\n * Calling convention of compiled functions (and of everything the runtime\n * adapter exposes): `fn($this, $new_target, ...args)`. `this` and\n * new.target are explicit parameters so that guest-to-guest calls are\n * plain host calls (no Function.prototype.call / Reflect.apply, which are\n * 30-50x slower and would need the guest-visible `call` property).\n * A constructor call passes `$this = undefined` and a defined\n * `$new_target`; the callee creates `this` and returns the object.\n *\n * Generated code never contains free identifiers other than the `$`-prefixed\n * names created here. Guest globals, closures, classes, regexps, spread,\n * iteration and every operation on a primitive base go through the `$RT`\n * object (src/jit_runtime.ts).\n */\nimport { JSContext, JSFunctionBytecode, JS_AtomGetStr, __JS_AtomIsTaggedInt, __JS_AtomToUInt32 } from './quickjs.ts';\nimport { JSFunctionKind, JS_MODE_STRICT, JSFunctionData, JS_CALL_FLAG_CONSTRUCTOR, JSVarRef, new_var_ref_cell, JS_IsCatchOffset, type JSValue } from './values.ts';\nimport { OP, OpFmt, short_opcode_info, get_u8, get_i8, get_u16, get_i16, get_u32, get_i32, OPSpecialObject,\n JS_DEFINE_CLASS_HAS_HERITAGE } from './opcodes.ts';\nimport { jit_hooks, JIT_NOT_COMPILED } from './jit_hook.ts';\nimport { jit_set_osr_threshold } from './interpreter.ts';\nimport { make_jit_runtime, jit_runtime_call_compiled, jit_runtime_call_priv, jit_runtime_make_wrapper, jit_runtime_factory_args, JIT_FACTORY_PARAMS } from './jit_runtime.ts';\nimport { js_direct, JS_GetFunctionData, js_host_exception_to_guest } from './quickjs.ts';\nimport { jit_stack_alloc_id, jit_stack_register, jit_stack_install, type CompiledEntry } from './jit_stack.ts';\n\n/* ---------------------------------------------------------------------\n Configuration\n --------------------------------------------------------------------- */\n\nexport interface JitConfig {\n /* off: never compile; hot: compile after `threshold` calls; always: compile on first call */\n mode: 'off' | 'hot' | 'always';\n /* the host forbids code generation from strings (`new Function` throws: a CSP without\n 'unsafe-eval', Cloudflare Workers): the tier is off and `unavailable_reason` is the host's\n message. Set by jit_probe(). */\n unavailable: boolean;\n unavailable_reason: string;\n threshold: number;\n /* reloop: structured output (default); switch: `for(;;) switch($l)` state machine */\n cfg: 'reloop' | 'switch';\n /* print the generated source of every compiled function */\n dump: boolean;\n /* calling convention of compiled functions (see docs/JIT.md):\n forwarder: body = direct($this, $nt, ...args), guest object = thin forwarder;\n natural: body = host-convention function, direct entry = adapter (Function.prototype.call) */\n conv: 'forwarder' | 'natural';\n /* on-stack replacement of interpreter frames running a loop (any mode but off) */\n osr: boolean;\n /* backward jumps taken in a function's interpreter frames before its frame is replaced */\n osr_threshold: number;\n}\n\nfunction env(name: string): string | undefined {\n return (globalThis as any).process?.env?.[name];\n}\n\n/* 'hot' is the default (measured with bench/inproc.ts, see docs/JIT.md): compiling every\n function that runs ('always') costs 300-400 us per function in Bun, most of it the host\n compiling the generated source, which made code that runs once (application start-up, the\n cold bundles) 3-5x slower than interpreting it; hot mode leaves such code interpreted, and\n with retargetable wrappers, closures compiled at creation by compiled code and on-stack\n replacement of hot loops its steady state is mostly within 1.15x of 'always'. */\n/* the mode used when JSEPTION_JIT is unset (or `1`) */\nexport const jit_default_mode: JitConfig['mode'] = 'hot';\n\nfunction parse_mode(v: string | undefined): JitConfig['mode'] {\n if (v === undefined || v === '' || v === '1') return jit_default_mode;\n if (v === 'always') return 'always';\n if (v === '0' || v === 'off' || v === 'false') return 'off';\n if (v === 'hot') return 'hot';\n return jit_default_mode;\n}\n\nexport const jit_config: JitConfig = {\n mode: parse_mode(env('JSEPTION_JIT')),\n unavailable: false,\n unavailable_reason: '',\n threshold: 2,\n cfg: env('JSEPTION_JIT_CFG') === 'switch' ? 'switch' : 'reloop',\n dump: env('JSEPTION_JIT_DUMP') === '1',\n conv: env('JSEPTION_JIT_CONV') === 'forwarder' ? 'forwarder' : 'natural',\n osr: env('JSEPTION_JIT_OSR') !== '0',\n osr_threshold: Number(env('JSEPTION_JIT_OSR') ?? '') > 0 ? Number(env('JSEPTION_JIT_OSR')) : 500,\n};\nif (env('JSEPTION_JIT_THRESHOLD') !== undefined && Number(env('JSEPTION_JIT_THRESHOLD')) > 0) {\n jit_config.threshold = Number(env('JSEPTION_JIT_THRESHOLD'));\n}\n\n/* Does the host allow code generation from strings? Probed once (or again with `force`); when\n it does not, the tier turns itself off and the interpreter runs everything. Never throws. */\nlet probed = false;\nexport function jit_probe(force = false): boolean {\n if (probed && !force) return !jit_config.unavailable;\n probed = true;\n try {\n new Function('return 1');\n jit_config.unavailable = false;\n jit_config.unavailable_reason = '';\n jit_stats.unavailable = null;\n return true;\n } catch (e) {\n const reason = String((e as Error)?.message ?? e);\n jit_config.unavailable = true;\n jit_config.unavailable_reason = reason;\n jit_config.mode = 'off';\n jit_stats.unavailable = reason;\n jit_stack_install(false);\n return false;\n }\n}\n\n/* change the configuration at run time; returns it (`mode` is 'off' and `unavailable` is set\n when the host forbids code generation) */\nexport function jit_configure(c: Partial<JitConfig>): Readonly<JitConfig> {\n Object.assign(jit_config, c);\n if (jit_config.mode !== 'off' && !jit_probe()) jit_config.mode = 'off';\n jit_stack_install(jit_config.mode !== 'off');\n jit_set_osr_threshold(jit_config.osr_threshold);\n return jit_config;\n}\n\n/* statistics (for tests and debugging) */\nexport const jit_stats = {\n compiled: 0, bailed: 0, bail_reasons: new Map<string, number>(),\n /* static counts of method call sites: native member call vs direct-entry/slow path */\n method_calls_fused: 0, method_calls_unfused: 0,\n /* on-stack replacement: variants compiled, and frames replaced */\n osr_compiled: 0, osr_entered: 0,\n /* the host's message when code generation from strings is forbidden (the tier is off) */\n unavailable: null as string | null,\n};\n\nexport class JitBail extends Error {}\nfunction bail(msg: string): never { throw new JitBail(msg); }\n\n/* ---------------------------------------------------------------------\n 1. Decoding\n --------------------------------------------------------------------- */\n\ninterface Insn {\n pc: number;\n op: number;\n size: number;\n next: number;\n name: string;\n fmt: OpFmt;\n /* operands */\n a: number; /* first operand (u8/u16/u32/i8/i16/i32/atom/const index/loc index) */\n b: number; /* second operand (u8/u16 after an atom/label) */\n label: number; /* absolute jump target, or -1 */\n}\n\nfunction decode(b: JSFunctionBytecode): Insn[] {\n const buf = b.byte_code_buf;\n const len = b.byte_code_len;\n const insns: Insn[] = [];\n let pos = 0;\n while (pos < len) {\n const op = buf[pos];\n const oi = short_opcode_info(op);\n if (!oi || op === OP.invalid) bail(`invalid opcode ${op} at ${pos}`);\n const p = pos + 1;\n const insn: Insn = { pc: pos, op, size: oi.size, next: pos + oi.size, name: oi.name, fmt: oi.fmt, a: 0, b: 0, label: -1 };\n switch (oi.fmt) {\n case OpFmt.none: break;\n case OpFmt.none_int: insn.a = op - OP.push_0; break;\n case OpFmt.none_loc: insn.a = (op - OP.get_loc0) % 4; break;\n case OpFmt.none_arg: insn.a = (op - OP.get_arg0) % 4; break;\n case OpFmt.none_var_ref: insn.a = (op - OP.get_var_ref0) % 4; break;\n case OpFmt.u8: case OpFmt.loc8: case OpFmt.const8: insn.a = get_u8(buf, p); break;\n case OpFmt.i8: insn.a = get_i8(buf, p); break;\n case OpFmt.label8: insn.label = p + get_i8(buf, p); break;\n case OpFmt.u16: case OpFmt.npop: case OpFmt.loc: case OpFmt.arg: case OpFmt.var_ref: insn.a = get_u16(buf, p); break;\n case OpFmt.npopx: insn.a = op - OP.call0; break;\n case OpFmt.i16: insn.a = get_i16(buf, p); break;\n case OpFmt.label16: insn.label = p + get_i16(buf, p); break;\n case OpFmt.npop_u16: insn.a = get_u16(buf, p); insn.b = get_u16(buf, p + 2); break;\n case OpFmt.u32: insn.a = get_u32(buf, p); break;\n case OpFmt.i32: insn.a = get_i32(buf, p); break;\n case OpFmt.const: insn.a = get_u32(buf, p); break;\n case OpFmt.label: insn.label = p + get_i32(buf, p); break;\n case OpFmt.atom: insn.a = get_u32(buf, p); break;\n case OpFmt.atom_u8: insn.a = get_u32(buf, p); insn.b = get_u8(buf, p + 4); break;\n case OpFmt.atom_u16: insn.a = get_u32(buf, p); insn.b = get_u16(buf, p + 4); break;\n case OpFmt.atom_label_u8: insn.a = get_u32(buf, p); insn.label = p + 4 + get_i32(buf, p + 4); insn.b = get_u8(buf, p + 8); break;\n case OpFmt.atom_label_u16: insn.a = get_u32(buf, p); insn.label = p + 4 + get_i32(buf, p + 4); insn.b = get_u16(buf, p + 8); break;\n case OpFmt.label_u16: insn.label = p + get_i32(buf, p); insn.a = get_u16(buf, p + 4); break;\n default: bail(`unknown operand format for ${oi.name}`);\n }\n insns.push(insn);\n pos += oi.size;\n }\n return insns;\n}\n\n/* ---------------------------------------------------------------------\n 2. Abstract stack analysis\n --------------------------------------------------------------------- */\n\nconst enum KT { V, CATCH, CATCH0, RET, REF }\n\n/* REF: a variable reference object created by make_loc_ref/make_arg_ref/make_var_ref_ref.\n It never exists at run time in compiled code: get_ref_value/put_ref_value on it are\n translated into direct variable accesses. */\nconst enum RefKind { LOC, ARG, VAR_REF }\n\ninterface Kind {\n t: KT;\n origin: number; /* pc of the instruction that pushed the catch slot */\n handler: number; /* CATCH: handler pc */\n sites: number[] | null; /* RET: gosub site ids that may have pushed it */\n ref_kind?: RefKind; /* REF */\n ref_idx?: number; /* REF */\n}\n\nconst KV: Kind = { t: KT.V, origin: -1, handler: -1, sites: null };\n\ninterface GosubSite { id: number; pc: number; cont: number }\n\ninterface Analysis {\n states: (Kind[] | null)[]; /* abstract stack before each pc (null: unreachable) */\n sites: GosubSite[];\n insnAt: (Insn | undefined)[]; /* instruction starting at each pc */\n uses_arguments: boolean;\n uses_this: boolean;\n uses_mapped_arguments: boolean;\n is_ctor: boolean;\n}\n\nfunction kinds_equal(a: Kind[], b: Kind[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n const x = a[i], y = b[i];\n if (x.t !== y.t) return false;\n if (x.t === KT.CATCH || x.t === KT.CATCH0) { if (x.origin !== y.origin) return false; }\n if (x.t === KT.REF) { if (x.ref_kind !== y.ref_kind || x.ref_idx !== y.ref_idx) return false; }\n }\n return true;\n}\n\n/* merge ret sites; returns true if `into` changed */\nfunction kinds_merge(into: Kind[], from: Kind[]): boolean {\n let changed = false;\n for (let i = 0; i < into.length; i++) {\n if (into[i].t === KT.RET) {\n const a = into[i].sites!, bs = from[i].sites!;\n for (const s of bs) if (!a.includes(s)) { a.push(s); changed = true; }\n }\n }\n return changed;\n}\n\nfunction analyze(b: JSFunctionBytecode, insns: Insn[]): Analysis {\n const len = b.byte_code_len;\n const states: (Kind[] | null)[] = new Array(len).fill(null);\n const insnAt: (Insn | undefined)[] = new Array(len);\n for (const i of insns) insnAt[i.pc] = i;\n const sites: GosubSite[] = [];\n const siteByPc = new Map<number, GosubSite>();\n const A: Analysis = { states, sites, insnAt, uses_arguments: false, uses_this: false, uses_mapped_arguments: false, is_ctor: false };\n\n const work: number[] = [];\n const visit = (pc: number, st: Kind[]): void => {\n if (pc < 0 || pc >= len) bail(`jump out of range: ${pc}`);\n if (insnAt[pc] === undefined) bail(`jump into the middle of an instruction: ${pc}`);\n const cur = states[pc];\n if (cur === null) {\n let has_ret = false;\n for (let i = 0; i < st.length; i++) if (st[i].t === KT.RET) { has_ret = true; break; }\n states[pc] = has_ret ? st.map(k => k.t === KT.RET ? { ...k, sites: k.sites!.slice() } : k) : st.slice();\n work.push(pc);\n } else {\n if (!kinds_equal(cur, st)) bail(`inconsistent stack at ${pc}`);\n if (kinds_merge(cur, st)) work.push(pc);\n }\n };\n visit(0, []);\n\n /* the instruction being analyzed and its (copied) input stack; the helpers are created once */\n let pc = 0;\n let insn: Insn = insns[0];\n let st: Kind[] = [];\n const pop = (n: number): Kind[] => {\n if (st.length < n) bail(`stack underflow at ${pc} (${insn.name})`);\n return st.splice(st.length - n, n);\n };\n const push = (k: Kind): void => { st.push(k); };\n const pushV = (n: number): void => { for (let i = 0; i < n; i++) st.push(KV); };\n const top = (i = 1): Kind => st[st.length - i];\n while (work.length) {\n pc = work.pop()!;\n insn = insnAt[pc]!;\n st = states[pc]!.slice();\n const oi = short_opcode_info(insn.op);\n let n_pop = oi.n_pop;\n if (oi.fmt === OpFmt.npop || oi.fmt === OpFmt.npop_u16) n_pop += insn.a;\n else if (oi.fmt === OpFmt.npopx) n_pop += insn.a;\n\n switch (insn.op) {\n /* unsupported in the first version */\n case OP.with_get_var: case OP.with_put_var: case OP.with_delete_var: case OP.with_make_ref: case OP.with_get_ref:\n bail('with statement');\n case OP.eval: case OP.apply_eval:\n bail('direct eval');\n case OP.await: case OP.yield: case OP.yield_star: case OP.async_yield_star: case OP.initial_yield:\n case OP.return_async: case OP.for_await_of_start: case OP.for_await_of_next: case OP.iterator_get_value_done:\n bail('generator/async');\n case OP.make_loc_ref: case OP.make_arg_ref: case OP.make_var_ref_ref:\n push({ t: KT.REF, origin: pc, handler: -1, sites: null,\n ref_kind: insn.op === OP.make_loc_ref ? RefKind.LOC : insn.op === OP.make_arg_ref ? RefKind.ARG : RefKind.VAR_REF,\n ref_idx: insn.b });\n pushV(1);\n break;\n /* instructions that keep their lower operands (iterator triples carry catch kinds) */\n case OP.for_of_next: case OP.for_in_next: pushV(2); break;\n case OP.iterator_next: pop(1); pushV(1); break;\n case OP.iterator_call: pushV(1); break;\n case OP.iterator_check_object: break;\n case OP.special_object:\n if (insn.a === OPSpecialObject.ARGUMENTS) A.uses_arguments = true;\n if (insn.a === OPSpecialObject.MAPPED_ARGUMENTS) { A.uses_arguments = true; A.uses_mapped_arguments = true; }\n pushV(1);\n break;\n case OP.rest: case OP.init_ctor:\n A.uses_arguments = true;\n if (insn.op === OP.init_ctor) A.is_ctor = true;\n pushV(1);\n break;\n case OP.check_ctor:\n A.is_ctor = true;\n break;\n case OP.push_this:\n A.uses_this = true;\n pushV(1);\n break;\n\n /* terminators */\n case OP.return: case OP.return_undef: case OP.throw: case OP.throw_error: case OP.tail_call: case OP.tail_call_method:\n continue;\n case OP.goto: case OP.goto8: case OP.goto16:\n visit(insn.label, st);\n continue;\n case OP.if_true: case OP.if_false: case OP.if_true8: case OP.if_false8:\n pop(1);\n visit(insn.label, st);\n visit(insn.next, st);\n continue;\n case OP.catch: {\n /* handler: the catch slot is replaced by the exception */\n const hst = st.slice(); hst.push(KV);\n visit(insn.label, hst);\n push({ t: KT.CATCH, origin: pc, handler: insn.label, sites: null });\n break;\n }\n case OP.gosub: {\n let site = siteByPc.get(pc);\n if (!site) { site = { id: sites.length, pc, cont: insn.next }; sites.push(site); siteByPc.set(pc, site); }\n push({ t: KT.RET, origin: pc, handler: -1, sites: [site.id] });\n visit(insn.label, st);\n continue;\n }\n case OP.ret: {\n const k = pop(1)[0];\n if (k.t !== KT.RET) bail('ret without gosub');\n for (const sid of k.sites!) visit(sites[sid].cont, st);\n continue;\n }\n case OP.for_of_start:\n pop(1); pushV(2);\n push({ t: KT.CATCH0, origin: pc, handler: 0, sites: null });\n break;\n case OP.iterator_close:\n pop(3);\n break;\n case OP.nip_catch: {\n const rv = pop(1)[0];\n let found = false;\n while (st.length > 0) {\n const k = st.pop()!;\n if (k.t === KT.CATCH || k.t === KT.CATCH0) { found = true; break; }\n }\n if (!found) bail('nip_catch without catch');\n push(rv.t === KT.V ? KV : rv);\n break;\n }\n /* stack manipulation (kinds move with the values) */\n case OP.drop: pop(1); break;\n case OP.nip: { const [, y] = pop(2); push(y); break; }\n case OP.nip1: { const [, y, z] = pop(3); push(y); push(z); break; }\n case OP.dup: { const x = top(); push(x); break; }\n case OP.dup1: { const [x, y] = pop(2); push(x); push(x); push(y); break; }\n case OP.dup2: { const x = top(2), y = top(1); push(x); push(y); break; }\n case OP.dup3: { const x = top(3), y = top(2), z = top(1); push(x); push(y); push(z); break; }\n case OP.insert2: { const [x, y] = pop(2); push(y); push(x); push(y); break; }\n case OP.insert3: { const [x, y, z] = pop(3); push(z); push(x); push(y); push(z); break; }\n case OP.insert4: { const [w, x, y, z] = pop(4); push(z); push(w); push(x); push(y); push(z); break; }\n case OP.perm3: { const [x, y, z] = pop(3); push(y); push(x); push(z); break; }\n case OP.perm4: { const [w, x, y, z] = pop(4); push(y); push(w); push(x); push(z); break; }\n case OP.perm5: { const [v, w, x, y, z] = pop(5); push(y); push(v); push(w); push(x); push(z); break; }\n case OP.swap: { const [x, y] = pop(2); push(y); push(x); break; }\n case OP.swap2: { const [w, x, y, z] = pop(4); push(y); push(z); push(w); push(x); break; }\n case OP.rot3l: { const [x, y, z] = pop(3); push(y); push(z); push(x); break; }\n case OP.rot3r: { const [x, y, z] = pop(3); push(z); push(x); push(y); break; }\n case OP.rot4l: { const [w, x, y, z] = pop(4); push(x); push(y); push(z); push(w); break; }\n case OP.rot5l: { const [v, w, x, y, z] = pop(5); push(w); push(x); push(y); push(z); push(v); break; }\n default:\n if (st.length < n_pop) bail(`stack underflow at ${pc} (${insn.name})`);\n st.length -= n_pop;\n for (let i = 0; i < oi.n_push; i++) st.push(KV);\n break;\n }\n visit(insn.next, st);\n }\n return A;\n}\n\n/* ---------------------------------------------------------------------\n 3. Blocks, control flow graph, try-regions\n --------------------------------------------------------------------- */\n\ninterface Term {\n kind: 'fall' | 'jump' | 'cond' | 'multi' | 'none';\n cond?: string; /* host expression (cond) */\n tTrue?: number; /* block id when cond is truthy */\n tFalse?: number;\n target?: number; /* jump/fall */\n multi?: { expr: string; cases: { value: number; target: number }[] };\n}\n\nclass Block {\n id: number;\n start: number;\n insns: Insn[] = [];\n stateIn: Kind[];\n region: Region | null = null;\n code = ''; /* statements (without the terminator) */\n term: Term = { kind: 'fall' };\n succs: number[] = []; /* block ids (deduplicated, in terminator order) */\n dead = false; /* unreachable from an on-stack replacement entry: not emitted */\n constructor(id: number, start: number, stateIn: Kind[]) { this.id = id; this.start = start; this.stateIn = stateIn; }\n}\n\nclass Region {\n id: number;\n origin: number; /* pc of OP.catch / OP.for_of_start, -1 for the root */\n parent: Region | null;\n kind: KT; /* CATCH, CATCH0 or V for the root */\n slot: number; /* stack index of the catch slot */\n handler: number; /* CATCH: handler pc */\n blocks: Block[] = [];\n children: Region[] = [];\n entry: Block | null = null;\n /* on-stack replacement: the region contains the entry (the loop header), which is its entry\n node (a block id, or the node id of the child region containing it) */\n entry_node: number | null = null;\n osr_chain = false;\n exits = new Set<number>(); /* block ids outside this region targeted from inside */\n constructor(id: number, origin: number, parent: Region | null, kind: KT, slot: number, handler: number) {\n this.id = id; this.origin = origin; this.parent = parent; this.kind = kind; this.slot = slot; this.handler = handler;\n }\n}\n\nfunction handler_chain(st: Kind[]): { kind: Kind; slot: number }[] {\n const r: { kind: Kind; slot: number }[] = [];\n for (let i = 0; i < st.length; i++) if (st[i].t === KT.CATCH || st[i].t === KT.CATCH0) r.push({ kind: st[i], slot: i });\n return r;\n}\n\n/* same handler chain (catch kinds, in order) without allocating */\nfunction same_chain(a: Kind[], b: Kind[]): boolean {\n let i = 0, j = 0;\n for (;;) {\n while (i < a.length && a[i].t !== KT.CATCH && a[i].t !== KT.CATCH0) i++;\n while (j < b.length && b[j].t !== KT.CATCH && b[j].t !== KT.CATCH0) j++;\n if (i === a.length || j === b.length) return i === a.length && j === b.length;\n if (a[i].origin !== b[j].origin) return false;\n i++; j++;\n }\n}\n\nfunction is_terminator(op: number): boolean {\n switch (op) {\n case OP.return: case OP.return_undef: case OP.throw: case OP.throw_error: case OP.tail_call: case OP.tail_call_method:\n case OP.goto: case OP.goto8: case OP.goto16: case OP.if_true: case OP.if_false: case OP.if_true8: case OP.if_false8:\n case OP.gosub: case OP.ret:\n return true;\n }\n return false;\n}\n\ninterface CFG { blocks: Block[]; byPc: Map<number, Block>; root: Region; regions: Region[] }\n\nfunction build_blocks(insns: Insn[], A: Analysis): CFG {\n const leaders = new Set<number>([0]);\n for (const insn of insns) {\n if (A.states[insn.pc] === null) continue;\n if (insn.label >= 0) leaders.add(insn.label);\n if (is_terminator(insn.op)) { if (insn.next < insns[insns.length - 1].next) leaders.add(insn.next); }\n /* handler chain change */\n const nextState = A.states[insn.next];\n if (nextState !== null && nextState !== undefined && !same_chain(A.states[insn.pc]!, nextState)) leaders.add(insn.next);\n if (insn.op === OP.catch || insn.op === OP.for_of_start) leaders.add(insn.next);\n }\n for (const s of A.sites) leaders.add(s.cont);\n\n const blocks: Block[] = [];\n const byPc = new Map<number, Block>();\n let cur: Block | null = null;\n for (const insn of insns) {\n if (A.states[insn.pc] === null) { cur = null; continue; }\n if (leaders.has(insn.pc)) {\n cur = new Block(blocks.length, insn.pc, A.states[insn.pc]!);\n blocks.push(cur);\n byPc.set(insn.pc, cur);\n }\n if (cur === null) bail(`reachable code without a leader at ${insn.pc}`);\n cur.insns.push(insn);\n }\n\n /* regions */\n const root = new Region(0, -1, null, KT.V, -1, -1);\n const regions: Region[] = [root];\n const byOrigin = new Map<number, Region>();\n for (const blk of blocks) {\n let parent = root;\n for (const { kind, slot } of handler_chain(blk.stateIn)) {\n let r = byOrigin.get(kind.origin);\n if (!r) {\n r = new Region(regions.length, kind.origin, parent, kind.t, slot, kind.handler);\n regions.push(r);\n byOrigin.set(kind.origin, r);\n parent.children.push(r);\n } else if (r.parent !== parent || r.slot !== slot) {\n bail('inconsistent try-region nesting');\n }\n parent = r;\n }\n blk.region = parent;\n parent.blocks.push(blk);\n }\n for (const r of regions) {\n if (r.origin < 0) { r.entry = blocks[0]; continue; }\n const originInsn = A.insnAt[r.origin]!;\n const e = byPc.get(originInsn.next);\n if (!e || e.region !== r) bail('try-region without entry');\n r.entry = e;\n }\n return { blocks, byPc, root, regions };\n}\n\n/* On-stack replacement: make the loop header at `H` the entry of the function. Blocks that are\n unreachable from it are dropped, try-regions without live blocks disappear, and every region\n containing the header takes it (or the child region containing it) as its entry node. A\n region containing the header that can also be entered normally (e.g. a try statement inside\n an outer loop) is not supported (Relooper.build bails). */\nfunction osr_prepare(cfg: CFG, A: Analysis, H: number): void {\n const hb = cfg.byPc.get(H);\n if (!hb) bail('osr: the loop header is not a block');\n for (const k of hb.stateIn) {\n if (k.t !== KT.V && k.t !== KT.CATCH && k.t !== KT.CATCH0) bail('osr: unsupported stack at the loop header');\n }\n const live = new Set<Block>([hb]);\n const work: Block[] = [hb];\n const add = (pc: number): void => {\n const t = cfg.byPc.get(pc);\n if (t !== undefined && !live.has(t)) { live.add(t); work.push(t); }\n };\n while (work.length) {\n const blk = work.pop()!;\n const last = blk.insns[blk.insns.length - 1];\n switch (last.op) {\n case OP.return: case OP.return_undef: case OP.throw: case OP.throw_error: case OP.tail_call: case OP.tail_call_method:\n case OP.ret: /* its continuations are added at the gosub sites */\n break;\n case OP.goto: case OP.goto8: case OP.goto16:\n add(last.label); break;\n case OP.if_true: case OP.if_false: case OP.if_true8: case OP.if_false8:\n add(last.label); add(last.next); break;\n case OP.gosub: {\n add(last.label);\n const site = A.sites.find(st => st.pc === last.pc);\n if (site) add(site.cont);\n break;\n }\n default:\n add(last.next);\n if (last.op === OP.catch) add(last.label);\n break;\n }\n /* exception edges */\n for (let r: Region | null = blk.region; r !== null; r = r.parent) if (r.kind === KT.CATCH) add(r.handler);\n }\n for (const blk of cfg.blocks) if (!live.has(blk)) blk.dead = true;\n for (const r of cfg.regions) r.blocks = r.blocks.filter(blk => !blk.dead);\n const kept = new Set<Region>();\n const keep = (r: Region): boolean => {\n r.children = r.children.filter(keep);\n const k = r.origin < 0 || r.blocks.length > 0 || r.children.length > 0;\n if (k) kept.add(r);\n return k;\n };\n keep(cfg.root);\n cfg.regions = cfg.regions.filter(r => kept.has(r));\n let child: Region | null = null;\n for (let r: Region | null = hb.region; r !== null; r = r.parent) {\n r.entry_node = child === null ? hb.id : -child.id - 1;\n r.osr_chain = true;\n child = r;\n }\n /* the arguments object (and rest parameters) are created from the call's `arguments`, which\n the replacement entry does not have */\n for (const blk of live) for (const insn of blk.insns) {\n if (insn.op === OP.rest || insn.op === OP.init_ctor ||\n (insn.op === OP.special_object && (insn.a === OPSpecialObject.ARGUMENTS || insn.a === OPSpecialObject.MAPPED_ARGUMENTS))) {\n bail('osr: arguments object created after the loop header');\n }\n }\n}\n\n/* ---------------------------------------------------------------------\n 4. Block emission (pending expression model)\n --------------------------------------------------------------------- */\n\nconst enum PK { LIT, TEMP, LOCAL, EXPR }\n\ninterface Pending {\n code: string;\n kind: PK;\n cpool: number; /* const pool index for push_const (-1 otherwise) */\n local: string; /* LOCAL: the referenced variable name */\n /* a method reference produced by get_field2/get_array_el2: `recv<access>`; a following\n call_method on the same receiver is emitted as a native member call. `prim(prim_args, args)`\n is the runtime call for primitive receivers; `pc` locates the property access. */\n method?: { recv: string; access: string; prim: string; prim_args: string; pc: number } | null;\n /* a fresh object literal (OP_object): its fields can be assigned instead of defined while\n Object.prototype has no accessors ($P.ok); `mkeys` are keys defined by define_method */\n fresh?: boolean;\n mkeys?: Set<string> | null;\n /* `code` starts with a position marker (set by push(); inspecting the first characters of a\n concatenated string would make the host flatten it) */\n marked?: boolean;\n /* cache of the stack temps `$s<n>` referenced by `code` (valid while trefs_code === code) */\n trefs_code?: string;\n trefs?: number[];\n /* the guest variable or property the value was read from (named in \"x is not a constructor\") */\n name?: string;\n}\n\n/* stack temps referenced by a pending expression (cached: push() asks for every live slot) */\nfunction temps_of(p: Pending): number[] {\n if (p.trefs_code === p.code) return p.trefs!;\n const code = p.code;\n const r: number[] = [];\n let i = code.indexOf('$s');\n while (i >= 0) {\n let j = i + 2, n = 0, c = code.charCodeAt(j);\n if (c >= 48 && c <= 57) {\n do { n = n * 10 + (c - 48); c = code.charCodeAt(++j); } while (c >= 48 && c <= 57);\n r.push(n);\n }\n i = code.indexOf('$s', j);\n }\n p.trefs_code = code;\n p.trefs = r;\n return r;\n}\n\nfunction P(code: string, kind: PK, extra?: Partial<Pending>): Pending {\n /* explicit fields (an object spread here was a measurable part of code generation) */\n const p: Pending = { code, kind, cpool: -1, local: '', method: undefined, fresh: undefined, mkeys: undefined };\n if (extra !== undefined) {\n if (extra.cpool !== undefined) p.cpool = extra.cpool;\n if (extra.local !== undefined) p.local = extra.local;\n if (extra.method !== undefined) p.method = extra.method;\n if (extra.fresh !== undefined) p.fresh = extra.fresh;\n if (extra.mkeys !== undefined) p.mkeys = extra.mkeys;\n }\n return p;\n}\n\n/* the interrupt poll emitted at every function entry and loop head: the interpreter's\n counter, decremented in place (`$C` is the context); the handler is asked when it runs out */\nconst POLL = 'if (--$C.interrupt_counter <= 0) $RT.poll_handler();\\n';\n\nconst IDENT_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nconst RESERVED = new Set(['__proto__']);\n\nfunction fmt_number(n: number): string {\n if (Number.isNaN(n)) return '(0/0)';\n if (n === Infinity) return '(1/0)';\n if (n === -Infinity) return '(-1/0)';\n if (n === 0 && 1 / n < 0) return '(-0)';\n const s = String(n);\n return n < 0 ? `(${s})` : s;\n}\n\nfunction fmt_const(v: any, cpool_index: number): Pending | null {\n switch (typeof v) {\n case 'number': return P(fmt_number(v), PK.LIT, { cpool: cpool_index });\n case 'string': return P(JSON.stringify(v), PK.LIT, { cpool: cpool_index });\n case 'boolean': return P(v ? 'true' : 'false', PK.LIT, { cpool: cpool_index });\n case 'bigint': return P(v < 0n ? `(${v}n)` : `${v}n`, PK.LIT, { cpool: cpool_index });\n case 'undefined': return P('undefined', PK.LIT, { cpool: cpool_index });\n default:\n if (v === null) return P('null', PK.LIT, { cpool: cpool_index });\n return null;\n }\n}\n\ninterface FuncInfo {\n ctx: JSContext;\n b: JSFunctionBytecode;\n A: Analysis;\n strict: boolean;\n constructible: boolean;\n derived: boolean;\n uses_direct: boolean; /* generated code uses `$d` */\n uses_global: boolean; /* generated code uses `$g` */\n uses_w: boolean; /* generated code uses `$w` (a store value evaluated once) */\n natural: boolean; /* natural calling convention (body reads this/new.target directly) */\n arg_off: number; /* index of the first guest argument in `arguments` (2 for the direct convention) */\n /* sloppy global writes: atom -> index of the `$ss<i>` setter declared in the factory scope */\n sloppy_sets: Map<number, number>;\n /* sloppy property writes `o.name = v`: atom -> index of the `$sp<i>` helper */\n sloppy_props: Map<number, number>;\n uses_spe: boolean; /* `$spe(o, k, v)`: sloppy `o[k] = v` */\n uses_sdel: boolean; /* `$sdel(o, k)`: sloppy `delete o[k]` */\n /* pc of a native `new` -> the callee's variable or property name, for the error message of a\n non-constructor callee (the host's message names generated code) */\n ctor_names: Map<number, string>;\n /* a native `new` with arguments declares `$nw`, the last argument's value */\n uses_nw: boolean;\n argName: string[]; /* per arg index: '$a0' or '$c0' (cell) */\n argCell: boolean[];\n varName: string[]; /* per var index: '$v3' */\n varCell: boolean[];\n atom_name: (atom: number) => string;\n atom_is_symbol: (atom: number) => boolean;\n}\n\n/* property key text for a static atom: `.name` or `[..]` */\nfunction key_access(fi: FuncInfo, atom: number): string {\n if (__JS_AtomIsTaggedInt(atom)) return `[${__JS_AtomToUInt32(atom)}]`;\n if (fi.atom_is_symbol(atom)) bail('symbol atom in static property access');\n const name = fi.atom_name(atom);\n if (IDENT_RE.test(name) && !RESERVED.has(name)) return `.${name}`;\n return `[${JSON.stringify(name)}]`;\n}\n\n/* property key value for a static atom (string/number literal) */\nfunction key_value(fi: FuncInfo, atom: number): string {\n if (__JS_AtomIsTaggedInt(atom)) return String(__JS_AtomToUInt32(atom));\n if (fi.atom_is_symbol(atom)) bail('symbol atom as property key');\n return JSON.stringify(fi.atom_name(atom));\n}\n\n/* references to stack temps `$s<n>` in generated code (manual scans: these run for every push) */\nfunction refs_temp_above(code: string, idx: number): boolean {\n let i = code.indexOf('$s');\n while (i >= 0) {\n let j = i + 2, n = 0, c = code.charCodeAt(j);\n if (c >= 48 && c <= 57) {\n do { n = n * 10 + (c - 48); c = code.charCodeAt(++j); } while (c >= 48 && c <= 57);\n if (n > idx) return true;\n }\n i = code.indexOf('$s', j);\n }\n return false;\n}\nfunction refs_temp(code: string, idx: number): boolean {\n let i = code.indexOf('$s');\n while (i >= 0) {\n let j = i + 2, n = 0, c = code.charCodeAt(j);\n if (c >= 48 && c <= 57) {\n do { n = n * 10 + (c - 48); c = code.charCodeAt(++j); } while (c >= 48 && c <= 57);\n if (n === idx) return true;\n }\n i = code.indexOf('$s', j);\n }\n return false;\n}\nconst TEMP_NAMES: string[] = [];\nfunction temp_name(i: number): string {\n let n = TEMP_NAMES[i];\n if (n === undefined) { n = `$s${i}`; TEMP_NAMES[i] = n; }\n return n;\n}\n/* position markers are emitted as comments `/*@<pc>*\\/` (see src/jit_stack.ts) */\nfunction starts_with_marker(code: string): boolean {\n return code.charCodeAt(0) === 47 && code.charCodeAt(1) === 42 && code.charCodeAt(2) === 64;\n}\n/* a statement `$name = /*@<pc>*\\/...`: the pc of the expression it assigns, else -1 */\nfunction stmt_expr_pc(stmt: string): number {\n if (stmt.charCodeAt(0) !== 36 /* $ */) return -1;\n let i = 1, c = stmt.charCodeAt(1);\n if (!(c === 36 || c === 95 || (c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122))) return -1;\n while (c === 36 || c === 95 || (c >= 48 && c <= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122)) c = stmt.charCodeAt(++i);\n if (c !== 32 || stmt.charCodeAt(i + 1) !== 61 || stmt.charCodeAt(i + 2) !== 32 ||\n stmt.charCodeAt(i + 3) !== 47 || stmt.charCodeAt(i + 4) !== 42 || stmt.charCodeAt(i + 5) !== 64) return -1;\n let j = i + 6, pc = 0;\n c = stmt.charCodeAt(j);\n if (!(c >= 48 && c <= 57)) return -1;\n while (c >= 48 && c <= 57) { pc = pc * 10 + (c - 48); c = stmt.charCodeAt(++j); }\n return c === 42 ? pc : -1;\n}\n\n/* a primitive literal (never an object): property operations go straight to the runtime */\nconst PRIM_LIT_RE = /^(?:-?\\d|\\(|\"|'|true$|false$|null$|undefined$|\\d)/;\nfunction is_prim_literal(code: string): boolean {\n return PRIM_LIT_RE.test(code) && !code.startsWith('$');\n}\n\nfunction is_obj_guard(x: string): string {\n return `(typeof ${x} === 'object' ? ${x} !== null : typeof ${x} === 'function')`;\n}\n\nclass BlockEmitter {\n fi: FuncInfo;\n blk: Block;\n slots: Pending[] = [];\n out: string[] = [];\n scratch = 0;\n\n /* temps `$s<k>` that may occur in pending code of this block: those of the input stack and\n every temp slot pushed or materialized since (a pending expression can only mention a temp\n that existed as a slot). Lets push() skip scanning expression strings, which would make the\n host flatten every nested expression. */\n temp_seen: boolean[] = [];\n max_seen = -1;\n see_temp(i: number): void {\n if (this.temp_seen[i] !== true) { this.temp_seen[i] = true; if (i > this.max_seen) this.max_seen = i; }\n }\n\n constructor(fi: FuncInfo, blk: Block) {\n this.fi = fi;\n this.blk = blk;\n for (let i = 0; i < blk.stateIn.length; i++) { this.slots.push(P(temp_name(i), PK.TEMP)); this.see_temp(i); }\n }\n\n get depth(): number { return this.slots.length; }\n /* every statement starts with a position marker (see M): that of the expression it assigns,\n else of the current instruction */\n emit(stmt: string): void {\n if (starts_with_marker(stmt)) { this.out.push(stmt); return; }\n const pc = stmt_expr_pc(stmt);\n this.out.push((pc >= 0 ? `/*@${pc}*/` : this.M()) + stmt);\n }\n\n /* Position marker: a comment \"/*@<pc>*\\/\" that the host parses as whitespace; the table\n (line, column) -> pc is built from the source when a backtrace needs it (src/jit_stack.ts),\n so that a host stack frame of the compiled function maps back to the guest operation. Every pushed expression starts with\n one; property accesses and calls carry one before their `.`/`[`/`(` and one at their end,\n binary operators one at the operator: the hosts report one of those points. */\n M(pc = this.cur_pc): string { return `/*@${pc}*/`; }\n\n /* a fresh scratch variable (declared at function level as $x0, $x1, ...) */\n tmp(): string { return `$x${this.scratch++}`; }\n\n /* materialize slot i into its canonical temp. Pending expressions below i are evaluated\n first so that the evaluation order of the original code is preserved. */\n materialize(i: number): void {\n const p = this.slots[i];\n if (p.kind === PK.TEMP && p.code === `$s${i}`) return;\n if (p.kind === PK.EXPR) {\n for (let j = 0; j < i; j++) if (this.slots[j].kind === PK.EXPR) this.materialize(j);\n }\n this.emit(`$s${i} = ${p.code};`);\n this.slots[i] = P(temp_name(i), PK.TEMP, { fresh: p.fresh, mkeys: p.mkeys });\n if (p.name !== undefined) this.slots[i].name = p.name;\n this.see_temp(i);\n }\n /* materialize every pending expression that is not trivially duplicable, in order */\n flush_exprs(upto = this.depth): void {\n for (let i = 0; i < upto; i++) if (this.slots[i].kind === PK.EXPR) this.materialize(i);\n }\n /* materialize all pending reads of a local before writing it */\n flush_local(name: string): void {\n for (let i = 0; i < this.depth; i++) if (this.slots[i].kind === PK.LOCAL && this.slots[i].local === name) this.materialize(i);\n }\n /* materialize everything so that slot i holds `$s<i>` */\n finalize(): void {\n /* 1. expressions and literals that are not in canonical form */\n const moves: { i: number; from: string }[] = [];\n for (let i = 0; i < this.depth; i++) {\n const p = this.slots[i];\n if (p.kind === PK.TEMP) { if (p.code !== `$s${i}`) moves.push({ i, from: p.code }); }\n else if (p.kind === PK.EXPR) this.materialize(i);\n }\n /* 2. literal/local assignments: the sources are not temps, no ordering issue, but they must\n happen after the temp moves if a temp move reads a slot they overwrite... simplest: do\n temp moves first via a parallel-move resolver, then the others. */\n this.parallel_moves(moves);\n for (let i = 0; i < this.depth; i++) {\n const p = this.slots[i];\n if (p.kind === PK.LIT || p.kind === PK.LOCAL) this.materialize(i);\n }\n }\n private parallel_moves(moves: { i: number; from: string }[]): void {\n /* moves: $s<i> = from, where from is some $s<j>. Resolve cycles with $x scratch. */\n const pending = new Map<number, string>(); /* dest -> src */\n for (const m of moves) pending.set(m.i, m.from);\n const isRead = (name: string): boolean => { for (const s of pending.values()) if (s === name) return true; return false; };\n while (pending.size) {\n let progress = false;\n for (const [dest, src] of [...pending]) {\n if (!isRead(`$s${dest}`)) {\n this.emit(`$s${dest} = ${src};`);\n this.slots[dest] = P(temp_name(dest), PK.TEMP);\n this.see_temp(dest);\n pending.delete(dest);\n progress = true;\n }\n }\n if (!progress) {\n /* break a cycle */\n const [dest, src] = pending.entries().next().value as [number, string];\n const t = this.tmp();\n this.emit(`${t} = ${src};`);\n for (const [d2, s2] of pending) if (s2 === src) pending.set(d2, t);\n void dest;\n }\n }\n }\n\n push(p: Pending): void {\n const idx = this.depth;\n /* a live slot below may still hold the temp `$s<idx>` (after dup/permutations): save it first */\n if (this.temp_seen[idx] === true) {\n const mine = temp_name(idx);\n for (let j = 0; j < idx; j++) {\n const q = this.slots[j];\n if ((q.kind === PK.TEMP && q.code === mine) || (q.kind === PK.EXPR && temps_of(q).includes(idx))) this.materialize(j);\n }\n }\n if (p.kind === PK.EXPR && p.marked !== true) { p.code = this.M() + p.code; p.marked = true; }\n else if (p.kind === PK.TEMP) {\n /* a temp slot: `$s<k>` (k may differ from idx after permutations) */\n const code = p.code;\n if (code.length > 2 && code.charCodeAt(0) === 36 && code.charCodeAt(1) === 115) {\n const k = Number(code.slice(2));\n if (Number.isInteger(k)) this.see_temp(k);\n }\n }\n this.slots.push(p);\n /* an expression that reads temps above its own slot must be evaluated now, before those\n temps are reused */\n if (p.kind === PK.EXPR && this.max_seen > idx) {\n const t = temps_of(p);\n for (let k = 0; k < t.length; k++) if (t[k] > idx) { this.materialize(idx); break; }\n }\n }\n /* make every slot a canonical temp (used after permutations) */\n canonicalize(): void { this.finalize(); }\n pop(): Pending {\n if (!this.slots.length) bail('emit: stack underflow');\n return this.slots.pop()!;\n }\n top(i = 1): Pending { return this.slots[this.slots.length - i]; }\n /* drop a slot: its side effects must still happen */\n drop_value(p: Pending): void {\n if (p.kind === PK.EXPR) this.emit(`${p.code};`);\n }\n /* make the slot duplicable (temp/local/lit) and return its code */\n dup_code(i: number): string {\n const p = this.slots[i];\n if (p.kind === PK.EXPR) this.materialize(i);\n return this.slots[i].code;\n }\n /* the value of a store that is written into two branches (fast native store / runtime\n fallback): an expression is evaluated once into `$w` first. Order-preserving: the statement\n follows immediately and the guard between them evaluates nothing. */\n store_value(v: Pending): string {\n if (v.kind !== PK.EXPR) return v.code;\n this.fi.uses_w = true;\n this.emit(`$w = ${v.code};`);\n return '$w';\n }\n /* code of an operand for use inside a larger expression */\n par(p: Pending): string {\n if (p.kind === PK.EXPR) return `(${p.code})`;\n return p.code;\n }\n /* before emitting a statement with side effects */\n before_stmt(): void { this.flush_exprs(); }\n\n /* --- variable access --- */\n /* the source name of the argument or variable at vardefs[i] ('' when unknown) */\n vardef_name(i: number): string {\n const vd = this.fi.b.vardefs[i];\n return vd === undefined ? '' : this.fi.atom_name(vd.var_name);\n }\n\n arg_read(i: number): Pending {\n const fi = this.fi;\n if (i >= fi.argName.length) return P('undefined', PK.LIT);\n const p = fi.argCell[i] ? P(`${fi.argName[i]}.get()`, PK.EXPR) : P(fi.argName[i], PK.LOCAL, { local: fi.argName[i] });\n p.name = this.vardef_name(i);\n return p;\n }\n var_read(i: number): Pending {\n const fi = this.fi;\n if (i >= fi.varName.length) bail(`bad local index ${i}`);\n const p = fi.varCell[i] ? P(`${fi.varName[i]}.get()`, PK.EXPR) : P(fi.varName[i], PK.LOCAL, { local: fi.varName[i] });\n p.name = this.vardef_name(fi.b.arg_count + i);\n return p;\n }\n write_local(is_arg: boolean, i: number, value: string): void {\n const fi = this.fi;\n const name = is_arg ? fi.argName[i] : fi.varName[i];\n const cell = is_arg ? fi.argCell[i] : fi.varCell[i];\n if (name === undefined) bail(`bad variable index ${i}`);\n if (cell) { this.before_stmt(); this.emit(`${name}.set(${value});`); }\n else { this.flush_local(name); this.emit(`${name} = ${value};`); }\n }\n /* current value expression of a local (duplicable) */\n local_value(is_arg: boolean, i: number): string {\n const fi = this.fi;\n const name = is_arg ? fi.argName[i] : fi.varName[i];\n const cell = is_arg ? fi.argCell[i] : fi.varCell[i];\n return cell ? `${name}.get()` : name;\n }\n\n /* --- property access and calls --- */\n guard_obj(x: string): string { return is_obj_guard(x); }\n\n get_field(obj: string, atom: number): string {\n if (is_prim_literal(obj)) return `$RT.get_field(${obj}, ${atom})`;\n const M = this.M();\n return `(${this.guard_obj(obj)} ? ${obj}${M}${key_access(this.fi, atom)}${M} : $RT.get_field(${obj}, ${atom}))`;\n }\n get_el(obj: string, key: string): string {\n if (is_prim_literal(obj)) return `$RT.get_el(${obj}, ${key})`;\n const M = this.M();\n return `(${this.guard_obj(obj)} ? ${obj}${M}[${key}]${M} : $RT.get_el(${obj}, ${key}))`;\n }\n put_field_stmt(obj: string, atom: number, val: string): string {\n const fi = this.fi;\n const M = this.M();\n if (is_prim_literal(obj)) return `$RT.put_field(${obj}, ${atom}, ${val}, ${fi.strict});`;\n if (fi.strict) return `if (${this.guard_obj(obj)}) ${obj}${M}${key_access(fi, atom)} = ${val}; else $RT.put_field${M}(${obj}, ${atom}, ${val}, true);`;\n /* sloppy assignment semantics (no throw) come from a non-strict helper in the factory scope */\n let idx = fi.sloppy_props.get(atom);\n if (idx === undefined) { idx = fi.sloppy_props.size; fi.sloppy_props.set(atom, idx); }\n return `if (${this.guard_obj(obj)}) $sp${idx}${M}(${obj}, ${val}); else $RT.put_field${M}(${obj}, ${atom}, ${val}, false);`;\n }\n put_el_stmt(obj: string, key: string, val: string): string {\n const fi = this.fi;\n const M = this.M();\n if (is_prim_literal(obj)) return `$RT.put_el(${obj}, ${key}, ${val}, ${fi.strict});`;\n if (fi.strict) return `if (${this.guard_obj(obj)}) ${obj}${M}[${key}] = ${val}; else $RT.put_el${M}(${obj}, ${key}, ${val}, true);`;\n fi.uses_spe = true;\n return `if (${this.guard_obj(obj)}) $spe${M}(${obj}, ${key}, ${val}); else $RT.put_el${M}(${obj}, ${key}, ${val}, false);`;\n }\n /* call with an explicit `this`: the direct entry of guest functions, else the engine */\n call_with_this(fn: string, thisv: string, args: string[]): string {\n this.fi.uses_direct = true;\n const a = args.join(', ');\n const M = this.M();\n return `(($d = $DIRECT.get(${fn})) !== undefined ? $d${M}(${thisv}, undefined${a ? ', ' + a : ''})${M} : $RT.call_slow${M}(${fn}, ${thisv}, [${a}])${M})`;\n }\n construct_with_target(fn: string, nt: string, args: string[]): string {\n this.fi.uses_direct = true;\n const a = args.join(', ');\n const M = this.M();\n return `(($d = $DIRECT.get(${fn})) !== undefined ? $d${M}(undefined, ${nt}${a ? ', ' + a : ''})${M} : $RT.construct_slow${M}(${fn}, ${nt}, [${a}])${M})`;\n }\n\n /* returns true if the instruction terminated the block */\n translate(insn: Insn, last: boolean): boolean {\n const fi = this.fi;\n const op = insn.op;\n switch (op) {\n /* --- constants --- */\n case OP.push_i32: case OP.push_i8: case OP.push_i16: case OP.push_minus1: case OP.push_0: case OP.push_1:\n case OP.push_2: case OP.push_3: case OP.push_4: case OP.push_5: case OP.push_6: case OP.push_7:\n this.push(P(fmt_number(insn.a), PK.LIT)); return false;\n case OP.push_bigint_i32:\n /* a negative literal is parenthesized: `-1n ** 2n` is a syntax error */\n this.push(P(insn.a < 0 ? `(${insn.a}n)` : `${insn.a}n`, PK.LIT)); return false;\n case OP.push_const: case OP.push_const8: {\n const v = fi.b.cpool[insn.a];\n const lit = v instanceof JSFunctionBytecode ? null : fmt_const(v, insn.a);\n this.push(lit ?? P(`$cpool[${insn.a}]`, PK.LIT, { cpool: insn.a }));\n return false;\n }\n case OP.push_empty_string: this.push(P('\"\"', PK.LIT)); return false;\n case OP.undefined: this.push(P('undefined', PK.LIT)); return false;\n case OP.null: this.push(P('null', PK.LIT)); return false;\n case OP.push_false: this.push(P('false', PK.LIT)); return false;\n case OP.push_true: this.push(P('true', PK.LIT)); return false;\n case OP.push_atom_value:\n if (fi.atom_is_symbol(insn.a)) this.push(P(`$RT.atom_value(${insn.a})`, PK.EXPR));\n else if (__JS_AtomIsTaggedInt(insn.a)) this.push(P(String(__JS_AtomToUInt32(insn.a)), PK.LIT));\n else this.push(P(JSON.stringify(fi.atom_name(insn.a)), PK.LIT));\n return false;\n case OP.private_symbol:\n this.push(P(`$RT.private_symbol(${insn.a})`, PK.EXPR)); return false;\n case OP.push_this:\n if (fi.strict) this.push(P('$t', PK.LOCAL, { local: '$t' }));\n else this.push(P(`(($t === undefined || $t === null) ? $G : ((typeof $t === 'object' || typeof $t === 'function') ? $t : $RT.to_object($t)))`, PK.EXPR));\n return false;\n case OP.object:\n this.push(P('new $Obj()', PK.EXPR, { fresh: true, mkeys: null })); return false;\n case OP.special_object:\n switch (insn.a) {\n case OPSpecialObject.ARGUMENTS: this.push(P(`$RT.arguments(arguments, ${fi.arg_off})`, PK.EXPR)); break;\n case OPSpecialObject.MAPPED_ARGUMENTS:\n this.push(P(`$RT.mapped_arguments(arguments, ${fi.arg_off}, [${fi.argName.join(', ')}], $fo)`, PK.EXPR)); break;\n case OPSpecialObject.THIS_FUNC: this.push(P('$fo', PK.LOCAL, { local: '$fo' })); break;\n case OPSpecialObject.NEW_TARGET:\n /* a non constructible function (method, arrow body) is never constructed */\n if (fi.constructible) this.push(P('$nt', PK.LOCAL, { local: '$nt' })); else this.push(P('undefined', PK.LIT));\n break;\n case OPSpecialObject.HOME_OBJECT: this.push(P('$RT.home_object($fo)', PK.EXPR)); break;\n case OPSpecialObject.VAR_OBJECT: this.push(P('$RT.new_object_null()', PK.EXPR)); break;\n case OPSpecialObject.IMPORT_META: this.push(P('$RT.import_meta($b)', PK.EXPR)); break;\n default: bail('special object ' + insn.a);\n }\n return false;\n case OP.rest:\n this.push(P(`$RT.rest(arguments, ${fi.arg_off}, ${insn.a})`, PK.EXPR)); return false;\n\n /* --- stack manipulation --- */\n case OP.drop: this.drop_value(this.pop()); return false;\n case OP.nip: { const y = this.pop(); const x = this.pop(); this.drop_value(x); this.push(y); return false; }\n case OP.nip1: { const z = this.pop(); const y = this.pop(); const x = this.pop(); this.drop_value(x); this.push(y); this.push(z); return false; }\n case OP.dup: { const c = this.dup_code(this.depth - 1); this.push({ ...this.top() , code: c }); return false; }\n case OP.dup1: { /* a b -> a a b */\n this.dup_code(this.depth - 2); this.dup_code(this.depth - 1);\n const b = this.pop(); const a = this.pop(); this.push(a); this.push({ ...a }); this.push(b); return false;\n }\n case OP.dup2: { this.dup_code(this.depth - 2); this.dup_code(this.depth - 1); const a = this.top(2), b = this.top(1); this.push({ ...a }); this.push({ ...b }); return false; }\n case OP.dup3: { this.dup_code(this.depth - 3); this.dup_code(this.depth - 2); this.dup_code(this.depth - 1); const a = this.top(3), b = this.top(2), c = this.top(1); this.push({ ...a }); this.push({ ...b }); this.push({ ...c }); return false; }\n case OP.insert2: case OP.insert3: case OP.insert4: case OP.perm3: case OP.perm4: case OP.perm5:\n case OP.swap: case OP.swap2: case OP.rot3l: case OP.rot3r: case OP.rot4l: case OP.rot5l: {\n const oi = short_opcode_info(op);\n const n = oi.n_pop;\n for (let i = this.depth - n; i < this.depth; i++) this.dup_code(i);\n const v = this.slots.splice(this.depth - n, n);\n let r: Pending[];\n switch (op) {\n case OP.insert2: r = [v[1], v[0], v[1]]; break;\n case OP.insert3: r = [v[2], v[0], v[1], v[2]]; break;\n case OP.insert4: r = [v[3], v[0], v[1], v[2], v[3]]; break;\n case OP.perm3: r = [v[1], v[0], v[2]]; break;\n case OP.perm4: r = [v[2], v[0], v[1], v[3]]; break;\n case OP.perm5: r = [v[3], v[0], v[1], v[2], v[4]]; break;\n case OP.swap: r = [v[1], v[0]]; break;\n case OP.swap2: r = [v[2], v[3], v[0], v[1]]; break;\n case OP.rot3l: r = [v[1], v[2], v[0]]; break;\n case OP.rot3r: r = [v[2], v[0], v[1]]; break;\n case OP.rot4l: r = [v[1], v[2], v[3], v[0]]; break;\n default: r = [v[1], v[2], v[3], v[4], v[0]]; break;\n }\n for (const p of r) this.slots.push({ ...p });\n this.canonicalize();\n return false;\n }\n\n /* --- closures --- */\n case OP.fclosure: case OP.fclosure8: {\n const child = fi.b.cpool[insn.a];\n if (!(child instanceof JSFunctionBytecode)) bail('fclosure without bytecode');\n this.push(P(`$RT.closure($cpool[${insn.a}], ${this.closure_refs(child)}, $fo)`, PK.EXPR));\n return false;\n }\n\n /* --- calls --- */\n case OP.call0: case OP.call1: case OP.call2: case OP.call3: case OP.call: case OP.tail_call: {\n /* plain call: native (this = undefined, strict callees) */\n const argc = insn.a;\n const args = this.pop_args(argc);\n const fn = this.pop();\n const M = this.M();\n const e = `${this.par(fn)}${M}(${args.join(', ')})${M}`;\n if (op === OP.tail_call) { this.before_stmt(); this.emit_return(e); return true; }\n this.push(P(e, PK.EXPR));\n return false;\n }\n case OP.call_method: case OP.tail_call_method: {\n const argc = insn.a;\n const args = this.pop_args(argc);\n const fn = this.top(1), thisv = this.top(2);\n let e: string;\n const a = args.join(', ');\n if (fn.method && fn.method.recv === thisv.code && a.length <= 400) {\n /* fused member call: evaluation order (receiver, property, arguments) is the\n bytecode's since the arguments are still pending expressions */\n this.pop(); this.pop();\n const r = fn.method.recv;\n const M = this.M();\n e = `(${this.guard_obj(r)} ? ${r}${this.M(fn.method.pc)}${fn.method.access}${M}(${a})${M} : ${fn.method.prim}${M}(${fn.method.prim_args}, [${a}])${M})`;\n jit_stats.method_calls_fused++;\n } else {\n const f = this.dup_code(this.depth - 1); const t = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n e = this.call_with_this(f, t, args);\n jit_stats.method_calls_unfused++;\n }\n if (op === OP.tail_call_method) { this.before_stmt(); this.emit_return(e); return true; }\n this.push(P(e, PK.EXPR));\n return false;\n }\n case OP.call_constructor: {\n const argc = insn.a;\n const args = this.pop_args(argc);\n const nt = this.top(1), fn = this.top(2);\n let e: string;\n if ((nt.kind === PK.TEMP || nt.kind === PK.LOCAL) && nt.kind === fn.kind && nt.code === fn.code) {\n /* `new C(args)`: new.target is the constructor itself */\n this.pop(); this.pop();\n /* every native construct site is recorded: a failure there is named after the callee\n the site stored in $C.last_new once its arguments ran (after the last one, so a nested\n `new` in an argument cannot overwrite it) */\n this.fi.ctor_names.set(this.cur_pc, fn.name ?? '');\n if (args.length > 0) this.fi.uses_nw = true;\n const store = `$C.last_new = ${fn.code}`;\n const n = args.length;\n const argv = n === 0 ? [] : [...args.slice(0, n - 1), `($nw = ${args[n - 1]}, ${store}, $nw)`];\n e = n === 0 ? `(${store}, new ${fn.code}${this.M()}()${this.M()})` : `new ${fn.code}${this.M()}(${argv.join(', ')})${this.M()}`;\n } else {\n const t = this.dup_code(this.depth - 1); const f = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n e = this.construct_with_target(f, t, args);\n }\n this.push(P(e, PK.EXPR));\n return false;\n }\n case OP.array_from: {\n const args = this.pop_args(insn.a);\n this.push(P(`$RT.array([${args.join(', ')}])`, PK.EXPR));\n return false;\n }\n case OP.apply: {\n const arr = this.pop(); const thisv = this.pop(); const fn = this.pop();\n this.push(P(`$RT.apply(${this.par(fn)}, ${this.par(thisv)}, ${this.par(arr)}, ${insn.a})`, PK.EXPR));\n return false;\n }\n case OP.return: { const v = this.pop(); this.before_stmt(); this.emit_return(v.code); return true; }\n case OP.return_undef: this.before_stmt(); this.emit_return('undefined'); return true;\n case OP.check_ctor_return: {\n const r = this.dup_code(this.depth - 1);\n this.before_stmt();\n this.emit(`if (!${this.guard_obj(r)} && ${r} !== undefined) $RT.throw_type_error(\"derived class constructor must return an object or undefined\");`);\n this.push(P(`!${this.guard_obj(r)}`, PK.EXPR));\n return false;\n }\n case OP.check_ctor:\n this.before_stmt();\n this.emit(`if ($nt === undefined) $RT.throw_type_error(\"class constructors must be invoked with 'new'\");`);\n return false;\n case OP.init_ctor:\n this.push(P(`$RT.init_ctor($fo, $nt, arguments, ${fi.arg_off})`, PK.EXPR)); return false;\n case OP.check_brand: {\n const f = this.dup_code(this.depth - 1), o = this.dup_code(this.depth - 2);\n this.before_stmt();\n this.emit(`$RT.check_brand(${o}, ${f});`);\n return false;\n }\n case OP.add_brand: {\n const f = this.pop(), o = this.pop();\n this.before_stmt();\n this.emit(`$RT.add_brand(${this.par(o)}, ${this.par(f)});`);\n return false;\n }\n case OP.throw: { const v = this.pop(); this.before_stmt(); this.emit(`throw ${v.code};`); this.blk.term = { kind: 'none' }; return true; }\n case OP.throw_error:\n this.before_stmt();\n this.emit(`$RT.throw_error(${insn.a}, ${insn.b});`);\n this.blk.term = { kind: 'none' };\n return true;\n case OP.regexp: {\n const flags = this.pop(), pat = this.pop();\n this.push(P(`$RT.regexp(${this.par(pat)}, ${this.par(flags)})`, PK.EXPR));\n return false;\n }\n case OP.get_super: {\n const o = this.dup_code(this.depth - 1); this.pop();\n this.push(P(`(${this.guard_obj(o)} ? $getproto(${o}) : $RT.get_prototype(${o}))`, PK.EXPR));\n return false;\n }\n\n /* --- globals --- */\n case OP.check_var: this.push(P(`$RT.check_var(${insn.a})`, PK.EXPR)); return false;\n case OP.get_var_undef: case OP.get_var: {\n /* inline fast path: the global variable table ($GV, lexical globals, TDZ sentinel $U)\n then the global object ($G); the runtime handles the slow cases (undefined values,\n missing variables, errors) */\n const acc = this.global_access(insn.a);\n if (acc === null) { this.push(P(`$RT.get_global(${insn.a}, ${op === OP.get_var})`, PK.EXPR)); return false; }\n fi.uses_global = true;\n const slow = `$RT.get_global(${insn.a}, ${op === OP.get_var})`;\n const g = op === OP.get_var ? `(($g = $G${acc}) !== undefined ? $g : ${slow})` : `$G${acc}`;\n const pv = P(`(($g = $GV${acc}) !== undefined ? ($g === $U ? ${slow} : $g) : ${g})`, PK.EXPR);\n pv.name = fi.atom_name(insn.a);\n this.push(pv);\n return false;\n }\n case OP.put_var: case OP.put_var_init: {\n const acc = this.global_access(insn.a);\n if (op === OP.put_var_init || acc === null) {\n const v = this.pop(); this.before_stmt();\n this.emit(`$RT.put_global(${insn.a}, ${v.code}, ${op - OP.put_var}, ${fi.strict});`);\n return false;\n }\n const v = this.dup_code(this.depth - 1); this.pop(); this.before_stmt();\n const key = key_value(fi, insn.a);\n if (fi.strict) {\n this.emit(`if (${key} in $GV || !(${key} in $G)) $RT.put_global(${insn.a}, ${v}, 0, true); else $G${acc} = ${v};`);\n } else {\n /* sloppy assignment semantics (no throw) come from a non-strict helper in the factory scope */\n let idx = fi.sloppy_sets.get(insn.a);\n if (idx === undefined) { idx = fi.sloppy_sets.size; fi.sloppy_sets.set(insn.a, idx); }\n this.emit(`$ss${idx}(${v});`);\n }\n return false;\n }\n case OP.put_var_strict: {\n const v = this.pop(); const flag = this.pop(); this.before_stmt();\n this.emit(`$RT.put_global_strict(${insn.a}, ${this.par(flag)}, ${v.code});`);\n return false;\n }\n case OP.check_define_var: this.before_stmt(); this.emit(`$RT.check_define_var(${insn.a}, ${insn.b});`); return false;\n case OP.define_var: this.before_stmt(); this.emit(`$RT.define_var(${insn.a}, ${insn.b});`); return false;\n case OP.define_func: { const v = this.pop(); this.before_stmt(); this.emit(`$RT.define_func(${insn.a}, ${v.code}, ${insn.b});`); return false; }\n case OP.make_loc_ref: case OP.make_arg_ref: case OP.make_var_ref_ref: {\n /* the reference object is static (see KT.REF); only the property name is a value */\n this.push(P('undefined', PK.LIT));\n if (fi.atom_is_symbol(insn.a)) this.push(P(`$RT.atom_value(${insn.a})`, PK.EXPR));\n else this.push(P(JSON.stringify(fi.atom_name(insn.a)), PK.LIT));\n return false;\n }\n case OP.make_var_ref: {\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = $RT.get_global_ref(${insn.a}); $s${d + 1} = $s${d}[1]; $s${d} = $s${d}[0];`);\n this.push(P(`$s${d}`, PK.TEMP)); this.push(P(`$s${d + 1}`, PK.TEMP));\n return false;\n }\n case OP.delete_var: this.push(P(`$RT.delete_global(${insn.a})`, PK.EXPR)); return false;\n\n /* --- locals --- */\n case OP.get_loc: case OP.get_loc8: case OP.get_loc0: case OP.get_loc1: case OP.get_loc2: case OP.get_loc3:\n this.push(this.var_read(insn.a)); return false;\n case OP.put_loc: case OP.put_loc8: case OP.put_loc0: case OP.put_loc1: case OP.put_loc2: case OP.put_loc3: {\n const v = this.pop(); this.write_local(false, insn.a, v.code); return false;\n }\n case OP.set_loc: case OP.set_loc8: case OP.set_loc0: case OP.set_loc1: case OP.set_loc2: case OP.set_loc3: {\n const c = this.dup_code(this.depth - 1); this.write_local(false, insn.a, c); return false;\n }\n case OP.get_arg: case OP.get_arg0: case OP.get_arg1: case OP.get_arg2: case OP.get_arg3:\n this.push(this.arg_read(insn.a)); return false;\n case OP.put_arg: case OP.put_arg0: case OP.put_arg1: case OP.put_arg2: case OP.put_arg3: {\n const v = this.pop(); this.write_local(true, insn.a, v.code); return false;\n }\n case OP.set_arg: case OP.set_arg0: case OP.set_arg1: case OP.set_arg2: case OP.set_arg3: {\n const c = this.dup_code(this.depth - 1); this.write_local(true, insn.a, c); return false;\n }\n case OP.get_var_ref: case OP.get_var_ref0: case OP.get_var_ref1: case OP.get_var_ref2: case OP.get_var_ref3: {\n const pv = P(`$vr[${insn.a}].get()`, PK.EXPR);\n const cv = fi.b.closure_var[insn.a];\n if (cv !== undefined) pv.name = fi.atom_name(cv.var_name);\n this.push(pv); return false;\n }\n case OP.put_var_ref: case OP.put_var_ref0: case OP.put_var_ref1: case OP.put_var_ref2: case OP.put_var_ref3: {\n const v = this.pop(); this.before_stmt(); this.emit(`$vr[${insn.a}].set(${v.code});`); return false;\n }\n case OP.set_var_ref: case OP.set_var_ref0: case OP.set_var_ref1: case OP.set_var_ref2: case OP.set_var_ref3: {\n const c = this.dup_code(this.depth - 1); this.before_stmt(); this.emit(`$vr[${insn.a}].set(${c});`); return false;\n }\n case OP.get_var_ref_check: {\n const d = this.depth; this.before_stmt();\n this.emit(`$s${d} = $vr[${insn.a}].get(); if ($s${d} === $U) $RT.throw_uninitialized($b, ${insn.a}, true);`);\n const pv = P(`$s${d}`, PK.TEMP);\n const cv = fi.b.closure_var[insn.a];\n if (cv !== undefined) pv.name = fi.atom_name(cv.var_name);\n this.push(pv); return false;\n }\n case OP.put_var_ref_check: {\n const v = this.pop(); this.before_stmt();\n this.emit(`if ($vr[${insn.a}].get() === $U) $RT.throw_uninitialized($b, ${insn.a}, true); $vr[${insn.a}].set(${v.code});`);\n return false;\n }\n case OP.put_var_ref_check_init: {\n const v = this.pop(); this.before_stmt();\n this.emit(`if ($vr[${insn.a}].get() !== $U) $RT.throw_uninitialized($b, ${insn.a}, true); $vr[${insn.a}].set(${v.code});`);\n return false;\n }\n case OP.set_loc_uninitialized: this.write_local(false, insn.a, '$U'); return false;\n case OP.get_loc_check: case OP.get_loc_checkthis: {\n const d = this.depth; this.before_stmt();\n this.emit(`$s${d} = ${this.local_value(false, insn.a)}; if ($s${d} === $U) $RT.throw_uninitialized($b, ${insn.a}, false);`);\n const pv = P(`$s${d}`, PK.TEMP);\n pv.name = this.vardef_name(fi.b.arg_count + insn.a);\n this.push(pv); return false;\n }\n case OP.put_loc_check: {\n const v = this.pop(); this.before_stmt();\n this.emit(`if (${this.local_value(false, insn.a)} === $U) $RT.throw_uninitialized($b, ${insn.a}, false);`);\n this.write_local(false, insn.a, v.code);\n return false;\n }\n case OP.put_loc_check_init: {\n const v = this.pop(); this.before_stmt();\n this.emit(`if (${this.local_value(false, insn.a)} !== $U) $RT.throw_reference_error(\"'this' can be initialized only once\");`);\n this.write_local(false, insn.a, v.code);\n return false;\n }\n case OP.close_loc:\n if (fi.varCell[insn.a]) { this.before_stmt(); this.emit(`${fi.varName[insn.a]} = $RT.new_cell(${fi.varName[insn.a]}.get());`); }\n return false;\n\n /* --- control flow --- */\n case OP.goto: case OP.goto8: case OP.goto16:\n this.finalize();\n this.blk.term = { kind: 'jump', target: insn.label };\n return true;\n case OP.if_true: case OP.if_false: case OP.if_true8: case OP.if_false8: {\n let cond = this.pop();\n if (this.needs_moves() && cond.kind !== PK.LIT) {\n const t = this.tmp();\n this.flush_exprs();\n this.emit(`${t} = ${cond.code};`);\n cond = P(t, PK.TEMP);\n }\n this.finalize();\n const isTrue = (op === OP.if_true || op === OP.if_true8);\n this.blk.term = { kind: 'cond', cond: cond.code, tTrue: isTrue ? insn.label : insn.next, tFalse: isTrue ? insn.next : insn.label };\n return true;\n }\n case OP.catch:\n this.push(P('undefined', PK.LIT));\n return false;\n case OP.gosub: {\n const d = this.depth;\n const site = fi.A.sites.find(s => s.pc === insn.pc)!;\n this.push(P(`$s${d}`, PK.TEMP));\n this.finalize();\n this.emit(`$s${d} = ${site.id};`);\n this.blk.term = { kind: 'jump', target: insn.label };\n return true;\n }\n case OP.ret: {\n const k = fi.A.states[insn.pc]![this.depth - 1];\n if (!k || k.t !== KT.RET) bail('ret without return address');\n this.pop();\n this.finalize();\n const d = this.depth;\n this.blk.term = { kind: 'multi', multi: { expr: `$s${d}`, cases: k.sites!.map(id => ({ value: id, target: fi.A.sites[id].cont })) } };\n return true;\n }\n case OP.nip_catch: {\n const rv = this.pop();\n let i = this.depth - 1;\n while (i >= 0 && this.blk_kind(i).t !== KT.CATCH && this.blk_kind(i).t !== KT.CATCH0) i--;\n if (i < 0) bail('nip_catch');\n /* drop everything above the catch slot (their effects, if pending) and the catch slot */\n const dropped = this.slots.splice(i, this.depth - i);\n this.flush_exprs();\n for (const p of dropped) this.drop_value(p);\n this.push(rv);\n return false;\n }\n\n /* --- iteration --- */\n case OP.for_in_start: {\n const o = this.pop();\n this.push(P(`$RT.for_in_start(${this.par(o)})`, PK.EXPR)); return false;\n }\n case OP.for_in_next: {\n const it = this.dup_code(this.depth - 1);\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = $RT.for_in_next(${it}); if ($s${d} === $D) { $s${d} = undefined; $s${d + 1} = true; } else $s${d + 1} = false;`);\n this.push(P(`$s${d}`, PK.TEMP)); this.push(P(`$s${d + 1}`, PK.TEMP));\n return false;\n }\n case OP.for_of_start: {\n const o = this.pop();\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = $RT.get_iterator(${this.par(o)}); $s${d + 1} = ${this.get_field_atom(`$s${d}`, 'next')};`);\n this.push(P(`$s${d}`, PK.TEMP)); this.push(P(`$s${d + 1}`, PK.TEMP)); this.push(P('undefined', PK.LIT));\n return false;\n }\n case OP.for_of_next: {\n const offset = -3 - insn.a;\n const iter = this.depth + offset;\n if (iter < 0) bail('for_of_next offset');\n this.materialize(iter); this.materialize(iter + 1);\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = $RT.for_of_next($s${iter}, $s${iter + 1}); if ($s${d} === $D) { $s${iter} = undefined; $s${d} = undefined; $s${d + 1} = true; } else $s${d + 1} = false;`);\n this.push(P(`$s${d}`, PK.TEMP)); this.push(P(`$s${d + 1}`, PK.TEMP));\n return false;\n }\n case OP.iterator_check_object: {\n const v = this.dup_code(this.depth - 1);\n this.before_stmt();\n this.emit(`if (!${this.guard_obj(v)}) $RT.throw_type_error(\"iterator must return an object\");`);\n return false;\n }\n case OP.iterator_close: {\n const c = this.pop(); const nx = this.pop(); const it = this.pop();\n this.before_stmt();\n this.drop_value(c); this.drop_value(nx);\n const itc = it.kind === PK.EXPR ? (() => { const t = this.tmp(); this.emit(`${t} = ${it.code};`); return t; })() : it.code;\n this.emit(`if (${itc} !== undefined) $RT.iterator_close(${itc});`);\n return false;\n }\n case OP.iterator_next: {\n /* iter next catch val -> iter next catch ret */\n const val = this.pop();\n const it = this.dup_code(this.depth - 3), nx = this.dup_code(this.depth - 2);\n this.push(P(this.call_with_this(nx, it, [this.par(val)]), PK.EXPR));\n return false;\n }\n case OP.iterator_call: {\n const val = this.dup_code(this.depth - 1);\n const it = this.dup_code(this.depth - 4);\n const d = this.depth;\n this.before_stmt();\n const t = this.tmp();\n this.emit(`${t} = $RT.iterator_call(${it}, ${val}, ${insn.a}); if (${t} === $D) $s${d} = true; else { $s${d - 1} = ${t}; $s${d} = false; }`);\n this.push(P(`$s${d}`, PK.TEMP));\n return false;\n }\n\n /* --- properties --- */\n case OP.get_field: {\n const o = this.dup_code(this.depth - 1); this.pop();\n const pv = P(this.get_field(o, insn.a), PK.EXPR);\n if (!fi.atom_is_symbol(insn.a)) pv.name = fi.atom_name(insn.a);\n this.push(pv); return false;\n }\n case OP.get_field2: {\n const o = this.dup_code(this.depth - 1);\n const method = is_prim_literal(o) ? null\n : { recv: o, access: key_access(fi, insn.a), prim: '$RT.call_method_prim', prim_args: `${o}, ${insn.a}`, pc: this.cur_pc };\n this.push(P(this.get_field(o, insn.a), PK.EXPR, { method })); return false;\n }\n case OP.get_length: {\n const o = this.dup_code(this.depth - 1); this.pop();\n this.push(P(is_prim_literal(o) ? `$RT.get_length(${o})` : `(${this.guard_obj(o)} ? ${o}${this.M()}.length${this.M()} : $RT.get_length(${o}))`, PK.EXPR));\n return false;\n }\n case OP.put_field: {\n const v = this.pop(); const o = this.dup_code(this.depth - 1); this.pop();\n this.before_stmt();\n this.emit(this.put_field_stmt(o, insn.a, is_prim_literal(o) ? v.code : this.store_value(v)));\n return false;\n }\n case OP.get_array_el: {\n const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n this.push(P(this.get_el(o, k), PK.EXPR)); return false;\n }\n case OP.get_array_el2: {\n const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.pop();\n const method = is_prim_literal(o) ? null\n : { recv: o, access: `[${k}]`, prim: '$RT.call_method_prim_key', prim_args: `${o}, ${k}`, pc: this.cur_pc };\n this.push(P(this.get_el(o, k), PK.EXPR, { method })); return false;\n }\n case OP.put_array_el: {\n const v = this.pop(); const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n this.before_stmt();\n this.emit(this.put_el_stmt(o, k, is_prim_literal(o) ? v.code : this.store_value(v)));\n return false;\n }\n case OP.get_ref_value: {\n const rk = this.kind_at(this.depth - 2);\n if (rk.t === KT.REF) { this.push(this.ref_read(rk)); return false; }\n const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.push(P(`$RT.get_ref_value(${o}, ${k}, ${fi.strict})`, PK.EXPR)); return false;\n }\n case OP.put_ref_value: {\n const rk = this.kind_at(this.depth - 3);\n const v = this.pop(); const k = this.pop(); const o = this.pop();\n if (rk.t === KT.REF) { this.drop_value(k); this.ref_write(rk, v.code); return false; }\n this.before_stmt();\n this.emit(`$RT.put_ref_value(${this.par(o)}, ${this.par(k)}, ${v.code}, ${fi.strict});`);\n return false;\n }\n case OP.get_super_value: {\n const k = this.pop(); const o = this.pop(); const t = this.pop();\n this.push(P(`$RT.get_super_value(${this.par(t)}, ${this.par(o)}, ${this.par(k)})`, PK.EXPR)); return false;\n }\n case OP.put_super_value: {\n const v = this.pop(); const k = this.pop(); const o = this.pop(); const t = this.pop();\n this.before_stmt();\n this.emit(`$RT.put_super_value(${this.par(t)}, ${this.par(o)}, ${this.par(k)}, ${v.code});`);\n return false;\n }\n case OP.define_field: {\n const v = this.pop(); const o = this.dup_code(this.depth - 1);\n const slot = this.top();\n this.before_stmt();\n const name = __JS_AtomIsTaggedInt(insn.a) ? null : fi.atom_name(insn.a);\n if (slot.fresh && name !== null && name !== '__proto__' && !(slot.mkeys && slot.mkeys.has(name))) {\n /* fresh object literal: a plain assignment while Object.prototype has no accessors */\n const vc = this.store_value(v);\n this.emit(`if ($P.ok) ${o}${key_access(fi, insn.a)} = ${vc}; else $RT.define_field(${o}, ${insn.a}, ${vc});`);\n } else {\n this.emit(`$RT.define_field(${o}, ${insn.a}, ${v.code});`);\n }\n return false;\n }\n case OP.define_array_el: {\n const v = this.pop(); const pos = this.dup_code(this.depth - 1); const arr = this.dup_code(this.depth - 2);\n this.before_stmt();\n this.emit(`$RT.define_array_el(${arr}, ${pos}, ${v.code});`);\n return false;\n }\n case OP.append: {\n const src = this.pop(); const pos = this.depth - 1; this.materialize(pos); const arr = this.dup_code(this.depth - 2);\n this.before_stmt();\n this.emit(`$s${pos} = $RT.append(${arr}, $s${pos}, ${src.code});`);\n return false;\n }\n case OP.copy_data_properties: {\n const mask = insn.a;\n const d = this.depth;\n const tgt = this.dup_code(d - 1 - (mask & 3)), src = this.dup_code(d - 1 - ((mask >> 2) & 7)), excl = this.dup_code(d - 1 - ((mask >> 5) & 7));\n this.before_stmt();\n this.emit(`$RT.copy_data_properties(${tgt}, ${src}, ${excl});`);\n return false;\n }\n case OP.get_private_field: {\n const name = this.pop(); const o = this.pop();\n this.push(P(`$RT.get_private_field(${this.par(o)}, ${this.par(name)})`, PK.EXPR)); return false;\n }\n case OP.put_private_field: { /* obj value prop -> */\n const name = this.pop(); const v = this.pop(); const o = this.pop();\n this.before_stmt();\n this.emit(`$RT.put_private_field(${this.par(o)}, ${this.par(name)}, ${this.par(v)});`);\n return false;\n }\n case OP.define_private_field: { /* obj prop value -> obj */\n const v = this.pop(); const name = this.pop(); const o = this.dup_code(this.depth - 1);\n this.before_stmt();\n this.emit(`$RT.define_private_field(${o}, ${this.par(name)}, ${v.code});`);\n return false;\n }\n case OP.private_in: {\n const name = this.pop(); const o = this.pop();\n this.push(P(`$RT.private_in(${this.par(o)}, ${this.par(name)})`, PK.EXPR)); return false;\n }\n case OP.set_name: {\n const f = this.dup_code(this.depth - 1);\n this.before_stmt(); this.emit(`$RT.set_name(${f}, ${insn.a});`); return false;\n }\n case OP.set_name_computed: {\n const f = this.dup_code(this.depth - 1), name = this.dup_code(this.depth - 2);\n this.before_stmt(); this.emit(`$RT.set_name_computed(${f}, ${name});`); return false;\n }\n case OP.set_proto: {\n const p = this.pop(); const o = this.dup_code(this.depth - 1);\n this.top().fresh = false;\n this.before_stmt(); this.emit(`$RT.set_proto(${o}, ${p.code});`); return false;\n }\n case OP.set_home_object: {\n const f = this.dup_code(this.depth - 1), home = this.dup_code(this.depth - 2);\n this.before_stmt(); this.emit(`$RT.set_home_object(${f}, ${home});`); return false;\n }\n case OP.define_method: {\n const f = this.pop(); const o = this.dup_code(this.depth - 1);\n const slot = this.top();\n if (slot.fresh) { if (!slot.mkeys) slot.mkeys = new Set(); slot.mkeys.add(fi.atom_name(insn.a)); }\n this.before_stmt(); this.emit(`$RT.define_method(${o}, ${insn.a}, ${f.code}, ${insn.b}, false);`); return false;\n }\n case OP.define_method_computed: {\n const f = this.pop(); const name = this.pop(); const o = this.dup_code(this.depth - 1);\n this.top().fresh = false;\n this.before_stmt(); this.emit(`$RT.define_method(${o}, ${this.par(name)}, ${f.code}, ${insn.a}, true);`); return false;\n }\n case OP.define_class: case OP.define_class_computed: {\n /* [name] parent ctor_bytecode -> [name] ctor proto */\n const bf = this.pop(); const parent = this.pop();\n if (bf.cpool < 0 || !(fi.b.cpool[bf.cpool] instanceof JSFunctionBytecode)) bail('define_class without constructor bytecode');\n const child = fi.b.cpool[bf.cpool] as JSFunctionBytecode;\n const computed = op === OP.define_class_computed;\n const name = computed ? this.dup_code(this.depth - 1) : String(insn.a);\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = $RT.define_class(${name}, ${this.par(parent)}, $cpool[${bf.cpool}], ${insn.b}, ${this.closure_refs(child)}, ${computed}); $s${d + 1} = $s${d}[1]; $s${d} = $s${d}[0];`);\n this.push(P(`$s${d}`, PK.TEMP)); this.push(P(`$s${d + 1}`, PK.TEMP));\n return false;\n }\n case OP.to_object: {\n const v = this.dup_code(this.depth - 1); this.pop();\n this.push(P(is_prim_literal(v) ? `$RT.to_object(${v})` : `(${this.guard_obj(v)} ? ${v} : $RT.to_object(${v}))`, PK.EXPR)); return false;\n }\n case OP.to_propkey: {\n const v = this.dup_code(this.depth - 1); this.pop();\n this.push(P(`(typeof ${v} === 'string' || typeof ${v} === 'number' || typeof ${v} === 'symbol' ? ${v} : $RT.to_propkey(${v}))`, PK.EXPR));\n return false;\n }\n case OP.to_propkey2: {\n const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.pop();\n this.before_stmt();\n this.emit(`if (${o} === undefined || ${o} === null) $RT.throw_type_error(\"value has no property\");`);\n this.push(P(`(typeof ${k} === 'string' || typeof ${k} === 'number' || typeof ${k} === 'symbol' ? ${k} : $RT.to_propkey(${k}))`, PK.EXPR));\n return false;\n }\n case OP.delete: {\n const k = this.dup_code(this.depth - 1); const o = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n if (is_prim_literal(o)) this.push(P(`$RT.delete(${o}, ${k}, ${fi.strict})`, PK.EXPR));\n else if (fi.strict) this.push(P(`(${this.guard_obj(o)} ? delete ${o}[${k}] : $RT.delete(${o}, ${k}, true))`, PK.EXPR));\n else { fi.uses_sdel = true; this.push(P(`(${this.guard_obj(o)} ? $sdel(${o}, ${k}) : $RT.delete(${o}, ${k}, false))`, PK.EXPR)); }\n return false;\n }\n\n /* --- operators --- */\n case OP.add: return this.binop('+');\n case OP.sub: return this.binop('-');\n case OP.mul: return this.binop('*');\n case OP.div: return this.binop('/');\n case OP.mod: return this.binop('%');\n case OP.pow: return this.binop('**');\n case OP.shl: return this.binop('<<');\n case OP.sar: return this.binop('>>');\n case OP.shr: return this.binop('>>>');\n case OP.and: return this.binop('&');\n case OP.or: return this.binop('|');\n case OP.xor: return this.binop('^');\n case OP.lt: return this.binop('<');\n case OP.lte: return this.binop('<=');\n case OP.gt: return this.binop('>');\n case OP.gte: return this.binop('>=');\n case OP.eq: return this.binop('==');\n case OP.neq: return this.binop('!=');\n case OP.strict_eq: return this.binop('===');\n case OP.strict_neq: return this.binop('!==');\n case OP.add_loc: {\n const v = this.pop();\n const cur = this.local_value(false, insn.a);\n this.write_local(false, insn.a, `${cur} + ${this.par(v)}`);\n return false;\n }\n case OP.inc_loc: case OP.dec_loc: {\n const cur = this.local_value(false, insn.a);\n const o = op === OP.inc_loc ? '+' : '-';\n this.write_local(false, insn.a, `(typeof ${cur} === 'number' ? ${cur} ${o} 1 : $RT.${op === OP.inc_loc ? 'inc' : 'dec'}(${cur}))`);\n return false;\n }\n case OP.inc: case OP.dec: {\n const x = this.dup_code(this.depth - 1); this.pop();\n const o = op === OP.inc ? '+' : '-';\n this.push(P(`(typeof ${x} === 'number' ? ${x} ${o} 1 : $RT.${op === OP.inc ? 'inc' : 'dec'}(${x}))`, PK.EXPR));\n return false;\n }\n case OP.post_inc: case OP.post_dec: {\n const x = this.dup_code(this.depth - 1); this.pop();\n const d = this.depth;\n this.before_stmt();\n this.emit(`$s${d} = typeof ${x} === 'number' ? ${x} : $RT.to_numeric(${x});`);\n this.push(P(`$s${d}`, PK.TEMP));\n const o = op === OP.post_inc ? '+' : '-';\n this.push(P(`(typeof $s${d} === 'number' ? $s${d} ${o} 1 : $RT.${op === OP.post_inc ? 'inc' : 'dec'}($s${d}))`, PK.EXPR));\n return false;\n }\n case OP.neg: case OP.plus: case OP.not: {\n const x = this.pop();\n const o = op === OP.neg ? '-' : op === OP.plus ? '+' : '~';\n this.push(P(`${o}${this.par(x)}`, PK.EXPR));\n return false;\n }\n case OP.lnot: { const x = this.pop(); this.push(P(`!${this.par(x)}`, PK.EXPR)); return false; }\n case OP.typeof: {\n const x = this.pop();\n this.push(P(`typeof ${this.par(x)}`, PK.EXPR)); return false;\n }\n case OP.typeof_is_undefined: { const x = this.pop(); this.push(P(`(typeof ${this.par(x)} === 'undefined')`, PK.EXPR)); return false; }\n case OP.typeof_is_function: { const x = this.pop(); this.push(P(`(typeof ${this.par(x)} === 'function')`, PK.EXPR)); return false; }\n case OP.is_undefined: { const x = this.pop(); this.push(P(`(${this.par(x)} === undefined)`, PK.EXPR)); return false; }\n case OP.is_null: { const x = this.pop(); this.push(P(`(${this.par(x)} === null)`, PK.EXPR)); return false; }\n case OP.is_undefined_or_null: {\n const x = this.dup_code(this.depth - 1); this.pop();\n this.push(P(`(${x} === undefined || ${x} === null)`, PK.EXPR)); return false;\n }\n case OP.in: {\n const o = this.dup_code(this.depth - 1); const k = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n if (is_prim_literal(o)) this.push(P(`$RT.in(${k}, ${o})`, PK.EXPR));\n else this.push(P(`(${this.guard_obj(o)} ? (${k} in ${o}) : $RT.in(${k}, ${o}))`, PK.EXPR));\n return false;\n }\n case OP.import: {\n /* dynamic import(specifier, options): a promise; the specifier is converted to a string first */\n const opts = this.dup_code(this.depth - 1); const spec = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n this.push(P(`$RT.dynamic_import($b, ${spec}, ${opts})`, PK.EXPR));\n return false;\n }\n case OP.instanceof: {\n const c = this.dup_code(this.depth - 1); const v = this.dup_code(this.depth - 2);\n this.pop(); this.pop();\n if (is_prim_literal(c)) this.push(P(`$RT.instanceof(${v}, ${c})`, PK.EXPR));\n else this.push(P(`(${this.guard_obj(c)} ? (${v} instanceof ${c}) : $RT.instanceof(${v}, ${c}))`, PK.EXPR));\n return false;\n }\n case OP.nop: return false;\n default:\n bail(`unsupported opcode ${insn.name}`);\n }\n }\n\n binop(o: string): boolean {\n const b = this.pop(); const a = this.pop();\n /* JSC reports a binary expression at its start (the marker push() adds), V8 at the operator */\n this.push(P(`${this.par(a)} ${this.M()}${o} ${this.par(b)}`, PK.EXPR));\n return false;\n }\n\n /* kind of slot i before the current instruction */\n kind_at(i: number): Kind {\n const st = this.fi.A.states[this.cur_pc]!;\n return st[i] ?? KV;\n }\n blk_kind(i: number): Kind { return this.kind_at(i); }\n cur_pc = 0;\n\n ref_read(k: Kind): Pending {\n switch (k.ref_kind) {\n case RefKind.LOC: return this.var_read(k.ref_idx!);\n case RefKind.ARG: return this.arg_read(k.ref_idx!);\n default: return P(`$vr[${k.ref_idx}].get()`, PK.EXPR);\n }\n }\n ref_write(k: Kind, value: string): void {\n switch (k.ref_kind) {\n case RefKind.LOC: this.write_local(false, k.ref_idx!, value); break;\n case RefKind.ARG: this.write_local(true, k.ref_idx!, value); break;\n default: this.before_stmt(); this.emit(`$vr[${k.ref_idx}].set(${value});`); break;\n }\n }\n\n needs_moves(): boolean {\n for (let i = 0; i < this.depth; i++) { const p = this.slots[i]; if (!(p.kind === PK.TEMP && p.code === `$s${i}`)) return true; }\n return false;\n }\n\n pop_args(argc: number): string[] {\n const args: string[] = [];\n for (let i = 0; i < argc; i++) args.push(this.pop().code);\n return args.reverse();\n }\n\n get_field_atom(obj: string, name: string): string {\n if (is_prim_literal(obj)) return `$RT.get_field_str(${obj}, ${JSON.stringify(name)})`;\n return `(${this.guard_obj(obj)} ? ${obj}${this.M()}.${name}${this.M()} : $RT.get_field_str(${obj}, ${JSON.stringify(name)}))`;\n }\n\n emit_return(value: string): void {\n const fi = this.fi;\n if (fi.constructible && !fi.derived) {\n const t = this.tmp();\n this.emit(`${t} = ${value}; return $nt !== undefined ? (${this.guard_obj(t)} ? ${t} : $t) : ${t};`);\n } else if (value.indexOf('(') >= 0) {\n /* never `return f()`: JavaScriptCore elides the frame of a strict-mode tail call, which\n would hide the function from backtraces and turn tail recursion into an endless loop\n instead of a stack overflow */\n this.emit(`$r = ${value}; return $r;`);\n } else {\n this.emit(`return ${value};`);\n }\n this.blk.term = { kind: 'none' };\n }\n\n /* `.name` / `[\"name\"]` access text for a global variable atom, or null for a symbol */\n global_access(atom: number): string | null {\n if (__JS_AtomIsTaggedInt(atom) || this.fi.atom_is_symbol(atom)) return null;\n return key_access(this.fi, atom);\n }\n\n /* the var_refs array expression for a child closure */\n closure_refs(child: JSFunctionBytecode): string {\n const fi = this.fi;\n const refs: string[] = [];\n for (const cv of child.closure_var) {\n if (cv.is_local) {\n if (cv.is_arg) {\n if (!fi.argCell[cv.var_idx]) bail('closure captures an argument that is not a cell');\n refs.push(fi.argName[cv.var_idx]);\n } else {\n if (!fi.varCell[cv.var_idx]) bail('closure captures a local that is not a cell');\n refs.push(fi.varName[cv.var_idx]);\n }\n } else {\n refs.push(`$vr[${cv.var_idx}]`);\n }\n }\n return `[${refs.join(', ')}]`;\n }\n}\n\n/* ---------------------------------------------------------------------\n 5. Relooper\n --------------------------------------------------------------------- */\n\n/* a node of a region graph: a block or a nested try-region */\ninterface Node {\n id: number; /* block id, or -(region id) - 1 for regions */\n block: Block | null;\n region: Region | null;\n succs: number[]; /* node ids inside the same region graph */\n}\n\ninterface Struct {\n kind: 'loop' | 'block' | 'try' | 'switch' | 'tryswitch';\n label: string;\n entries: Set<number>; /* loop: continue targets */\n nextEntries: Set<number>; /* targets reached by `break label` */\n nextIsMulti: boolean;\n nodes?: Set<number>; /* switch: node ids handled by the switch */\n}\n\nclass Relooper {\n fi: FuncInfo;\n cfg: CFG;\n labelCount = 0;\n nodeMap = new Map<number, Node>(); /* all nodes of all regions, by node id */\n blockNode = new Map<number, number>(); /* block id -> node id representing it in its parent's graph (block or region) */\n\n constructor(fi: FuncInfo, cfg: CFG) {\n this.fi = fi; this.cfg = cfg;\n }\n\n label(prefix: string): string { return `${prefix}${this.labelCount++}`; }\n\n /* region whose graph is being emitted */\n curRegion: Region | null = null;\n\n /* node id representing the block at `pc` inside the current region graph: the block itself,\n or the child region that contains it */\n target_node(pc: number): number {\n const tb = this.cfg.byPc.get(pc);\n if (!tb) bail(`branch to unknown block ${pc}`);\n const r = this.curRegion!;\n if (tb.region === r) return tb.id;\n let d = tb.region;\n while (d && d.parent !== r) d = d.parent;\n if (d) return this.region_node_id(d);\n /* exit to an enclosing region: the block id (resolved through the context stack) */\n return tb.id;\n }\n\n region_node_id(r: Region): number { return -r.id - 1; }\n\n /* build the node graph of every region */\n build(): void {\n const { blocks, byPc } = this.cfg;\n /* block successors */\n for (const blk of blocks) {\n if (blk.dead) continue;\n const t = blk.term;\n const targets: number[] = [];\n const add = (pc: number | undefined): void => {\n if (pc === undefined) return;\n const tb = byPc.get(pc);\n if (!tb) bail(`branch to unknown block ${pc}`);\n targets.push(tb.id);\n };\n switch (t.kind) {\n case 'fall': case 'jump': add(t.target); break;\n case 'cond': add(t.tTrue); add(t.tFalse); break;\n case 'multi': for (const c of t.multi!.cases) add(c.target); break;\n case 'none': break;\n }\n blk.succs = [...new Set(targets)];\n }\n /* region exits and node graphs */\n for (const r of this.cfg.regions) {\n for (const blk of r.blocks) {\n for (const s of blk.succs) {\n const tb = blocks[s];\n if (tb.region === r) continue;\n /* descendant? */\n let d = tb.region;\n while (d && d.parent !== r) d = d.parent;\n if (d) {\n if (d.osr_chain) bail('osr: a try-region containing the loop header is re-entered');\n if (d.entry !== tb) bail('jump into the middle of a try-region');\n continue;\n }\n /* exit: must be in the parent region */\n if (!r.parent || tb.region !== r.parent) bail('try-region exit skips a level');\n r.exits.add(tb.id);\n }\n }\n }\n for (const r of this.cfg.regions) {\n for (const blk of r.blocks) {\n const succs: number[] = [];\n for (const s of blk.succs) {\n const tb = blocks[s];\n if (tb.region === r) succs.push(tb.id);\n else {\n let d = tb.region;\n while (d && d.parent !== r) d = d.parent;\n if (d) succs.push(this.region_node_id(d));\n /* else: exit, not an internal edge */\n }\n }\n this.nodeMap.set(blk.id, { id: blk.id, block: blk, region: null, succs });\n }\n for (const c of r.children) {\n const succs = [...c.exits];\n if (c.kind === KT.CATCH) {\n const hb = byPc.get(c.handler);\n if (!hb || hb.region !== r) bail('catch handler outside the parent region');\n if (!succs.includes(hb.id)) succs.push(hb.id);\n }\n this.nodeMap.set(this.region_node_id(c), { id: this.region_node_id(c), block: null, region: c, succs });\n }\n }\n }\n\n /* node successors restricted to `nodes` and excluding loop back-edges */\n succs_in(n: Node, nodes: Set<number>, loopEntries: Set<number> | null): number[] {\n const r: number[] = [];\n for (const s of n.succs) if (nodes.has(s) && !(loopEntries && loopEntries.has(s))) r.push(s);\n return r;\n }\n\n reach(from: number, nodes: Set<number>, loopEntries: Set<number> | null): Set<number> {\n const seen = new Set<number>();\n const stack = [from];\n while (stack.length) {\n const succs = this.nodeMap.get(stack.pop()!)!.succs;\n for (let i = 0; i < succs.length; i++) {\n const s = succs[i];\n if (nodes.has(s) && !(loopEntries !== null && loopEntries.has(s)) && !seen.has(s)) { seen.add(s); stack.push(s); }\n }\n }\n return seen;\n }\n\n /* nodes of `nodes` from which an entry is reachable (the entries included): one backward\n search instead of a forward search from every node. Same edges as reach(). */\n reaching(entries: number[], nodes: Set<number>, loopEntries: Set<number> | null): Set<number> {\n const preds = new Map<number, number[]>();\n for (const id of nodes) {\n const succs = this.nodeMap.get(id)!.succs;\n for (let i = 0; i < succs.length; i++) {\n const s = succs[i];\n if (!nodes.has(s) || (loopEntries !== null && loopEntries.has(s))) continue;\n let l = preds.get(s);\n if (l === undefined) { l = []; preds.set(s, l); }\n l.push(id);\n }\n }\n const found = new Set<number>(entries);\n const stack = [...entries];\n while (stack.length) {\n const l = preds.get(stack.pop()!);\n if (l === undefined) continue;\n for (let i = 0; i < l.length; i++) if (!found.has(l[i])) { found.add(l[i]); stack.push(l[i]); }\n }\n /* entries first, then the other nodes in the order of `nodes` (emission follows set order) */\n const inner = new Set<number>(entries);\n for (const id of nodes) if (found.has(id)) inner.add(id);\n return inner;\n }\n\n /* --- branch emission --- */\n branch_to(target: number, ctx: Struct[], fallthroughOk: Set<number> | null): string {\n /* prefer continue to an enclosing loop */\n for (let i = ctx.length - 1; i >= 0; i--) {\n const s = ctx[i];\n if (s.kind === 'loop' && s.entries.has(target)) {\n return (s.entries.size > 1 ? `$l = ${target}; ` : '') + `continue ${s.label};`;\n }\n }\n for (let i = ctx.length - 1; i >= 0; i--) {\n const s = ctx[i];\n if (s.kind === 'switch') {\n if (s.nodes!.has(target)) return `$l = ${target}; continue ${s.label};`;\n continue;\n }\n if (s.kind === 'tryswitch') {\n if (s.nextEntries.has(target)) return `$l = ${target}; break ${s.label};`;\n continue;\n }\n if (s.nextEntries.has(target)) {\n if (fallthroughOk && fallthroughOk.has(target) && i === ctx.length - 1) return s.nextIsMulti ? `$l = ${target};` : '';\n return (s.nextIsMulti ? `$l = ${target}; ` : '') + `break ${s.label};`;\n }\n }\n bail(`unstructured branch to ${target}`);\n }\n\n /* the terminator of a block, given how each target is reached */\n emit_term(blk: Block, ctx: Struct[], fallthroughOk: Set<number> | null): string {\n const t = blk.term;\n const idOf = (pc: number): number => this.target_node(pc);\n switch (t.kind) {\n case 'none': return '';\n case 'fall': case 'jump': return this.branch_to(idOf(t.target!), ctx, fallthroughOk);\n case 'cond': {\n const a = idOf(t.tTrue!), b = idOf(t.tFalse!);\n if (a === b) return this.branch_to(a, ctx, fallthroughOk);\n const ba = this.branch_to(a, ctx, null), bb = this.branch_to(b, ctx, fallthroughOk);\n return `if (${t.cond}) { ${ba} } ${bb}`;\n }\n case 'multi': {\n const parts: string[] = [];\n const cases = t.multi!.cases;\n for (let i = 0; i < cases.length; i++) {\n const c = cases[i];\n const br = this.branch_to(idOf(c.target), ctx, i === cases.length - 1 ? fallthroughOk : null);\n if (i === cases.length - 1) parts.push(`{ ${br} }`);\n else parts.push(`if (${t.multi!.expr} === ${c.value}) { ${br} } else `);\n }\n return parts.join('');\n }\n }\n }\n\n /* --- structured emission of a region graph --- */\n emit_region(r: Region, ctx: Struct[]): string {\n const nodes = new Set<number>();\n for (const b of r.blocks) nodes.add(b.id);\n for (const c of r.children) nodes.add(this.region_node_id(c));\n const saved = this.curRegion;\n this.curRegion = r;\n try {\n if (jit_config.cfg === 'switch') return this.emit_switch(r, nodes, ctx);\n return this.reloop(nodes, [r.entry_node ?? r.entry!.id], ctx, null);\n } finally {\n this.curRegion = saved;\n }\n }\n\n reloop(nodes: Set<number>, entries: number[], ctx: Struct[], loopEntries: Set<number> | null): string {\n if (entries.length === 0 || nodes.size === 0) return '';\n if (entries.length === 1) {\n const e = entries[0];\n let hasPred = false;\n for (const id of nodes) {\n if (this.succs_in(this.nodeMap.get(id)!, nodes, loopEntries).includes(e)) { hasPred = true; break; }\n }\n if (!hasPred) return this.emit_simple(e, nodes, ctx, loopEntries);\n }\n /* loop: can some entry reach itself? */\n let isLoop = false;\n for (const e of entries) if (this.reach(e, nodes, loopEntries).has(e)) { isLoop = true; break; }\n if (isLoop) {\n const entrySet = new Set(entries);\n /* inner: nodes that can reach an entry */\n const inner = this.reaching(entries, nodes, loopEntries);\n const outer = new Set<number>();\n for (const id of nodes) if (!inner.has(id)) outer.add(id);\n const nextEntries = new Set<number>();\n for (const id of inner) for (const s of this.succs_in(this.nodeMap.get(id)!, nodes, loopEntries)) if (outer.has(s)) nextEntries.add(s);\n const label = this.label('$L');\n const st: Struct = { kind: 'loop', label, entries: entrySet, nextEntries, nextIsMulti: nextEntries.size > 1 };\n const body = this.reloop(inner, entries, [...ctx, st], entrySet);\n return `${label}: for (;;) {\\n${POLL}${body}\\n}\\n` + this.reloop(outer, [...nextEntries], ctx, loopEntries);\n }\n /* multiple */\n return this.emit_multiple(nodes, entries.map(e => ({ cond: `$l === ${e}`, entry: e })), ctx, loopEntries, '');\n }\n\n /* groups: nodes reachable from exactly one entry */\n groups(nodes: Set<number>, entries: number[], loopEntries: Set<number> | null): Map<number, Set<number>> {\n const reachFrom = new Map<number, Set<number>>();\n for (const e of entries) { const s = this.reach(e, nodes, loopEntries); s.add(e); reachFrom.set(e, s); }\n const g = new Map<number, Set<number>>();\n for (const e of entries) {\n const set = new Set<number>();\n for (const id of reachFrom.get(e)!) {\n let only = true;\n for (const e2 of entries) if (e2 !== e && reachFrom.get(e2)!.has(id)) { only = false; break; }\n if (only) set.add(id);\n }\n /* an entry that is reachable from another entry has no group of its own */\n if (!set.has(e)) set.clear();\n g.set(e, set);\n }\n return g;\n }\n\n /* emit a dispatch on `conds` (if/else chain), each arm containing the independent group of\n its entry; `prefix` is code emitted before the dispatch (the preceding block) */\n emit_multiple(nodes: Set<number>, arms: { cond: string | null; entry: number }[], ctx: Struct[], loopEntries: Set<number> | null, prefix: string): string {\n const isInternal = (e: number): boolean => nodes.has(e) && !(loopEntries && loopEntries.has(e));\n const entries = [...new Set(arms.map(a => a.entry))].filter(isInternal);\n const g = this.groups(nodes, entries, loopEntries);\n const handled = new Set<number>();\n for (const s of g.values()) for (const id of s) handled.add(id);\n const remaining = new Set<number>();\n for (const id of nodes) if (!handled.has(id)) remaining.add(id);\n const remEntries = new Set<number>();\n for (const e of entries) if (g.get(e)!.size === 0) remEntries.add(e);\n for (const id of handled) for (const s of this.succs_in(this.nodeMap.get(id)!, nodes, loopEntries)) if (remaining.has(s)) remEntries.add(s);\n const label = this.label('$M');\n const st: Struct = { kind: 'block', label, entries: new Set(), nextEntries: remEntries, nextIsMulti: remEntries.size > 1 };\n const innerCtx = [...ctx, st];\n let code = '';\n for (let i = 0; i < arms.length; i++) {\n const arm = arms[i];\n const grp = isInternal(arm.entry) ? g.get(arm.entry)! : null;\n let body: string;\n if (grp === null) body = this.branch_to(arm.entry, innerCtx, null);\n else if (grp.size === 0) body = this.branch_to(arm.entry, innerCtx, remEntries);\n else body = this.reloop(grp, [arm.entry], innerCtx, loopEntries);\n if (arm.cond === null) {\n code += i > 0 ? `else {\\n${body}\\n}\\n` : `{\\n${body}\\n}\\n`;\n } else {\n code += `${i > 0 ? 'else ' : ''}if (${arm.cond}) {\\n${body}\\n}\\n`;\n }\n }\n const out = `${prefix}${label}: {\\n${code}\\n}\\n` + this.reloop(remaining, [...remEntries], ctx, loopEntries);\n return out;\n }\n\n emit_simple(e: number, nodes: Set<number>, ctx: Struct[], loopEntries: Set<number> | null): string {\n const node = this.nodeMap.get(e)!;\n const rest = new Set(nodes); rest.delete(e);\n const internal = this.succs_in(node, rest, loopEntries);\n const nextEntries = new Set(internal);\n\n if (node.region) {\n /* nested try-region */\n const r = node.region;\n const label = this.label('$T');\n const st: Struct = { kind: 'try', label, entries: new Set(), nextEntries, nextIsMulti: nextEntries.size > 1 };\n const innerCtx = [...ctx, st];\n const body = this.emit_region(r, innerCtx);\n let handler: string;\n if (r.kind === KT.CATCH) {\n const hb = this.cfg.byPc.get(r.handler)!;\n handler = `$s${r.slot} = $e; ${this.branch_to(hb.id, innerCtx, null)}`;\n } else {\n handler = `$RT.iterator_close_exc($s${r.slot - 2}); throw $e;`;\n }\n const code = `${label}: try {\\n${body}\\n} catch ($e) {\\n$e = $RT.catchable($e); ${handler}\\n}\\n`;\n return code + this.reloop(rest, [...nextEntries], ctx, loopEntries);\n }\n\n const blk = node.block!;\n const t = blk.term;\n const idOf = (pc: number): number => this.target_node(pc);\n let code = blk.code;\n switch (t.kind) {\n case 'none':\n return code;\n case 'fall': case 'jump': {\n const target = idOf(t.target!);\n if (rest.has(target) && !(loopEntries && loopEntries.has(target))) {\n /* fallthrough into the next structure */\n return code + this.reloop(rest, [target], ctx, loopEntries);\n }\n return code + this.branch_to(target, ctx, null) + '\\n';\n }\n case 'cond': {\n const a = idOf(t.tTrue!), b = idOf(t.tFalse!);\n const aIn = rest.has(a) && !(loopEntries && loopEntries.has(a));\n const bIn = rest.has(b) && !(loopEntries && loopEntries.has(b));\n if (aIn && bIn && a !== b) {\n return this.emit_multiple(rest, [{ cond: t.cond!, entry: a }, { cond: null, entry: b }], ctx, loopEntries, code);\n }\n if (aIn && !bIn) {\n return code + `if (!(${t.cond})) { ${this.branch_to(b, ctx, null)} }\\n` + this.reloop(rest, [a], ctx, loopEntries);\n }\n if (bIn && !aIn) {\n return code + `if (${t.cond}) { ${this.branch_to(a, ctx, null)} }\\n` + this.reloop(rest, [b], ctx, loopEntries);\n }\n if (a === b) {\n if (aIn) return code + this.reloop(rest, [a], ctx, loopEntries);\n return code + this.branch_to(a, ctx, null) + '\\n';\n }\n return code + `if (${t.cond}) { ${this.branch_to(a, ctx, null)} }\\n${this.branch_to(b, ctx, null)}\\n`;\n }\n case 'multi': {\n const cases = t.multi!.cases;\n const arms = cases.map((c, i) => ({ cond: i === cases.length - 1 ? null : `${t.multi!.expr} === ${c.value}`, entry: idOf(c.target) }));\n const anyIn = arms.some(a => rest.has(a.entry) && !(loopEntries && loopEntries.has(a.entry)));\n if (anyIn && new Set(arms.map(a => a.entry)).size === arms.length) {\n return this.emit_multiple(rest, arms, ctx, loopEntries, code);\n }\n return code + this.emit_term(blk, ctx, null) + '\\n';\n }\n }\n }\n\n /* --- state machine fallback --- */\n emit_switch(r: Region, nodes: Set<number>, ctx: Struct[]): string {\n const label = this.label('$S');\n const st: Struct = { kind: 'switch', label, entries: new Set(), nextEntries: new Set(), nextIsMulti: true, nodes };\n const innerCtx = [...ctx, st];\n let cases = '';\n for (const id of nodes) {\n const node = this.nodeMap.get(id)!;\n if (node.region) {\n const c = node.region;\n const tl = this.label('$T');\n const tst: Struct = { kind: 'tryswitch', label: tl, entries: new Set(), nextEntries: new Set(node.succs), nextIsMulti: true };\n const body = this.emit_region(c, [...innerCtx, tst]);\n let handler: string;\n if (c.kind === KT.CATCH) {\n const hb = this.cfg.byPc.get(c.handler)!;\n handler = `$s${c.slot} = $e; $l = ${hb.id}; break ${tl};`;\n } else {\n handler = `$RT.iterator_close_exc($s${c.slot - 2}); throw $e;`;\n }\n cases += `case ${id}: ${tl}: try {\\n${body}\\n} catch ($e) {\\n$e = $RT.catchable($e); ${handler}\\n}\\ncontinue ${label};\\n`;\n } else {\n const blk = node.block!;\n cases += `case ${blk.id}: {\\n${blk.code}${this.emit_term(blk, innerCtx, null)}\\n}\\n`;\n }\n }\n return `$l = ${r.entry_node ?? r.entry!.id};\\n${label}: for (;;) {\\n${POLL}switch ($l) {\\n${cases}default: $RT.throw_internal_error(\"jit: bad state \" + $l);\\n}\\n}\\n`;\n }\n}\n\n/* ---------------------------------------------------------------------\n 6. Driver\n --------------------------------------------------------------------- */\n\nexport interface JitCompiled {\n /* instantiate the function for one closure: returns [function object, direct entry, private\n copy factory]. `func_obj` overrides the function object (tier-up of an existing interpreter\n wrapper). The private copy factory (natural convention only, else null) returns a callable\n with the host convention and the host Function.prototype, never reachable from guest code. */\n make: (var_refs: any[], func_obj?: any) => [Function, Function, (() => Function) | null];\n source: string;\n name: string;\n /* the backtrace side table (src/jit_stack.ts), kept alive with the bytecode */\n stack: CompiledEntry;\n /* on-stack replacement variant: the state layout (see JitSource.osr) */\n osr?: { arg_cell: boolean[]; var_cell: boolean[]; depth: number };\n}\n\nexport interface JitSource {\n /* the factory source, markers as comments */\n source: string;\n name: string;\n /* pc of a native `new` -> the callee's name (see FuncInfo.ctor_names) */\n ctor_names?: Map<number, string>;\n /* on-stack replacement variant: which arguments/locals are cells, and the stack depth at the\n loop header */\n osr?: { arg_cell: boolean[]; var_cell: boolean[]; depth: number };\n}\n\n/* used by the runtime adapter when compiled code creates a closure: the compiled form if the\n function is (or should now be) compiled, else null (interpreter wrapper, tiered up later) */\nfunction jit_closure_compile(ctx: JSContext, b: JSFunctionBytecode): JitCompiled | null {\n if (b.compiled) return b.compiled as JitCompiled;\n if (b.no_jit || jit_config.mode === 'off') return null;\n /* closures created by compiled code are compiled when created in hot mode too: the creating\n code is hot, so its closures are likely to run, and a compiled function object is cheaper\n to call than a wrapper (closures created by the interpreter stay lazy) */\n return jit_compile(ctx, b);\n}\n\nfunction func_name(ctx: JSContext, b: JSFunctionBytecode): string {\n return b.func_name ? JS_AtomGetStr(ctx, b.func_name) : '';\n}\n\n/* generate the factory source for a function; throws JitBail. `id` is the compiled function's\n id in the backtrace registry (0 when it is not registered). */\nexport interface JitGenOptions {\n /* calling convention (default: jit_config.conv) */\n conv?: JitConfig['conv'];\n /* on-stack replacement variant entered at this loop header pc (explicit convention): the\n direct entry is `(this, new_target, state)` with state = { a: args, v: locals, s: stack }\n (cells for captured variables, see JitSource.osr) */\n osr?: number;\n}\n\nexport function jit_generate_source(ctx: JSContext, b: JSFunctionBytecode, id = 0, opts: JitGenOptions = {}): JitSource {\n if (b.func_kind !== JSFunctionKind.NORMAL) bail('generator or async function');\n const insns = decode(b);\n const A = analyze(b, insns);\n const cfg = build_blocks(insns, A);\n const osr = opts.osr;\n if (osr !== undefined) {\n if ((opts.conv ?? jit_config.conv) !== 'forwarder') bail('osr: needs the explicit convention');\n osr_prepare(cfg, A, osr);\n }\n const strict = (b.js_mode & JS_MODE_STRICT) !== 0;\n const constructible = b.has_prototype || b.is_derived_class_constructor || A.is_ctor;\n\n const fi: FuncInfo = {\n ctx, b, A, strict, constructible, derived: b.is_derived_class_constructor, uses_direct: false, uses_global: false, uses_w: false,\n natural: (opts.conv ?? jit_config.conv) === 'natural', arg_off: (opts.conv ?? jit_config.conv) === 'natural' ? 0 : 2,\n sloppy_sets: new Map(), sloppy_props: new Map(), uses_spe: false, uses_sdel: false, ctor_names: new Map(), uses_nw: false,\n argName: [], argCell: [], varName: [], varCell: [],\n atom_name: (atom) => JS_AtomGetStr(ctx, atom),\n atom_is_symbol: (atom) => ctx.rt.atoms.isSymbol(atom),\n };\n for (let i = 0; i < b.arg_count; i++) {\n const vd = b.vardefs[i];\n const cell = (vd?.is_captured ?? false) || A.uses_mapped_arguments;\n fi.argCell.push(cell);\n fi.argName.push(cell ? `$c${i}` : `$a${i}`);\n }\n for (let i = 0; i < b.var_count; i++) {\n const vd = b.vardefs[b.arg_count + i];\n const cell = vd?.is_captured ?? false;\n fi.varCell.push(cell);\n fi.varName.push(`$v${i}`);\n }\n /* variables referenced by child closures must be cells even if the parser did not flag them */\n for (const c of b.cpool) {\n if (!(c instanceof JSFunctionBytecode)) continue;\n for (const cv of c.closure_var) {\n if (!cv.is_local) continue;\n if (cv.is_arg) { if (cv.var_idx < fi.argCell.length) { fi.argCell[cv.var_idx] = true; fi.argName[cv.var_idx] = `$c${cv.var_idx}`; } }\n else if (cv.var_idx < fi.varCell.length) fi.varCell[cv.var_idx] = true;\n }\n }\n\n /* blocks */\n let maxDepth = 0;\n let scratch = 0;\n for (const blk of cfg.blocks) {\n if (blk.dead) continue;\n const em = new BlockEmitter(fi, blk);\n /* translate instruction by instruction, tracking the pc for kind lookups */\n const n = blk.insns.length;\n let terminated = false;\n for (let idx = 0; idx < n; idx++) {\n const insn = blk.insns[idx];\n em.cur_pc = insn.pc;\n maxDepth = Math.max(maxDepth, em.depth + 4);\n if (em.translate(insn, idx === n - 1)) {\n if (idx !== n - 1) bail('terminator in the middle of a block');\n terminated = true;\n break;\n }\n maxDepth = Math.max(maxDepth, em.depth + 2);\n }\n if (!terminated) {\n em.finalize();\n blk.term = { kind: 'fall', target: blk.insns[n - 1].next };\n }\n blk.code = em.out.length ? em.out.join('\\n') + '\\n' : '';\n scratch = Math.max(scratch, em.scratch);\n }\n maxDepth = Math.max(maxDepth, b.stack_size + 2);\n\n const rl = new Relooper(fi, cfg);\n rl.build();\n const body = rl.emit_region(cfg.root, []);\n\n /* assemble */\n const name = func_name(ctx, b);\n const decls: string[] = [];\n for (let i = 0; i < maxDepth; i++) decls.push(`$s${i}`);\n for (let i = 0; i < scratch; i++) decls.push(`$x${i}`);\n decls.push('$l', '$e', '$r');\n if (fi.uses_direct) decls.push('$d');\n if (fi.uses_global) decls.push('$g');\n if (fi.uses_w) decls.push('$w');\n if (fi.uses_nw) decls.push('$nw');\n const params = ['$t', '$nt'];\n const fwparams: string[] = [];\n for (let i = 0; i < b.arg_count; i++) { params.push(`$a${i}`); fwparams.push(`$a${i}`); }\n /* every entry polls, as every loop head does: recursion can run unbounded without a back edge */\n let prologue = POLL;\n const natural = fi.natural;\n if (osr !== undefined) {\n /* replacement entry: the interpreter frame's state (cells for captured variables) */\n params.length = 2;\n params.push('$S');\n for (let i = 0; i < b.arg_count; i++) prologue += `let ${fi.argName[i]} = $S.a[${i}];\\n`;\n for (let i = 0; i < b.var_count; i++) prologue += `let $v${i} = $S.v[${i}];\\n`;\n const depth = cfg.byPc.get(osr)!.stateIn.length;\n for (let d = 0; d < depth; d++) prologue += `$s${d} = $S.s[${d}];\\n`;\n } else {\n for (let i = 0; i < b.arg_count; i++) if (fi.argCell[i]) prologue += `let $c${i} = $RT.new_cell($a${i});\\n`;\n for (let i = 0; i < b.var_count; i++) prologue += fi.varCell[i] ? `let $v${i} = $RT.new_cell(undefined);\\n` : `let $v${i};\\n`;\n if (constructible) {\n if (!b.is_derived_class_constructor) {\n /* construct call: create `this` unless the caller already did (the host, for `new fw()`\n with an object prototype, or the interpreter's legacy constructor path) */\n if (natural) prologue += `if ($nt !== undefined && (typeof ($xp = $nt.prototype) === 'object' ? $xp === null : typeof $xp !== 'function')) $t = $RT.create_this($nt);\\n`;\n else prologue += `if ($nt !== undefined && $t === undefined) $t = $RT.create_this($nt);\\n`;\n }\n } else if (!natural) {\n prologue += `if ($nt !== undefined) $RT.throw_not_a_constructor($fo);\\n`;\n }\n }\n const safe = name && IDENT_RE.test(name) ? name : '';\n const fname = safe ? `$f_${safe}` : '$f';\n const fwname = safe ? `$fw_${safe}` : '$fw';\n /* the forwarder is the guest-visible function object (natural host convention); it passes\n the declared parameters, or every argument when the body looks at `arguments`/rest */\n /* a rest parameter would forbid the \"use strict\" directive: forward `arguments` instead */\n const fwargs = A.uses_arguments ? [] : fwparams;\n const fwpass = A.uses_arguments ? ['...arguments'] : fwparams;\n const call = (t: string, nt: string): string => `$direct(${[t, nt, ...fwpass].join(', ')})`;\n let forwarder: string;\n if (constructible) {\n /* `new fw(...)`: the host already created `this` from new.target.prototype; keep it when\n that prototype is an object (the direct entry creates `this` itself otherwise) */\n const host_this = `((typeof ($xp = new.target.prototype) === 'object' ? $xp !== null : typeof $xp === 'function') ? this : undefined)`;\n forwarder = `function ${fwname}(${fwargs.join(', ')}) { \"use strict\"; let $xp; return new.target === undefined ? ${call('this', 'undefined')} : ${call(host_this, 'new.target')}; }`;\n } else {\n forwarder = `({ ${fwname}(${fwargs.join(', ')}) { \"use strict\"; return ${call('this', 'undefined')}; } }).${fwname}`;\n }\n /* non-strict helpers for sloppy global assignments (the factory body itself is not strict) */\n let helpers = '';\n for (const [atom, idx] of fi.sloppy_sets) {\n helpers += `function $ss${idx}($v) { if (${key_value(fi, atom)} in $GV) $RT.put_global(${atom}, $v, 0, false); else $G${key_access(fi, atom)} = $v; }\\n`;\n }\n for (const [atom, idx] of fi.sloppy_props) helpers += `function $sp${idx}($o, $v) { $o${key_access(fi, atom)} = $v; }\\n`;\n if (fi.uses_spe) helpers += `function $spe($o, $k, $v) { $o[$k] = $v; }\\n`;\n if (fi.uses_sdel) helpers += `function $sdel($o, $k) { return delete $o[$k]; }\\n`;\n let source: string;\n if (!natural) {\n source =\n`${helpers}return function $make($vr, $fo) {\n const $direct = function ${fname}(${params.join(', ')}) {\n\"use strict\";\nlet ${decls.join(', ')};\n${prologue}${body}};\n if ($fo === undefined) $fo = ${forwarder};\n return [$fo, $direct, null];\n};`;\n } else {\n /* natural convention: the body is the guest function object itself; the direct entry is\n an adapter used by the engine and by calls with an explicit this/new.target */\n const nparams = params.slice(2);\n const head = `\"use strict\";\\nlet ${decls.join(', ')}, $xp;\\nlet $t = this;\\n${constructible ? 'const $nt = new.target;\\n' : ''}`;\n const fn = constructible\n ? `function ${fname}(${nparams.join(', ')}) {\\n${head}${prologue}${body}}`\n : `({ ${fname}(${nparams.join(', ')}) {\\n${head}${prologue}${body}} }).${fname}`;\n /* the private copy (`$mkpriv`, created on demand from the same literal, so it shares the\n host's code and type feedback) keeps the host Function.prototype and is never reachable\n from guest code: `priv.apply(t, args)` is the host intrinsic, unlike `$CALL.call` on the\n guest-visible object (~35 ns). With an existing function object (`$fo`, the tier-up of an\n interpreter wrapper) `$fn` itself is private. */\n const direct = constructible\n ? `function ($t, $nt, ...$a) { return $nt === undefined ? $mkpriv().apply($t, $a) : $CONSTRUCT($fn, $a, $nt); }`\n : `function ($t, $nt, ...$a) { if ($nt !== undefined) $RT.throw_not_a_constructor($fo); return $mkpriv().apply($t, $a); }`;\n source =\n`${helpers}return function $make($vr, $fo) {\n const $lit = function () { return ${fn}; };\n const $fn = $lit();\n if ($fo === undefined) $fo = $fn;\n let $priv = $fn === $fo ? null : $fn;\n const $mkpriv = function () { return $priv !== null ? $priv : ($priv = $lit()); };\n const $direct = ${direct};\n return [$fo, $direct, $mkpriv];\n};`;\n }\n /* the url names the function for host stack traces; its id leads to the position table */\n source += `\\n//# sourceURL=jseption:${id}:${url_part(jit_file_name(ctx, b))}:${url_part(name || '<anonymous>')}`;\n const res: JitSource = { source, name, ctor_names: fi.ctor_names };\n if (osr !== undefined) res.osr = { arg_cell: fi.argCell.slice(), var_cell: fi.varCell.slice(), depth: cfg.byPc.get(osr)!.stateIn.length };\n return res;\n}\n\n/* a file or function name as it goes into the generated code's `sourceURL` comment: the file\n name is the embedder's and the function name the guest's, so a line terminator in either\n would end the comment and make the rest host code (a function declaration there is hoisted\n into the compiled code's scope). Control characters and line terminators become `_`. */\nfunction url_part(s: string): string {\n return s.replace(/[\\u0000-\\u001f\\u007f\\u2028\\u2029]/g, '_');\n}\n\nfunction jit_file_name(ctx: JSContext, b: JSFunctionBytecode): string {\n return (b.has_debug && JS_AtomGetStr(ctx, b.debug.filename)) || '<eval>';\n}\n\n/* variant: 'main' = the function's own convention (jit_config.conv), stored in b.compiled;\n 'ctor' = explicit convention `(this | undefined, new_target, ...args)` for construct calls\n through retargetable wrappers, stored in b.compiled_ctor */\nexport function jit_compile(ctx: JSContext, b: JSFunctionBytecode, variant: 'main' | 'ctor' = 'main'): JitCompiled | null {\n if (variant === 'main' ? b.compiled : b.compiled_ctor) return (variant === 'main' ? b.compiled : b.compiled_ctor) as JitCompiled;\n if (b.no_jit || (variant === 'ctor' && b.compiled_ctor === false)) return null;\n const c = compile_variant(ctx, b, variant === 'ctor' ? { conv: 'forwarder' } : {});\n if (c === null) {\n /* a bail of the function's own variant keeps it interpreted (a failed constructor variant\n only disables that variant); a host that refuses code generation leaves no trace */\n if (!jit_config.unavailable) { if (variant === 'main') b.no_jit = true; else b.compiled_ctor = false; }\n return null;\n }\n if (variant === 'main') b.compiled = c; else b.compiled_ctor = c;\n return c;\n}\n\n/* the on-stack replacement variant of `b` entered at the loop header `pc` (cached; null when\n the compiler bails for that header) */\nexport function jit_compile_osr(ctx: JSContext, b: JSFunctionBytecode, pc: number): JitCompiled | null {\n if (b.osr === null) b.osr = new Map();\n let c = b.osr.get(pc);\n if (c !== undefined) return c;\n c = b.no_jit ? null : compile_variant(ctx, b, { conv: 'forwarder', osr: pc });\n b.osr.set(pc, c);\n return c;\n}\n\nfunction compile_variant(ctx: JSContext, b: JSFunctionBytecode, opts: JitGenOptions): JitCompiled | null {\n if (!jit_probe()) return null;\n try {\n const id = jit_stack_alloc_id();\n const gen = jit_generate_source(ctx, b, id, opts);\n const { source, name, ctor_names } = gen;\n if (jit_config.dump) console.log(`--- jit${opts.osr !== undefined ? ` (osr at ${opts.osr})` : opts.conv === 'forwarder' && jit_config.conv !== 'forwarder' ? ' (ctor)' : ''}: ${name || '<anonymous>'} ---\\n${source}`);\n const RT = make_jit_runtime(ctx, (bb) => jit_closure_compile(ctx, bb));\n let factory: Function;\n try {\n factory = new Function(...JIT_FACTORY_PARAMS, source);\n } catch (e) {\n /* code generation from strings forbidden by the host: the tier turns itself off and the\n interpreter takes over (a SyntaxError is a compiler bug: reported below) */\n if (!(e instanceof SyntaxError) && !jit_probe(true)) return null;\n throw e;\n }\n const make = factory(...jit_runtime_factory_args(RT, b)) as JitCompiled['make'];\n const stack: CompiledEntry = { b, name, file: jit_file_name(ctx, b), source, lines: null, ctor_names: ctor_names ?? null };\n jit_stack_register(id, stack);\n const compiled: JitCompiled = { make, source, name, stack, osr: gen.osr };\n jit_stats.compiled++;\n if (opts.osr !== undefined) jit_stats.osr_compiled++;\n return compiled;\n } catch (e) {\n jit_stats.bailed++;\n const msg = e instanceof JitBail ? e.message : `internal: ${(e as Error)?.message ?? e}`;\n jit_stats.bail_reasons.set(msg, (jit_stats.bail_reasons.get(msg) ?? 0) + 1);\n if (jit_config.dump || !(e instanceof JitBail)) console.log(`--- jit bail: ${func_name(ctx, b) || '<anonymous>'}: ${msg}`);\n if (!(e instanceof JitBail) && jit_config.dump) console.log((e as Error).stack);\n return null;\n }\n}\n\nexport function jit_should_compile(b: JSFunctionBytecode): boolean {\n if (jit_config.mode === 'off' || b.no_jit) return false;\n if (b.compiled) return true;\n if (jit_config.mode === 'always') return true;\n return ++b.call_count >= jit_config.threshold;\n}\n\n/* backtraces of compiled frames (src/jit_stack.ts) while the tier is on */\njit_stack_install(jit_config.mode !== 'off');\n\n/* JS_CallInternal entry hook (see src/jit_hook.ts) */\njit_hooks.try_call = (ctx: JSContext, func_obj, func_data: JSFunctionData, b, this_obj, new_target, argv, flags) => {\n let direct: Function | null = func_data.compiled;\n if (direct === null) {\n if (jit_config.mode === 'off') return JIT_NOT_COMPILED;\n if (!jit_should_compile(b)) return JIT_NOT_COMPILED;\n const compiled = jit_compile(ctx, b);\n if (!compiled) return JIT_NOT_COMPILED;\n /* tier-up of an existing function object (an interpreter wrapper): give the closure a\n compiled direct entry and its private copy; a retargetable wrapper calls the copy from\n now on, and a generic one reaches it through here */\n const [, d, mkpriv] = compiled.make(func_data.var_refs, func_obj);\n direct = d;\n func_data.compiled = d;\n func_data.mkpriv = mkpriv;\n func_data.priv = mkpriv !== null ? mkpriv() : null;\n if (!jit_is_wrapper(func_obj)) js_direct.set(func_obj as Function, d);\n }\n if ((flags & JS_CALL_FLAG_CONSTRUCTOR) !== 0 || new_target !== undefined) {\n /* construct call: the explicit-convention body (shared with the wrapper's construct path) */\n let c = func_data.ctor;\n if (c === null) c = jit_closure_ctor(ctx, func_obj, func_data, b);\n return jit_runtime_call_compiled(ctx, c ?? direct, this_obj, new_target, argv, flags);\n }\n let p = func_data.priv;\n if (p === null && func_data.mkpriv !== null) p = func_data.priv = func_data.mkpriv();\n if (p !== null) return jit_runtime_call_priv(ctx, p, this_obj, argv);\n return jit_runtime_call_compiled(ctx, direct, this_obj, new_target, argv, flags);\n};\n\n/* the explicit-convention constructor body of a closure (compiled on its first construct call\n through the engine or a wrapper), or null when the compiler bails */\nfunction jit_closure_ctor(ctx: JSContext, func_obj: JSValue, fd: JSFunctionData, b: JSFunctionBytecode): Function | null {\n if (jit_config.conv === 'forwarder') return fd.compiled; /* the direct entry is the body */\n const c = jit_compile(ctx, b, 'ctor');\n if (c === null) return null;\n fd.ctor = c.make(fd.var_refs, func_obj)[1];\n return fd.ctor;\n}\n\n/* On-stack replacement (see JitHooks.osr): the interpreter frame `sf` of `func_obj` has taken\n enough backward jumps; its loop header is `pc` and its stack depth `sp`. Runs the rest of the\n frame in the OSR variant and returns its result (JS_EXCEPTION with the exception pending), or\n JIT_NOT_COMPILED to continue interpreting. */\njit_set_osr_threshold(jit_config.osr_threshold);\njit_hooks.osr = (ctx: JSContext, func_obj, b, sf, pc, sp) => {\n if (jit_config.mode === 'off' || !jit_config.osr || b.no_jit) { b.loop_count = 0; return JIT_NOT_COMPILED; }\n const c = jit_compile_osr(ctx, b, pc);\n if (c === null || c.osr === undefined || c.osr.depth !== sp) {\n /* the compiler bailed for this header: back to counting (other headers may work) */\n b.loop_count = 0;\n return JIT_NOT_COMPILED;\n }\n const fd = JS_GetFunctionData(func_obj)!;\n const { arg_cell, var_cell, depth } = c.osr;\n /* captured variables: the frame's own variable references, detached (their values move into\n them) so that closures created so far stay connected to the compiled code */\n const cell = (is_arg: boolean, idx: number, v: JSValue): JSVarRef => {\n const refs: JSVarRef[] = sf.var_refs;\n for (let i = 0; i < refs.length; i++) {\n const vr = refs[i];\n if (!vr.is_detached && vr.is_arg === is_arg && vr.var_idx === idx) { vr.detach(); return vr; }\n }\n return new_var_ref_cell(v);\n };\n const a: JSValue[] = new Array(b.arg_count);\n for (let i = 0; i < b.arg_count; i++) {\n const v = i < sf.arg_buf.length ? sf.arg_buf[i] : undefined;\n a[i] = arg_cell[i] ? cell(true, i, v) : v;\n }\n const v: JSValue[] = new Array(b.var_count);\n for (let i = 0; i < b.var_count; i++) v[i] = var_cell[i] ? cell(false, i, sf.var_buf[i]) : sf.var_buf[i];\n /* catch slots hold catch offsets in the interpreter and nothing in compiled code */\n const st: JSValue[] = new Array(depth);\n for (let d = 0; d < depth; d++) { const x = sf.stack_buf[d]; st[d] = JS_IsCatchOffset(x) ? undefined : x; }\n const direct = c.make(fd.var_refs, func_obj)[1];\n sf.osr = true;\n jit_stats.osr_entered++;\n const rt = ctx.rt;\n try {\n return direct(sf.this_obj, sf.new_target, { a, v, s: st });\n } catch (e) {\n return js_host_exception_to_guest(ctx, e);\n } finally {\n rt.current_stack_frame = sf;\n }\n};\n\n/* function objects created by jit_runtime_make_wrapper */\nconst wrappers = new WeakSet<object>();\nexport function jit_is_wrapper(f: JSValue): boolean { return wrappers.has(f as object); }\n\n/* interpreted closures of normal functions are retargetable wrappers while the tier is on */\njit_hooks.make_wrapper = (ctx: JSContext, b, var_refs, proto, is_ctor) => {\n if (jit_config.mode === 'off') return null;\n const w = jit_runtime_make_wrapper(ctx, b, var_refs, proto, is_ctor);\n if (w !== null) wrappers.add(w as object);\n return w;\n};\n"]}