Enable displaying errors with source (files with code)

This commit is contained in:
2020-03-17 13:34:07 +01:00
parent 0c0982596a
commit 15b77e2c8b
18 changed files with 112 additions and 78 deletions

View File

@@ -1,21 +1,21 @@
package io.smnp.ext
import io.smnp.interpreter.Interpreter
import io.smnp.interpreter.LanguageModuleInterpreter
import io.smnp.type.module.Module
abstract class LanguageModuleProvider(path: String) : ModuleProvider(path) {
open fun files() = listOf("main.mus")
override fun provideModule(interpreter: Interpreter): Module {
override fun provideModule(interpreter: LanguageModuleInterpreter): Module {
val segments = path.split(".")
val parentNodesChainPath = segments.dropLast(1).joinToString(".")
val moduleName = segments.last()
val module = files()
.asSequence()
.map { javaClass.classLoader.getResource(it) }
.map { it.readText() }
.map { interpreter.run(it) }
.map { it to javaClass.classLoader.getResource(it) }
.map { it.first to (it.second?.readText() ?: throw RuntimeException("Module '$path' does not contain '${it.first}' file")) }
.map { interpreter.run(it.second, "module $path::${it.first}") }
.map { it.getRootModule() }
.reduce { acc, module -> acc.merge(module) }

View File

@@ -1,7 +1,7 @@
package io.smnp.ext
import io.smnp.environment.Environment
import io.smnp.interpreter.Interpreter
import io.smnp.interpreter.LanguageModuleInterpreter
import io.smnp.type.module.Module
import org.pf4j.ExtensionPoint
@@ -9,5 +9,5 @@ abstract class ModuleProvider(val path: String) : ExtensionPoint {
open fun onModuleLoad(environment: Environment) {}
open fun beforeModuleDisposal(environment: Environment) {}
open fun dependencies(): List<String> = emptyList()
abstract fun provideModule(interpreter: Interpreter): Module
abstract fun provideModule(interpreter: LanguageModuleInterpreter): Module
}

View File

@@ -2,12 +2,12 @@ package io.smnp.ext
import io.smnp.callable.function.Function
import io.smnp.callable.method.Method
import io.smnp.interpreter.Interpreter
import io.smnp.interpreter.LanguageModuleInterpreter
import io.smnp.type.module.Module
abstract class NativeModuleProvider(path: String) : ModuleProvider(path) {
open fun functions(): List<Function> = emptyList()
open fun methods(): List<Method> = emptyList()
final override fun provideModule(interpreter: Interpreter) = Module.create(path, functions(), methods())
final override fun provideModule(interpreter: LanguageModuleInterpreter) = Module.create(path, functions(), methods())
}

View File

@@ -1,7 +0,0 @@
package io.smnp.interpreter
import io.smnp.environment.Environment
interface Interpreter {
fun run(code: String): Environment
}

View File

@@ -0,0 +1,7 @@
package io.smnp.interpreter
import io.smnp.environment.Environment
interface LanguageModuleInterpreter {
fun run(code: String, source: String): Environment
}