From 65371fd16808d9c8f34d0e0cd2ba030bcc6a7128 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 17 Jun 2016 21:18:09 +0100 Subject: Read Java instanceof expressions --- .../zwobble/couscous/frontends/java/JavaExpressionReader.java | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/main/java/org/zwobble/couscous/frontends') diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java index e6b3822..370719e 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java @@ -19,6 +19,7 @@ import static org.zwobble.couscous.ast.InstanceReceiver.instanceReceiver; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.MethodCallNode.methodCall; import static org.zwobble.couscous.ast.OperationNode.operation; +import static org.zwobble.couscous.ast.Operations.instanceOf; import static org.zwobble.couscous.ast.Operations.not; import static org.zwobble.couscous.ast.StaticReceiver.staticReceiver; import static org.zwobble.couscous.ast.ThisReferenceNode.thisReference; @@ -109,6 +110,9 @@ public class JavaExpressionReader { case ASTNode.INFIX_EXPRESSION: return readInfixExpression((InfixExpression)expression); + case ASTNode.INSTANCEOF_EXPRESSION: + return readInstanceofExpression((InstanceofExpression)expression); + case ASTNode.PREFIX_EXPRESSION: return readPrefixExpression((PrefixExpression)expression); @@ -376,6 +380,12 @@ public class JavaExpressionReader { return type.equals(Types.BOOLEAN) || type.equals(Types.INT); } + private ExpressionNode readInstanceofExpression(InstanceofExpression expression) { + return instanceOf( + readExpressionWithoutBoxing(expression.getLeftOperand()), + (ScalarType)typeOf(expression.getRightOperand())); + } + private ExpressionNode readPrefixExpression(PrefixExpression expression) { if (expression.getOperator() == PrefixExpression.Operator.NOT) { return not(readExpression(Types.BOOLEAN, expression.getOperand())); -- cgit v1.2.3