Enable displaying errors with source (files with code)
This commit is contained in:
@@ -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) }
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
package io.smnp.interpreter
|
||||
|
||||
import io.smnp.environment.Environment
|
||||
|
||||
interface Interpreter {
|
||||
fun run(code: String): Environment
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package io.smnp.interpreter
|
||||
|
||||
import io.smnp.environment.Environment
|
||||
|
||||
interface LanguageModuleInterpreter {
|
||||
fun run(code: String, source: String): Environment
|
||||
}
|
||||
Reference in New Issue
Block a user