feat: add module loading with String.import_ and embedder-provided loadModuleFn
Implement initial module system allowing Wren code to import other modules via a temporary `String.import_` method. The embedder must supply a `WrenLoadModuleFn` callback that returns source code for a given module name; the VM caches loaded modules and returns a fiber to execute the module body. Add `wrenImportModule` to the VM API, wire `loadModuleFn` into `WrenConfiguration`, and update the CLI interpreter to resolve imports relative to the entry script's directory. Include test cases for importing multiple variables, shared imports across modules, and verifying that variable bindings are independent across import sites.
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
var Module = "module.wren".import_("Module")
|
||||
var Other = "module.wren".import_("Other")
|
||||
|
||||
IO.print(Module) // expect: before
|
||||
|
||||
// Reassigning the variable in the other module does not affect this one's
|
||||
// binding.
|
||||
Other.change
|
||||
IO.print(Module) // expect: before
|
||||
|
||||
// But it does change there.
|
||||
Other.show // expect: after
|
||||
|
||||
// TODO: Cyclic import.
|
||||
@@ -0,0 +1,12 @@
|
||||
// nontest
|
||||
var Module = "before"
|
||||
|
||||
class Other {
|
||||
static change {
|
||||
Module = "after"
|
||||
}
|
||||
|
||||
static show {
|
||||
IO.print(Module)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user