This commit is contained in:
Horis
2025-04-10 14:36:39 +08:00
parent 0a2b61427d
commit 0aef05a5e4
2 changed files with 24 additions and 3 deletions

View File

@@ -56,7 +56,12 @@ internal class RhinoCompiledScript(
override fun eval(scope: Scriptable, coroutineContext: CoroutineContext?): Any? {
val cx = Context.enter() as RhinoContext
cx.checkRecursive()
try {
cx.checkRecursive()
} catch (e: RhinoRecursionError) {
Context.exit()
throw e
}
val previousCoroutineContext = cx.coroutineContext
if (coroutineContext != null && coroutineContext[Job] != null) {
cx.coroutineContext = coroutineContext
@@ -88,6 +93,12 @@ internal class RhinoCompiledScript(
override suspend fun evalSuspend(scope: Scriptable): Any? {
val cx = Context.enter() as RhinoContext
try {
cx.checkRecursive()
} catch (e: RhinoRecursionError) {
Context.exit()
throw e
}
var ret: Any?
withContext(VMBridgeReflect.contextLocal.asContextElement()) {
cx.allowScriptRun = true

View File

@@ -91,7 +91,12 @@ object RhinoScriptEngine : AbstractScriptEngine(), Invocable, Compilable {
coroutineContext: CoroutineContext?
): Any? {
val cx = Context.enter() as RhinoContext
cx.checkRecursive()
try {
cx.checkRecursive()
} catch (e: RhinoRecursionError) {
Context.exit()
throw e
}
val previousCoroutineContext = cx.coroutineContext
if (coroutineContext != null && coroutineContext[Job] != null) {
cx.coroutineContext = coroutineContext
@@ -127,7 +132,12 @@ object RhinoScriptEngine : AbstractScriptEngine(), Invocable, Compilable {
@Throws(ContinuationPending::class)
override suspend fun evalSuspend(reader: Reader, scope: Scriptable): Any? {
val cx = Context.enter() as RhinoContext
cx.checkRecursive()
try {
cx.checkRecursive()
} catch (e: RhinoRecursionError) {
Context.exit()
throw e
}
var ret: Any?
withContext(VMBridgeReflect.contextLocal.asContextElement()) {
cx.allowScriptRun = true