Files
hakorune/docs/reference/plugin-system/externcall.md

26 lines
1.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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