[FIR] Move unsigned types constructor evaluation from intrinsics
This commit is contained in:
committed by
TeamCityServer
parent
64b45e6d1b
commit
ae079d9bdd
@@ -379,8 +379,11 @@ class IrInterpreter(private val irBuiltIns: IrBuiltIns, private val bodyMap: Map
|
||||
.apply { stack.peekReturnValue().addTypeArguments(typeArguments) }
|
||||
}
|
||||
|
||||
if (irClass.defaultType.isUnsignedType()) {
|
||||
return stack.newFrame(initPool = valueArguments) { handleIntrinsicMethods(owner) }
|
||||
if (irClass.defaultType.isUnsignedType() && valueArguments.size == 1 && owner.valueParameters.size == 1) {
|
||||
val result = Common(irClass)
|
||||
result.fields.add(valueArguments.single())
|
||||
stack.pushReturnValue(result)
|
||||
return Next
|
||||
}
|
||||
|
||||
val state = Common(irClass).apply { this.addTypeArguments(typeArguments) }
|
||||
|
||||
-1
@@ -23,7 +23,6 @@ internal class IntrinsicEvaluator {
|
||||
EnumHashCode.equalTo(irFunction) -> EnumHashCode.evaluate(irFunction, stack, interpret)
|
||||
JsPrimitives.equalTo(irFunction) -> JsPrimitives.evaluate(irFunction, stack, interpret)
|
||||
ArrayConstructor.equalTo(irFunction) -> ArrayConstructor.evaluate(irFunction, stack, interpret)
|
||||
UnsignedConstructor.equalTo(irFunction) -> UnsignedConstructor.evaluate(irFunction, stack, interpret)
|
||||
else -> throw InterpreterMethodNotFoundException("Method ${irFunction.name} hasn't implemented")
|
||||
}
|
||||
}
|
||||
|
||||
-23
@@ -5,20 +5,15 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.interpreter.intrinsics
|
||||
|
||||
import org.jetbrains.kotlin.builtins.UnsignedType
|
||||
import org.jetbrains.kotlin.ir.interpreter.*
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Stack
|
||||
import org.jetbrains.kotlin.ir.interpreter.stack.Variable
|
||||
import org.jetbrains.kotlin.ir.interpreter.state.*
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||
import org.jetbrains.kotlin.ir.declarations.IrEnumEntry
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||
import org.jetbrains.kotlin.ir.types.classOrNull
|
||||
import org.jetbrains.kotlin.ir.types.getUnsignedType
|
||||
import org.jetbrains.kotlin.ir.types.isUnsignedType
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
|
||||
internal sealed class IntrinsicBase {
|
||||
@@ -194,22 +189,4 @@ internal object ArrayConstructor : IntrinsicBase() {
|
||||
stack.pushReturnValue(arrayValue.toPrimitiveStateArray(irFunction.parentAsClass.defaultType))
|
||||
return Next
|
||||
}
|
||||
}
|
||||
|
||||
internal object UnsignedConstructor : IntrinsicBase() {
|
||||
override fun equalTo(irFunction: IrFunction): Boolean {
|
||||
val constructorCall = irFunction as? IrConstructor ?: return false
|
||||
val irClass = constructorCall.parent as IrClass
|
||||
return irClass.defaultType.isUnsignedType() && irFunction.valueParameters.size == 1
|
||||
}
|
||||
|
||||
override fun evaluate(irFunction: IrFunction, stack: Stack, interpret: IrElement.() -> ExecutionResult): ExecutionResult {
|
||||
val parameter = irFunction.valueParameters.single()
|
||||
val argument = stack.getVariable(parameter.symbol).state.asNumber()
|
||||
val irClass = irFunction.parent as IrClass
|
||||
val result = Common(irClass)
|
||||
result.fields.add(Variable(parameter.symbol, argument.toState(parameter.type)))
|
||||
stack.pushReturnValue(result)
|
||||
return Next
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,6 @@ internal interface State {
|
||||
|
||||
internal fun State.isNull() = this is Primitive<*> && this.value == null
|
||||
|
||||
internal fun State.asNumber() = (this as Primitive<*>).value as Number
|
||||
internal fun State.asInt() = (this as Primitive<*>).value as Int
|
||||
internal fun State.asBoolean() = (this as Primitive<*>).value as Boolean
|
||||
internal fun State.asString() = (this as Primitive<*>).value.toString()
|
||||
|
||||
Reference in New Issue
Block a user