From 8cae5c99631b31ddc3297ed99b3244b8d8b8cc9f Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Thu, 24 Nov 2011 17:25:36 +0400 Subject: [PATCH] Added test for unary operation on int properties. --- .idea/workspace.xml | 175 ++++++++++-------- .../translate/UnaryOperationTranslator.java | 14 +- .../k2js/test/OperatorOverloadingTest.java | 5 + .../cases/unaryOnIntProperty2.kt | 15 ++ 4 files changed, 128 insertions(+), 81 deletions(-) create mode 100644 translator/testFiles/operatorOverloading/cases/unaryOnIntProperty2.kt 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 @@ @@ -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