diff options
Diffstat (limited to 'src/main/java/org')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java | 22 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | 26 |
2 files changed, 24 insertions, 24 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java b/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java index 2c7b68e..1ffdd95 100644 --- a/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java +++ b/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java @@ -1,8 +1,6 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; -import org.zwobble.couscous.values.BooleanValue; -import org.zwobble.couscous.values.IntegerValue; import java.util.function.Function; @@ -28,26 +26,6 @@ public class TypeCoercionNode implements ExpressionNode { return type; } - public boolean isIntegerBox() { - return expression.getType().equals(IntegerValue.REF) && - !type.equals(IntegerValue.REF); - } - - public boolean isIntegerUnbox() { - return !expression.getType().equals(IntegerValue.REF) && - type.equals(IntegerValue.REF); - } - - public boolean isBooleanBox() { - return expression.getType().equals(BooleanValue.REF) && - !type.equals(BooleanValue.REF); - } - - public boolean isBooleanUnbox() { - return !expression.getType().equals(BooleanValue.REF) && - type.equals(BooleanValue.REF); - } - @Override public <T> T accept(ExpressionNodeMapper<T> visitor) { return visitor.visit(this); diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java index bee536a..910cba7 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -4,6 +4,8 @@ import org.zwobble.couscous.ast.*; import org.zwobble.couscous.ast.visitors.AssignableExpressionNodeVisitor; import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.interpreter.values.*; +import org.zwobble.couscous.values.BooleanValue; +import org.zwobble.couscous.values.IntegerValue; import java.util.List; import java.util.stream.Collectors; @@ -102,15 +104,35 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> { // TODO: check that the type coercion is valid // TODO: boxing booleans InterpreterValue value = eval(typeCoercion.getExpression()); - if (typeCoercion.isIntegerBox()) { + if (isIntegerBox(typeCoercion)) { return ((IntegerInterpreterValue)value).box(); - } else if (typeCoercion.isIntegerUnbox()) { + } else if (isIntegerUnbox(typeCoercion)) { return value.getField("value"); } else { return value; } } + private static boolean isIntegerBox(TypeCoercionNode typeCoercion) { + return typeCoercion.getExpression().getType().equals(IntegerValue.REF) && + !typeCoercion.getType().equals(IntegerValue.REF); + } + + private static boolean isIntegerUnbox(TypeCoercionNode typeCoercion) { + return !typeCoercion.getExpression().getType().equals(IntegerValue.REF) && + typeCoercion.getType().equals(IntegerValue.REF); + } + + private static boolean isBooleanBox(TypeCoercionNode typeCoercion) { + return typeCoercion.getExpression().getType().equals(BooleanValue.REF) && + !typeCoercion.getType().equals(BooleanValue.REF); + } + + private static boolean isBooleanUnbox(TypeCoercionNode typeCoercion) { + return !typeCoercion.getExpression().getType().equals(BooleanValue.REF) && + typeCoercion.getType().equals(BooleanValue.REF); + } + private List<InterpreterValue> evalArguments(List<? extends ExpressionNode> arguments) { return arguments.stream() .map(argument -> eval(argument)) |
