fix(llvm): MapBox core-first implementation with plugin fallback by ChatGPT

Implemented elegant solution for MapBox as core box with plugin fallback:

1. Core-first Strategy:
   - Removed MapBox type_id from nyash_box.toml
   - MapBox now uses env.box.new fallback (core implementation)
   - Consistent with self-hosting goals

2. Plugin Fallback Option:
   - Added NYASH_LLVM_FORCE_PLUGIN_MAP=1 environment variable
   - Allows forcing MapBox to plugin path when needed
   - Preserves flexibility during transition

3. MIR Type Inference:
   - Added MapBox method type inference (size/has/get)
   - Ensures proper return type handling

4. Documentation:
   - Added core vs plugin box explanation in nyrt
   - Clarified the transition strategy

This aligns with Phase 15 goals where basic boxes will eventually
be implemented in Nyash itself for true self-hosting.

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Selfhosting Dev
2025-09-11 23:09:16 +09:00
parent 89e6fbf010
commit 13298126c8
5 changed files with 18 additions and 15 deletions

View File

@ -147,6 +147,12 @@ pub extern "C" fn nyash_env_box_new(type_name: *const i8) -> i64 {
Ok(s) => s,
Err(_) => return 0,
};
// Core-first special cases: construct built-in boxes directly
if ty == "MapBox" {
use nyash_rust::boxes::map_box::MapBox;
let arc: std::sync::Arc<dyn NyashBox> = std::sync::Arc::new(MapBox::new());
return handles::to_handle(arc) as i64;
}
let reg = get_global_registry();
match reg.create_box(ty, &[]) {
Ok(b) => {