aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java22
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java26
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))