diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-03-09 18:11:17 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-03-09 18:11:17 +0000 |
| commit | 20dc1e124d606cf4298d5112b6d3c4f6c74e9b68 (patch) | |
| tree | 47914e8b0356b2f40e3723eae650d3bb6f100dd4 /src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | |
| parent | 8ac6cb16b727b5e3d28ab89fee1d169a4f74d9a1 (diff) | |
Introduce Type interface
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java index 1d88c6b..37038ab 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -1,6 +1,7 @@ package org.zwobble.couscous.interpreter; import org.zwobble.couscous.ast.*; +import org.zwobble.couscous.ast.types.ScalarType; import org.zwobble.couscous.ast.visitors.AssignableExpressionNodeVisitor; import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.interpreter.errors.ConditionMustBeBoolean; @@ -12,6 +13,8 @@ import org.zwobble.couscous.values.IntegerValue; import java.util.List; import java.util.stream.Collectors; +import static org.zwobble.couscous.ast.types.Types.erasure; + public class Evaluator implements ExpressionNodeMapper<InterpreterValue> { public static InterpreterValue eval(Environment environment, ExpressionNode expression) { return new Evaluator(environment).eval(expression); @@ -93,7 +96,7 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> { @Override public InterpreterValue visit(ConstructorCallNode call) { - StaticReceiverValue clazz = environment.findClass(call.getType()); + StaticReceiverValue clazz = environment.findClass(erasure(call.getType())); List<InterpreterValue> arguments = evalArguments(call.getArguments()); return clazz.callConstructor(environment, arguments); } @@ -127,7 +130,7 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> { public InterpreterValue visit(CastNode cast) { InterpreterValue value = eval(cast.getExpression()); if (!InterpreterTypes.isSubType(cast.getType(), value.getType())) { - throw new InvalidCast(cast.getType(), value.getType().getName()); + throw new InvalidCast(cast.getType(), value.getType().getType()); } return value; } @@ -166,7 +169,7 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> { } @Override - public ReceiverValue visit(TypeName receiver) { + public ReceiverValue visit(ScalarType receiver) { return environment.findClass(receiver); } }); |
