IrInterpret: remove thread creation / joining (performance fix)
This commit is contained in:
+11
-16
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.ir.util.*
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import java.lang.invoke.MethodHandle
|
import java.lang.invoke.MethodHandle
|
||||||
import kotlin.concurrent.thread
|
|
||||||
|
|
||||||
private const val MAX_COMMANDS = 500_000
|
private const val MAX_COMMANDS = 500_000
|
||||||
|
|
||||||
@@ -75,23 +74,19 @@ class IrInterpreter(private val irBuiltIns: IrBuiltIns, private val bodyMap: Map
|
|||||||
|
|
||||||
fun interpret(expression: IrExpression): IrExpression {
|
fun interpret(expression: IrExpression): IrExpression {
|
||||||
stack.clean()
|
stack.clean()
|
||||||
lateinit var result: IrExpression
|
return try {
|
||||||
thread(start = true) {
|
when (val returnLabel = expression.interpret().returnLabel) {
|
||||||
result = try {
|
ReturnLabel.REGULAR -> stack.popReturnValue().toIrExpression(expression)
|
||||||
when (val returnLabel = expression.interpret().returnLabel) {
|
ReturnLabel.EXCEPTION -> {
|
||||||
ReturnLabel.REGULAR -> stack.popReturnValue().toIrExpression(expression)
|
val message = (stack.popReturnValue() as ExceptionState).getFullDescription()
|
||||||
ReturnLabel.EXCEPTION -> {
|
IrErrorExpressionImpl(expression.startOffset, expression.endOffset, expression.type, "\n" + message)
|
||||||
val message = (stack.popReturnValue() as ExceptionState).getFullDescription()
|
|
||||||
IrErrorExpressionImpl(expression.startOffset, expression.endOffset, expression.type, "\n" + message)
|
|
||||||
}
|
|
||||||
else -> TODO("$returnLabel not supported as result of interpretation")
|
|
||||||
}
|
}
|
||||||
} catch (e: InterpreterException) {
|
else -> TODO("$returnLabel not supported as result of interpretation")
|
||||||
// TODO don't handle, throw to lowering
|
|
||||||
IrErrorExpressionImpl(expression.startOffset, expression.endOffset, expression.type, "\n" + e.message)
|
|
||||||
}
|
}
|
||||||
}.join()
|
} catch (e: InterpreterException) {
|
||||||
return result
|
// TODO don't handle, throw to lowering
|
||||||
|
IrErrorExpressionImpl(expression.startOffset, expression.endOffset, expression.type, "\n" + e.message)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun IrElement.interpret(): ExecutionResult {
|
private fun IrElement.interpret(): ExecutionResult {
|
||||||
|
|||||||
Reference in New Issue
Block a user