aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/frontends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-31 18:56:24 +0000
committerMichael Williamson <mike@zwobble.org>2015-10-31 18:56:24 +0000
commitd8e0031c6d73ba960505601d8e4b3c1933e584ea (patch)
treec2456a223423d297812ce40089c363b5f96dfabf /src/main/java/org/zwobble/couscous/frontends
parent493d00f3ccf6af2d4ccb4421a82c143d96945178 (diff)
Support reading of unboxing
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
index 99d0268..a47c4e9 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -168,8 +168,12 @@ public class JavaReader {
ExpressionNode couscousExpression = readExpressionWithoutBoxing(expression);
if (isIntegerBox(targetType, couscousExpression)) {
return StaticMethodCallNode.boxInt(couscousExpression);
+ } else if (isIntegerUnbox(targetType, couscousExpression)) {
+ return StaticMethodCallNode.unboxInt(couscousExpression);
} else if (isBooleanBox(targetType, couscousExpression)) {
return StaticMethodCallNode.boxBoolean(couscousExpression);
+ } else if (isBooleanUnbox(targetType, couscousExpression)) {
+ return StaticMethodCallNode.unboxBoolean(couscousExpression);
} else {
return couscousExpression;
}
@@ -180,11 +184,21 @@ public class JavaReader {
!targetType.equals(IntegerValue.REF);
}
+ private static boolean isIntegerUnbox(TypeName targetType, ExpressionNode expression) {
+ return !expression.getType().equals(IntegerValue.REF) &&
+ targetType.equals(IntegerValue.REF);
+ }
+
private static boolean isBooleanBox(TypeName targetType, ExpressionNode expression) {
return expression.getType().equals(BooleanValue.REF) &&
!targetType.equals(BooleanValue.REF);
}
+ private static boolean isBooleanUnbox(TypeName targetType, ExpressionNode expression) {
+ return !expression.getType().equals(BooleanValue.REF) &&
+ targetType.equals(BooleanValue.REF);
+ }
+
private static ExpressionNode readExpressionWithoutBoxing(Expression expression) {
switch (expression.getNodeType()) {
case ASTNode.BOOLEAN_LITERAL: