>>> supported in polyadic and binary expressions

This commit is contained in:
Sergey Ignatov
2011-11-07 14:16:21 +04:00
parent 43013a6dc8
commit b4d5ff5ff8
4 changed files with 27 additions and 41 deletions
@@ -47,24 +47,13 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor {
final IElementType tokenType = expression.getOperationSign().getTokenType(); final IElementType tokenType = expression.getOperationSign().getTokenType();
if (tokenType == JavaTokenType.GTGTGTEQ) { // because it's transform to the method call
myResult = new AssignmentExpression(
expressionToExpression(expression.getLExpression()),
new DummyMethodCallExpression(
expressionToExpression(expression.getLExpression()),
"cyclicShiftRight",
expressionToExpression(expression.getRExpression())
),
"="
);
} else {
String secondOp = ""; String secondOp = "";
if (tokenType == JavaTokenType.GTGTEQ) secondOp = "shr"; if (tokenType == JavaTokenType.GTGTEQ) secondOp = "shr";
if (tokenType == JavaTokenType.LTLTEQ) secondOp = "shl"; if (tokenType == JavaTokenType.LTLTEQ) secondOp = "shl";
if (tokenType == JavaTokenType.XOREQ) secondOp = "xor"; if (tokenType == JavaTokenType.XOREQ) secondOp = "xor";
if (tokenType == JavaTokenType.ANDEQ) secondOp = "and"; if (tokenType == JavaTokenType.ANDEQ) secondOp = "and";
if (tokenType == JavaTokenType.OREQ) secondOp = "or"; if (tokenType == JavaTokenType.OREQ) secondOp = "or";
if (tokenType == JavaTokenType.GTGTGTEQ) secondOp = "cyclicShiftRight";
if (!secondOp.equals("")) // if not Kotlin operators if (!secondOp.equals("")) // if not Kotlin operators
myResult = new AssignmentExpression( myResult = new AssignmentExpression(
@@ -83,7 +72,6 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor {
expression.getOperationSign().getText() // TODO expression.getOperationSign().getText() // TODO
); );
} }
}
@NotNull @NotNull
private String getOperatorString(@NotNull IElementType tokenType) { private String getOperatorString(@NotNull IElementType tokenType) {
@@ -97,7 +85,7 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor {
if (tokenType == JavaTokenType.XOR) return "xor"; if (tokenType == JavaTokenType.XOR) return "xor";
if (tokenType == JavaTokenType.AND) return "and"; if (tokenType == JavaTokenType.AND) return "and";
if (tokenType == JavaTokenType.OR) return "or"; 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.GT) return ">";
if (tokenType == JavaTokenType.LT) return "<"; if (tokenType == JavaTokenType.LT) return "<";
if (tokenType == JavaTokenType.GE) return ">="; if (tokenType == JavaTokenType.GE) return ">=";
@@ -266,13 +254,9 @@ public class ExpressionVisitor extends StatementVisitor implements Visitor {
@Override @Override
public void visitPolyadicExpression(PsiPolyadicExpression expression) { public void visitPolyadicExpression(PsiPolyadicExpression expression) {
super.visitPolyadicExpression(expression); super.visitPolyadicExpression(expression);
if (expression.getOperationTokenType() != JavaTokenType.GTGTGT)
myResult = new PolyadicExpression( myResult = new PolyadicExpression(
expressionsToExpressionList(expression.getOperands()), expressionsToExpressionList(expression.getOperands()),
getOperatorString(expression.getOperationTokenType()) getOperatorString(expression.getOperationTokenType())
); );
else {
// TODO: support GTGTGT
}
}
} }
}
@@ -1 +1 @@
x = x.cyclicShiftRight(2) x = (x cyclicShiftRight 2)
@@ -0,0 +1 @@
1 >>> 2 >>> 3
@@ -0,0 +1 @@
(1 cyclicShiftRight 2 cyclicShiftRight 3)