Files
hakorune/docs/EXTERNCALL.md
Selfhosting Dev 89e6fbf010 feat(llvm): Comprehensive LLVM backend improvements by ChatGPT
Major enhancements to LLVM code generation and type handling:

1. String Operations:
   - Added StringBox length fast-path (length/len methods)
   - Converts i8* to handle when needed for len_h call
   - Consistent handle-based string operations

2. Array/Map Fast-paths:
   - ArrayBox: get/set/push/length operations
   - MapBox: get/set/has/size with handle-based keys
   - Optimized paths for common collection operations

3. Field Access:
   - getField/setField implementation with handle conversion
   - Proper i64 handle to pointer conversions

4. NewBox Improvements:
   - StringBox/IntegerBox pass-through optimizations
   - Fallback to env.box.new when type_id unavailable
   - Support for dynamic box creation

5. Documentation:
   - Added ARCHITECTURE.md for overall design
   - Added EXTERNCALL.md for external call specs
   - Added LOWERING_LLVM.md for LLVM lowering rules
   - Added PLUGIN_ABI.md for plugin interface

6. Type System:
   - Added UserBox type registration in nyash_box.toml
   - Consistent handle (i64) representation across system

Results: More robust LLVM code generation with proper type handling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 22:30:26 +09:00

1.1 KiB
Raw Blame History

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.