From 20dc1e124d606cf4298d5112b6d3c4f6c74e9b68 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 9 Mar 2016 18:11:17 +0000 Subject: Introduce Type interface --- src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java') 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 { public static InterpreterValue eval(Environment environment, ExpressionNode expression) { return new Evaluator(environment).eval(expression); @@ -93,7 +96,7 @@ public class Evaluator implements ExpressionNodeMapper { @Override public InterpreterValue visit(ConstructorCallNode call) { - StaticReceiverValue clazz = environment.findClass(call.getType()); + StaticReceiverValue clazz = environment.findClass(erasure(call.getType())); List arguments = evalArguments(call.getArguments()); return clazz.callConstructor(environment, arguments); } @@ -127,7 +130,7 @@ public class Evaluator implements ExpressionNodeMapper { 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 { } @Override - public ReceiverValue visit(TypeName receiver) { + public ReceiverValue visit(ScalarType receiver) { return environment.findClass(receiver); } }); -- cgit v1.2.3