diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 5991d28f1f1..6b42a67e176 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -7,14 +7,11 @@
-
-
-
+
+
-
-
+
-
@@ -100,7 +97,7 @@
-
+
@@ -109,16 +106,43 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -127,7 +151,7 @@
-
+
@@ -136,7 +160,7 @@
-
+
@@ -153,33 +177,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -241,7 +238,7 @@
-
+
@@ -295,8 +292,6 @@
@@ -425,6 +422,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1040,7 +1055,7 @@
-
+
@@ -1053,7 +1068,6 @@
-
@@ -1078,6 +1092,7 @@
+
@@ -1087,27 +1102,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1145,14 +1139,14 @@
-
+
-
+
@@ -1173,30 +1167,51 @@
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translator/src/org/jetbrains/k2js/translate/UnaryOperationTranslator.java b/translator/src/org/jetbrains/k2js/translate/UnaryOperationTranslator.java
index ccfa13639c0..29a0b954858 100644
--- a/translator/src/org/jetbrains/k2js/translate/UnaryOperationTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/UnaryOperationTranslator.java
@@ -7,6 +7,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lexer.JetToken;
+import org.jetbrains.jet.lexer.JetTokens;
import java.util.Arrays;
@@ -145,7 +146,7 @@ public final class UnaryOperationTranslator extends OperationTranslator {
AstUtil.setQualifier(operationReference, receiver);
return AstUtil.newInvocation(operationReference);
}
- return new JsPrefixOperation(OperatorTable.getUnaryOperator(getOperationToken()), receiver);
+ return unaryAsBinary(getOperationToken(), receiver);
}
@NotNull
@@ -177,4 +178,15 @@ public final class UnaryOperationTranslator extends OperationTranslator {
assert elementType instanceof JetToken : "Unary expression should have IElementType of type JetToken";
return (JetToken) elementType;
}
+
+ public JsBinaryOperation unaryAsBinary(@NotNull JetToken token, @NotNull JsExpression expression) {
+ JsNumberLiteral oneLiteral = translationContext().program().getNumberLiteral(1);
+ if (token.equals(JetTokens.PLUSPLUS)) {
+ return new JsBinaryOperation(JsBinaryOperator.ADD, expression, oneLiteral);
+ }
+ if (token.equals(JetTokens.MINUSMINUS)) {
+ return new JsBinaryOperation(JsBinaryOperator.SUB, expression, oneLiteral);
+ }
+ throw new AssertionError("This method should be called only for increment and decrement operators");
+ }
}
diff --git a/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java b/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java
index 217c25e0bbd..e78656b5a9b 100644
--- a/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java
+++ b/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java
@@ -53,4 +53,9 @@ public class OperatorOverloadingTest extends TranslationTest {
public void unaryOnIntProperty() throws Exception {
testFooBoxIsTrue("unaryOnIntProperty.kt");
}
+
+ @Test
+ public void unaryOnIntPropertyAsStatement() throws Exception {
+ testFooBoxIsTrue("unaryOnIntProperty2.kt");
+ }
}
diff --git a/translator/testFiles/operatorOverloading/cases/unaryOnIntProperty2.kt b/translator/testFiles/operatorOverloading/cases/unaryOnIntProperty2.kt
new file mode 100644
index 00000000000..385b0789220
--- /dev/null
+++ b/translator/testFiles/operatorOverloading/cases/unaryOnIntProperty2.kt
@@ -0,0 +1,15 @@
+namespace foo
+
+class MyInt(i : Int) {
+ var b = i
+ fun inc() : MyInt {
+ b++;
+ return this;
+ }
+}
+
+fun box() : Boolean {
+ var t = MyInt(0)
+ t++;
+ return (t.b == 1)
+}
\ No newline at end of file