/*
 * Decompiled with CFR 0.152.
 */
package com.script

import com.script.ScriptContext.Companion.ENGINE_SCOPE
import com.script.ScriptContext.Companion.GLOBAL_SCOPE
import org.mozilla.javascript.Scriptable
import kotlin.coroutines.CoroutineContext

abstract class CompiledScript {

    abstract fun getEngine(): ScriptEngine

    @Throws(ScriptException::class)
    fun eval(context: ScriptContext): Any? {
        return eval(getEngine().getRuntimeScope(context))
    }

    @Throws(ScriptException::class)
    fun eval(scope: Scriptable): Any? {
        return eval(scope, null)
    }

    @Throws(ScriptException::class)
    abstract fun eval(scope: Scriptable, coroutineContext: CoroutineContext?): Any?

    @Throws(ScriptException::class)
    abstract suspend fun evalSuspend(scope: Scriptable): Any?

    @Throws(ScriptException::class)
    fun eval(bindings: Bindings?): Any? {
        var ctxt = getEngine().context
        if (bindings != null) {
            val tempContext = SimpleScriptContext()
            tempContext.setBindings(bindings, ENGINE_SCOPE)
            tempContext.setBindings(ctxt.getBindings(GLOBAL_SCOPE), GLOBAL_SCOPE)
            tempContext.writer = ctxt.writer
            tempContext.reader = ctxt.reader
            tempContext.errorWriter = ctxt.errorWriter
            ctxt = tempContext
        }
        return this.eval(ctxt)
    }

    @Throws(ScriptException::class)
    fun eval(): Any? {
        return this.eval(getEngine().context)
    }
}