From b4d5ff5ff8bb7a7fc9b9b586e347b466e252d2f9 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Mon, 7 Nov 2011 14:16:21 +0400 Subject: [PATCH] >>> supported in polyadic and binary expressions --- .../jet/j2k/visitors/ExpressionVisitor.java | 64 +++++++------------ .../expression/unsignedRightShift.kt | 2 +- .../expression/unassignedShiftRight.jav | 1 + .../expression/unassignedShiftRight.kt | 1 + 4 files changed, 27 insertions(+), 41 deletions(-) create mode 100644 testData/ast/polyadicExpression/expression/unassignedShiftRight.jav create mode 100644 testData/ast/polyadicExpression/expression/unassignedShiftRight.kt diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index 4483b754779..522f06a5398 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -47,42 +47,30 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { final IElementType tokenType = expression.getOperationSign().getTokenType(); - if (tokenType == JavaTokenType.GTGTGTEQ) { // because it's transform to the method call + String secondOp = ""; + if (tokenType == JavaTokenType.GTGTEQ) secondOp = "shr"; + if (tokenType == JavaTokenType.LTLTEQ) secondOp = "shl"; + if (tokenType == JavaTokenType.XOREQ) secondOp = "xor"; + if (tokenType == JavaTokenType.ANDEQ) secondOp = "and"; + if (tokenType == JavaTokenType.OREQ) secondOp = "or"; + if (tokenType == JavaTokenType.GTGTGTEQ) secondOp = "cyclicShiftRight"; + + if (!secondOp.equals("")) // if not Kotlin operators myResult = new AssignmentExpression( expressionToExpression(expression.getLExpression()), - new DummyMethodCallExpression( + new BinaryExpression( expressionToExpression(expression.getLExpression()), - "cyclicShiftRight", - expressionToExpression(expression.getRExpression()) + expressionToExpression(expression.getRExpression()), + secondOp ), "=" ); - } else { - - String secondOp = ""; - if (tokenType == JavaTokenType.GTGTEQ) secondOp = "shr"; - if (tokenType == JavaTokenType.LTLTEQ) secondOp = "shl"; - if (tokenType == JavaTokenType.XOREQ) secondOp = "xor"; - if (tokenType == JavaTokenType.ANDEQ) secondOp = "and"; - if (tokenType == JavaTokenType.OREQ) secondOp = "or"; - - if (!secondOp.equals("")) // if not Kotlin operators - myResult = new AssignmentExpression( - expressionToExpression(expression.getLExpression()), - new BinaryExpression( - expressionToExpression(expression.getLExpression()), - expressionToExpression(expression.getRExpression()), - secondOp - ), - "=" - ); - else - myResult = new AssignmentExpression( - expressionToExpression(expression.getLExpression()), - expressionToExpression(expression.getRExpression()), - expression.getOperationSign().getText() // TODO - ); - } + else + myResult = new AssignmentExpression( + expressionToExpression(expression.getLExpression()), + expressionToExpression(expression.getRExpression()), + expression.getOperationSign().getText() // TODO + ); } @NotNull @@ -97,7 +85,7 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { if (tokenType == JavaTokenType.XOR) return "xor"; if (tokenType == JavaTokenType.AND) return "and"; if (tokenType == JavaTokenType.OR) return "or"; - if (tokenType == JavaTokenType.OR) return "or"; + if (tokenType == JavaTokenType.GTGTGT) return "cyclicShiftRight"; if (tokenType == JavaTokenType.GT) return ">"; if (tokenType == JavaTokenType.LT) return "<"; if (tokenType == JavaTokenType.GE) return ">="; @@ -266,13 +254,9 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor { @Override public void visitPolyadicExpression(PsiPolyadicExpression expression) { super.visitPolyadicExpression(expression); - if (expression.getOperationTokenType() != JavaTokenType.GTGTGT) - myResult = new PolyadicExpression( - expressionsToExpressionList(expression.getOperands()), - getOperatorString(expression.getOperationTokenType()) - ); - else { - // TODO: support GTGTGT - } - } + myResult = new PolyadicExpression( + expressionsToExpressionList(expression.getOperands()), + getOperatorString(expression.getOperationTokenType()) + ); } +} diff --git a/testData/ast/assignmentExpression/expression/unsignedRightShift.kt b/testData/ast/assignmentExpression/expression/unsignedRightShift.kt index ce853a663b7..bf15c8f56c5 100644 --- a/testData/ast/assignmentExpression/expression/unsignedRightShift.kt +++ b/testData/ast/assignmentExpression/expression/unsignedRightShift.kt @@ -1 +1 @@ -x = x.cyclicShiftRight(2) \ No newline at end of file +x = (x cyclicShiftRight 2) \ No newline at end of file diff --git a/testData/ast/polyadicExpression/expression/unassignedShiftRight.jav b/testData/ast/polyadicExpression/expression/unassignedShiftRight.jav new file mode 100644 index 00000000000..c9745ec8062 --- /dev/null +++ b/testData/ast/polyadicExpression/expression/unassignedShiftRight.jav @@ -0,0 +1 @@ +1 >>> 2 >>> 3 \ No newline at end of file diff --git a/testData/ast/polyadicExpression/expression/unassignedShiftRight.kt b/testData/ast/polyadicExpression/expression/unassignedShiftRight.kt new file mode 100644 index 00000000000..789248920ea --- /dev/null +++ b/testData/ast/polyadicExpression/expression/unassignedShiftRight.kt @@ -0,0 +1 @@ +(1 cyclicShiftRight 2 cyclicShiftRight 3) \ No newline at end of file