Move global error handling to root main() function

This commit is contained in:
2020-03-15 17:00:13 +01:00
parent 2573363dca
commit 2c1bae2974
2 changed files with 27 additions and 36 deletions

View File

@@ -5,37 +5,45 @@ import com.xenomachina.argparser.mainBody
import io.smnp.cli.model.entity.Arguments
import io.smnp.cli.model.enumeration.ModulesPrintMode
import io.smnp.environment.DefaultEnvironment
import io.smnp.error.SmnpException
import io.smnp.ext.DefaultModuleRegistry
import io.smnp.interpreter.DefaultInterpreter
import io.smnp.preset.PresetProvider.providePresetCode
import io.smnp.type.model.Value
import kotlin.system.exitProcess
fun main(args: Array<String>): Unit = mainBody {
ArgParser(args).parseInto(::Arguments).run {
val interpreter = DefaultInterpreter()
val environment = DefaultEnvironment()
try {
val interpreter = DefaultInterpreter()
val environment = DefaultEnvironment()
environment.setVariable("__param__", Value.wrap(parameters.toMap()))
environment.setVariable("__param__", Value.wrap(parameters.toMap()))
when {
file != null -> interpreter.run(file!!, environment, printTokens, printAst, dryRun)
code != null -> interpreter.run(code!!, environment, printTokens, printAst, dryRun)
preset != null -> interpreter.run(providePresetCode(preset!!), environment, printTokens, printAst, dryRun)
else -> null
}?.let { it as DefaultEnvironment }?.let { disposedEnvironment ->
if(loadedModules != null) {
println("Loaded modules:")
when (loadedModules) {
ModulesPrintMode.LIST -> disposedEnvironment.modules.forEach { println(it) }
ModulesPrintMode.TREE -> disposedEnvironment.printModules(false)
ModulesPrintMode.CONTENT -> disposedEnvironment.printModules(true)
when {
file != null -> interpreter.run(file!!, environment, printTokens, printAst, dryRun)
code != null -> interpreter.run(code!!, environment, printTokens, printAst, dryRun)
preset != null -> interpreter.run(providePresetCode(preset!!), environment, printTokens, printAst, dryRun)
else -> null
}?.let { it as DefaultEnvironment }?.let { disposedEnvironment ->
if (loadedModules != null) {
println("Loaded modules:")
when (loadedModules) {
ModulesPrintMode.LIST -> disposedEnvironment.modules.forEach { println(it) }
ModulesPrintMode.TREE -> disposedEnvironment.printModules(false)
ModulesPrintMode.CONTENT -> disposedEnvironment.printModules(true)
}
}
}
}
if (availableModules) {
println("Available modules:")
DefaultModuleRegistry.registeredModules().forEach { println(it) }
if (availableModules) {
println("Available modules:")
DefaultModuleRegistry.registeredModules().forEach { println(it) }
}
} catch (e: SmnpException) {
System.err.println(e.friendlyName)
System.err.println(e.message)
exitProcess(1)
}
}
}