Return only onStack/none stackValues in results

This commit is contained in:
Michael Bogdanov
2016-09-30 13:41:27 +03:00
committed by Dmitry Petrov
parent a51efaacc9
commit 24863a84c4
@@ -194,12 +194,8 @@ class ExpressionCodegen(
} }
return StackValue.onStack(callable.returnType) return StackValue.onStack(callable.returnType)
} }
return expression.onStack
} }
override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: BlockInfo): StackValue { override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: BlockInfo): StackValue {
throw AssertionError("Instruction should've been lowered before code generation: ${expression.render()}") throw AssertionError("Instruction should've been lowered before code generation: ${expression.render()}")
} }
@@ -253,13 +249,15 @@ class ExpressionCodegen(
} }
override fun visitGetField(expression: IrGetField, data: BlockInfo): StackValue { override fun visitGetField(expression: IrGetField, data: BlockInfo): StackValue {
return generateFieldValue(expression, data) val value = generateFieldValue(expression, data)
value.put(value.type, mv)
return onStack(value.type)
} }
override fun visitSetField(expression: IrSetField, data: BlockInfo): StackValue { override fun visitSetField(expression: IrSetField, data: BlockInfo): StackValue {
val fieldValue = generateFieldValue(expression, data) val fieldValue = generateFieldValue(expression, data)
fieldValue.store(expression.value.accept(this, data), mv) fieldValue.store(expression.value.accept(this, data), mv)
return expression.onStack return none()
} }
private fun generateLocal(descriptor: CallableDescriptor, type: Type): StackValue { private fun generateLocal(descriptor: CallableDescriptor, type: Type): StackValue {
@@ -278,8 +276,7 @@ class ExpressionCodegen(
override fun visitSetVariable(expression: IrSetVariable, data: BlockInfo): StackValue { override fun visitSetVariable(expression: IrSetVariable, data: BlockInfo): StackValue {
val value = expression.value.accept(this, data) val value = expression.value.accept(this, data)
StackValue.local(frame.getIndex(expression.descriptor), expression.descriptor.asmType).store(value, mv) StackValue.local(frame.getIndex(expression.descriptor), expression.descriptor.asmType).store(value, mv)
//UNIT? return none()
return expression.onStack
} }
override fun <T> visitConst(expression: IrConst<T>, data: BlockInfo): StackValue { override fun <T> visitConst(expression: IrConst<T>, data: BlockInfo): StackValue {