1.1 KiB
1.1 KiB
ExternCall Policy (Phase 15)
Allowed Interfaces (minimal set)
env.console.{log,warn,error,readLine}env.debug.traceenv.system.{exit,now}(if present)
All other host interactions should go through BoxCall (NyRT or plugins).
Argument‑type‑based selection
- For
env.console.{log,warn,error}andenv.debug.trace:- If the single argument is
i8*(C string), call the C‑string variant:nyash.console.log(i8*),nyash.console.warn(i8*),nyash.console.error(i8*)nyash.debug.trace(i8*)
- Otherwise convert to
i64and call the handle variant:nyash.console.log_handle(i64),nyash.console.warn_handle(i64),nyash.console.error_handle(i64)nyash.debug.trace_handle(i64)
- If the single argument is
Rationale
- Keeps the AOT string path fast and avoids accidental
inttoptrof handles. - Avoids adding broad implicit conversions in ExternCall; selection is local and explicit.
Non‑LLVM Backends
- VM, Cranelift JIT/AOT, and the interpreter may not implement this policy yet (not MIR14‑ready). LLVM is authoritative; other backends will align after stabilization.