From 1816ff7c7649559b8868d573ff50c62ff44630a2 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 17 Jun 2011 17:24:14 +0200 Subject: [PATCH] StackValue.Property also needs to implement dupReceiver() --- idea/src/org/jetbrains/jet/codegen/StackValue.java | 12 ++++++++++++ idea/testData/codegen/incrementProperty.jet | 14 ++++++++++++++ .../jetbrains/jet/codegen/NamespaceGenTest.java | 4 ++++ 3 files changed, 30 insertions(+) create mode 100644 idea/testData/codegen/incrementProperty.jet diff --git a/idea/src/org/jetbrains/jet/codegen/StackValue.java b/idea/src/org/jetbrains/jet/codegen/StackValue.java index fedaefa0760..a962ad9d611 100644 --- a/idea/src/org/jetbrains/jet/codegen/StackValue.java +++ b/idea/src/org/jetbrains/jet/codegen/StackValue.java @@ -427,5 +427,17 @@ public abstract class StackValue { v.visitMethodInsn(isStatic ? Opcodes.INVOKESTATIC : isInterface ? Opcodes.INVOKEINTERFACE : Opcodes.INVOKEVIRTUAL, owner, setter.getName(), setter.getDescriptor()); } } + + @Override + public void dupReceiver(InstructionAdapter v, int below) { + if (!isStatic) { + if (below == 1) { + v.dupX1(); + } + else { + v.dup(); + } + } + } } } diff --git a/idea/testData/codegen/incrementProperty.jet b/idea/testData/codegen/incrementProperty.jet new file mode 100644 index 00000000000..07f0a112195 --- /dev/null +++ b/idea/testData/codegen/incrementProperty.jet @@ -0,0 +1,14 @@ +class Slot() { + var vitality: Int = 10000 + + fun increaseVitality(delta: Int) { + vitality += delta + if (vitality > 65535) vitality = 65535; + } +} + +fun box(): String { + val s = Slot() + s.increaseVitality(1000) + return if (s.vitality == 11000) "OK" else "fail" +} diff --git a/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java b/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java index 6b4d827967f..35825719213 100644 --- a/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java @@ -414,4 +414,8 @@ public class NamespaceGenTest extends CodegenTestCase { final Method main = generateFunction(); main.invoke(null); // must not fail } + + public void testIncrementProperty() throws Exception { + blackBoxFile("incrementProperty.jet"); + } }