feat: implement relative import resolution with normalized paths and update all test modules
Replace the flat module name-to-path mapping with a proper relative import resolver that handles "./" and "../" prefixes relative to the importer's directory. This is a breaking change: existing imports in user code that assume paths are relative to the entrypoint file will now fail. Stack trace output and host API calls now use the resolved module string instead of the short import name. Update all test fixtures to use "./" relative imports and adjust C test files to pass the full resolved module path to wrenGetVariable.
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
class Foo {
|
||||
foreign someUnknownMethod // expect runtime error: Could not find foreign method 'someUnknownMethod' for class Foo in module 'main'.
|
||||
foreign someUnknownMethod // expect runtime error: Could not find foreign method 'someUnknownMethod' for class Foo in module 'test/language/foreign/unknown_method'.
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import "module" for Module, Other
|
||||
import "./module" for Module, Other
|
||||
|
||||
System.print(Module) // expect: before
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
System.print("before") // expect: before
|
||||
import "module" for Module // expect runtime error: Could not compile module 'module'.
|
||||
import "./module" for Module // expect runtime error: Could not compile module 'test/language/module/compile_error/module'.
|
||||
|
||||
@@ -3,7 +3,7 @@ System.print("start a")
|
||||
|
||||
var A = "a value"
|
||||
System.print("a defined %(A)")
|
||||
import "b" for B
|
||||
import "./b" for B
|
||||
System.print("a imported %(B)")
|
||||
|
||||
System.print("end a")
|
||||
|
||||
@@ -3,7 +3,7 @@ System.print("start b")
|
||||
|
||||
var B = "b value"
|
||||
System.print("b defined %(B)")
|
||||
import "a" for A
|
||||
import "./a" for A
|
||||
System.print("b imported %(A)")
|
||||
|
||||
System.print("end b")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import "a"
|
||||
import "./a"
|
||||
|
||||
// Shared module should only run once:
|
||||
// expect: start a
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import "module"
|
||||
import "./module"
|
||||
// expect: Bool
|
||||
// expect: Class
|
||||
// expect: Fiber
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
var Module = "outer"
|
||||
|
||||
if (true) {
|
||||
import "module" for Module
|
||||
import "./module" for Module
|
||||
// expect: ran module
|
||||
|
||||
System.print(Module) // expect: from module
|
||||
|
||||
@@ -1 +1 @@
|
||||
import "module" NoString // expect error
|
||||
import "./module" NoString // expect error
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
import "something" for Index
|
||||
import "./something/module" for Index
|
||||
|
||||
System.print(Index) // expect: index
|
||||
@@ -1,4 +1,4 @@
|
||||
import "module" for Module1, Module2, Module3, Module4, Module5
|
||||
import "./module" for Module1, Module2, Module3, Module4, Module5
|
||||
|
||||
// Only execute module body once:
|
||||
// expect: ran module
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
var Collides
|
||||
import "module" for Collides // expect error
|
||||
import "./module" for Collides // expect error
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import
|
||||
|
||||
|
||||
"module"
|
||||
"./module"
|
||||
|
||||
import "module" for
|
||||
import "./module" for
|
||||
|
||||
A,
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
import "module"
|
||||
import "./module"
|
||||
// expect: ran module
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
// nontest
|
||||
System.print("module_3")
|
||||
@@ -0,0 +1,8 @@
|
||||
import "./sub/module"
|
||||
import "./sub/././///dir/module"
|
||||
// expect: sub/module
|
||||
// expect: sub/module_2
|
||||
// expect: sub/dir/module
|
||||
// expect: sub/dir/module_2
|
||||
// expect: sub/module_3
|
||||
// expect: module_3
|
||||
@@ -0,0 +1,3 @@
|
||||
// nontest
|
||||
System.print("sub/dir/module")
|
||||
import "./module_2"
|
||||
@@ -0,0 +1,4 @@
|
||||
// nontest
|
||||
System.print("sub/dir/module_2")
|
||||
import "../module_3"
|
||||
import "../../module_3"
|
||||
@@ -0,0 +1,3 @@
|
||||
// nontest
|
||||
System.print("sub/module")
|
||||
import "./module_2"
|
||||
@@ -0,0 +1,2 @@
|
||||
// nontest
|
||||
System.print("sub/module_2")
|
||||
@@ -0,0 +1,2 @@
|
||||
// nontest
|
||||
System.print("sub/module_3")
|
||||
@@ -1,5 +1,5 @@
|
||||
// nontest
|
||||
System.print("a")
|
||||
import "shared" for Shared
|
||||
import "./shared" for Shared
|
||||
var A = "a %(Shared)"
|
||||
System.print("a done")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// nontest
|
||||
System.print("b")
|
||||
import "shared" for Shared
|
||||
import "./shared" for Shared
|
||||
var B = "b %(Shared)"
|
||||
System.print("b done")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import "a" for A
|
||||
import "b" for B
|
||||
import "./a" for A
|
||||
import "./b" for B
|
||||
|
||||
// Shared module should only run once:
|
||||
// expect: a
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import "module" for Module
|
||||
import "./module" for Module
|
||||
// expect: ran module
|
||||
|
||||
System.print(Module) // expect: from module
|
||||
|
||||
@@ -1 +1 @@
|
||||
import "does_not_exist" for DoesNotExist // expect runtime error: Could not load module 'does_not_exist'.
|
||||
import "./does_not_exist" for DoesNotExist // expect runtime error: Could not load module 'test/language/module/does_not_exist'.
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
// Should execute the module:
|
||||
// expect: ran module
|
||||
import "module" for DoesNotExist // expect runtime error: Could not find a variable named 'DoesNotExist' in module 'module'.
|
||||
import "./module" for DoesNotExist // expect runtime error: Could not find a variable named 'DoesNotExist' in module 'test/language/module/unknown_variable/module'.
|
||||
|
||||
Reference in New Issue
Block a user