mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-08-16 00:05:59 +00:00
cleanup script engine
This commit is contained in:
parent
768e569400
commit
2885a39299
@ -4,7 +4,6 @@ import com.volmit.iris.core.scripting.kotlin.runner.configureMavenDepsOnAnnotati
|
||||
import kotlin.script.experimental.annotations.KotlinScript
|
||||
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
||||
import kotlin.script.experimental.api.defaultImports
|
||||
import kotlin.script.experimental.api.isStandalone
|
||||
import kotlin.script.experimental.api.refineConfiguration
|
||||
import kotlin.script.experimental.dependencies.DependsOn
|
||||
import kotlin.script.experimental.dependencies.Repository
|
||||
@ -15,7 +14,6 @@ import kotlin.script.experimental.jvm.jvm
|
||||
abstract class SimpleScript
|
||||
|
||||
object SimpleScriptDefinition : ScriptCompilationConfiguration({
|
||||
isStandalone(false)
|
||||
defaultImports(
|
||||
DependsOn::class.qualifiedName!!,
|
||||
Repository::class.qualifiedName!!,
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.volmit.iris.core.scripting.kotlin.runner
|
||||
|
||||
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.script.experimental.api.*
|
||||
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||
@ -14,6 +14,7 @@ data class CachedScript(
|
||||
) : Script, CompiledScript {
|
||||
private val scripts = base.otherScripts.map { CachedScript(it, host, hostConfig) }
|
||||
private val evalConfig = createEvaluationConfiguration()
|
||||
private val lock = ReentrantLock()
|
||||
|
||||
@Volatile
|
||||
private var value: ResultWithDiagnostics<KClass<*>>? = null
|
||||
@ -32,13 +33,16 @@ data class CachedScript(
|
||||
|
||||
|
||||
override suspend fun getClass(scriptEvaluationConfiguration: ScriptEvaluationConfiguration?) = value ?: run {
|
||||
val cached = base.getClass(scriptEvaluationConfiguration)
|
||||
updater.set(this, cached)
|
||||
return cached
|
||||
lock.lock()
|
||||
try {
|
||||
value ?: base.getClass(scriptEvaluationConfiguration).also { value = it }
|
||||
} finally {
|
||||
lock.unlock()
|
||||
}
|
||||
}
|
||||
|
||||
override fun evaluate(properties: Map<String, Any?>?) = host.runInCoroutineContext {
|
||||
host.evaluator.invoke(this, createEvaluationConfiguration(properties))
|
||||
host.evaluator(this, createEvaluationConfiguration(properties))
|
||||
}
|
||||
|
||||
private fun createEvaluationConfiguration(properties: Map<String, Any?>?): ScriptEvaluationConfiguration {
|
||||
@ -57,8 +61,4 @@ data class CachedScript(
|
||||
hostConfig,
|
||||
type)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val updater = AtomicReferenceFieldUpdater.newUpdater(CachedScript::class.java, ResultWithDiagnostics::class.java, "value")
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user