From 37bb4ae9842c9358bccffb0d709708e6fb6aee0a Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Thu, 13 Nov 2014 17:25:28 +0300 Subject: [PATCH] Coercion fix --- .../backend/src/org/jetbrains/jet/codegen/StackValue.java | 4 ++-- .../backend/src/org/jetbrains/jet/codegen/StackValue.kt | 7 ++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java index 101bc2f7e34..900fb193158 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java @@ -390,8 +390,8 @@ public abstract class StackValue { return new FieldForSharedVar(field.type, field.owner, field.name, newSharedVarReceiver); } - public static StackValue coercion(@NotNull StackValue receiver, @NotNull Type type) { - return CodegenPackage.coercion(receiver, type); + public static StackValue coercion(@NotNull StackValue value, @NotNull Type castType) { + return new CoercionValue(value, castType); } public static StackValue thisOrOuter(@NotNull ExpressionCodegen codegen, @NotNull ClassDescriptor descriptor, boolean isSuper, boolean isExplicit) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.kt b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.kt index e40b761b567..f358c55d1c1 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.kt +++ b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.kt @@ -21,17 +21,14 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter import org.jetbrains.org.objectweb.asm.Label import org.jetbrains.jet.codegen.StackValue.StackValueWithSimpleReceiver -public fun coercion(value: StackValue, castType: Type): StackValue { - return CoercionValue(value, castType) -} - class CoercionValue( val value: StackValue, val castType: Type ) : StackValue(castType) { override fun putSelector(type: Type, v: InstructionAdapter) { - value.putSelector(type, v) + value.putSelector(castType, v) + StackValue.coerce(castType, type, v) } override fun storeSelector(topOfStackType: Type, v: InstructionAdapter) {