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:
@@ -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")
|
||||
@@ -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
|
||||
@@ -0,0 +1,15 @@
|
||||
var Module = "module".import_("Module")
|
||||
// expect: Bool
|
||||
// expect: Class
|
||||
// expect: Fiber
|
||||
// expect: Fn
|
||||
// expect: List
|
||||
// expect: Map
|
||||
// expect: MapKeySequence
|
||||
// expect: MapValueSequence
|
||||
// expect: Null
|
||||
// expect: Num
|
||||
// expect: Object
|
||||
// expect: Range
|
||||
// expect: Sequence
|
||||
// expect: String
|
||||
@@ -0,0 +1,17 @@
|
||||
// nontest
|
||||
var Module = "from module"
|
||||
|
||||
IO.print(Bool)
|
||||
IO.print(Class)
|
||||
IO.print(Fiber)
|
||||
IO.print(Fn)
|
||||
IO.print(List)
|
||||
IO.print(Map)
|
||||
IO.print(MapKeySequence)
|
||||
IO.print(MapValueSequence)
|
||||
IO.print(Null)
|
||||
IO.print(Num)
|
||||
IO.print(Object)
|
||||
IO.print(Range)
|
||||
IO.print(Sequence)
|
||||
IO.print(String)
|
||||
Reference in New Issue
Block a user