From 115f51e20eb365952c65f9257a7354d37a435536 Mon Sep 17 00:00:00 2001 From: Seggan Date: Thu, 21 Dec 2023 22:05:16 -0500 Subject: [PATCH] `State#currentDir` is not a string --- .../main/kotlin/io/github/seggan/metis/runtime/State.kt | 2 +- .../seggan/metis/runtime/intrinsics/ModuleLoader.kt | 3 ++- .../seggan/metis/runtime/intrinsics/NativeLibrary.kt | 8 +++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/State.kt b/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/State.kt index ea126d0..ce71bd2 100644 --- a/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/State.kt +++ b/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/State.kt @@ -70,7 +70,7 @@ class State(val parentState: State? = null) { /** * The current working directory of the state. */ - var currentDir = fileSystem.getPath(System.getProperty("user.dir")).toAbsolutePath() + var currentDir = System.getProperty("user.dir") internal val openUpvalues = ArrayDeque() diff --git a/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/intrinsics/ModuleLoader.kt b/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/intrinsics/ModuleLoader.kt index 5106667..a7a5c4e 100644 --- a/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/intrinsics/ModuleLoader.kt +++ b/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/intrinsics/ModuleLoader.kt @@ -49,8 +49,9 @@ class NativeLoader(private val libs: List) : ModuleLoader { */ object FileLoader : ModuleLoader { override fun load(state: State, module: String): CallableValue? { + val currentDir = state.fileSystem.getPath(state.currentDir) val searchPaths = state.globals.lookUpHierarchy("package", "path")!!.listValue().map { - state.currentDir.resolve(state.fileSystem.getPath(it.stringValue())) + currentDir.resolve(state.fileSystem.getPath(it.stringValue())) } for (searchPath in searchPaths) { val path = searchPath.resolve("$module.metis") diff --git a/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/intrinsics/NativeLibrary.kt b/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/intrinsics/NativeLibrary.kt index 29142be..f4412d4 100644 --- a/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/intrinsics/NativeLibrary.kt +++ b/metis-lang/src/main/kotlin/io/github/seggan/metis/runtime/intrinsics/NativeLibrary.kt @@ -89,7 +89,7 @@ object OsLib : NativeLibrary("os") { System.setProperty(value.stringValue(), other.stringValue()) Value.Null } - lib["getCwd"] = zeroArgFunction { currentDir.absolutePathString().metisValue() } + lib["getCwd"] = zeroArgFunction { currentDir.metisValue() } lib["setCwd"] = oneArgFunction { p -> val path = fileSystem.getPath(p.stringValue()) if (!path.isAbsolute) { @@ -98,7 +98,7 @@ object OsLib : NativeLibrary("os") { "Cannot set cwd to relative path: ${path.absolutePathString()}" ) } - currentDir = path + currentDir = path.absolutePathString() Value.Null } } @@ -113,7 +113,9 @@ object PathLib : NativeLibrary("__path") { translateIoError { fn(toPath(self)) } } - private fun State.toPath(value: Value) = currentDir.resolve(fileSystem.getPath(value.stringValue())) + private fun State.toPath(value: Value): Path { + return fileSystem.getPath(currentDir).resolve(fileSystem.getPath(value.stringValue())) + } @OptIn(ExperimentalPathApi::class) override fun init(lib: MutableMap) {