Relative imports!

This is a breaking change because existing imports in user Wren code
that assume the path is relative to the entrypoint file will now likely
fail.

Also, stack trace output and host API calls that take a module string
now need the resolved module string, not the short name that appears in
the import.
This commit is contained in:
Bob Nystrom
2018-03-24 11:10:36 -07:00
parent 5539c59750
commit 8210452970
41 changed files with 152 additions and 107 deletions
@@ -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'.
+1 -1
View File
@@ -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")
+1 -1
View File
@@ -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
View File
@@ -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 -1
View File
@@ -1,2 +1,2 @@
var Collides
import "module" for Collides // expect error
import "./module" for Collides // expect error
+2 -2
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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
View File
@@ -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'.