feat: split core module from main and add implicit core imports for all modules

Extract core module loading into separate `loadIntoCore` function and `getCoreModule` helper, replacing the old `getMainModule`. Implement `loadModule` that automatically imports all core module variables into every newly loaded module, enabling implicit visibility of core types (Bool, Class, Fiber, etc.) across all user modules. Add `wrenImportModule` public API for module loading with circular import detection. Increase `WREN_MAX_TEMP_ROOTS` from 4 to 5 to accommodate additional GC roots during module loading. Add test cases for cyclic imports (a.wren/b.wren) and implicit core imports (implicitly_imports_core.wren/module.wren).
This commit is contained in:
Bob Nystrom
2015-02-11 18:06:45 +00:00
parent 6cce3433a5
commit 91efd0d0cc
8 changed files with 190 additions and 86 deletions
+9
View File
@@ -0,0 +1,9 @@
// nontest
IO.print("start a")
var A = "a value"
IO.print("a defined ", A)
var B = "b".import_("B")
IO.print("a imported ", B)
IO.print("end a")
+9
View File
@@ -0,0 +1,9 @@
// nontest
IO.print("start b")
var B = "b value"
IO.print("b defined ", B)
var A = "a".import_("A")
IO.print("b imported ", A)
IO.print("end b")
@@ -0,0 +1,11 @@
var A = "a".import_("A")
// Shared module should only run once:
// expect: start a
// expect: a defined a value
// expect: start b
// expect: b defined b value
// expect: b imported a value
// expect: end b
// expect: a imported b value
// expect: end a