From 854993655d4318d565226413645268f0885df0cb Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 10 Oct 2015 14:14:47 +0100 Subject: Distinguish boxed and unboxed primitives --- .../zwobble/couscous/interpreter/Environment.java | 1 - .../values/BoxedIntegerInterpreterValue.java | 18 ++++++++++++++++++ .../couscous/interpreter/values/ConcreteType.java | 20 ++++++++++++-------- 3 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java (limited to 'src/main/java/org/zwobble/couscous/interpreter') diff --git a/src/main/java/org/zwobble/couscous/interpreter/Environment.java b/src/main/java/org/zwobble/couscous/interpreter/Environment.java index d91664d..111e18d 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Environment.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Environment.java @@ -56,7 +56,6 @@ public class Environment { } public ConcreteType findClass(TypeName className) { - // TODO: handle missing classes return project.findClass(className); } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java new file mode 100644 index 0000000..a6ba5e1 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java @@ -0,0 +1,18 @@ +package org.zwobble.couscous.interpreter.values; + +import org.zwobble.couscous.values.StringValue; + +import static java.util.Arrays.asList; + +import lombok.val; + +public class BoxedIntegerInterpreterValue { + public static final ConcreteType TYPE = ConcreteType.classBuilder("java.lang.Integer") + .staticMethod("parseInt", asList(StringValue.REF), + (environment, arguments) -> { + val value = (StringInterpreterValue)arguments.get(0); + return new IntegerInterpreterValue(Integer.parseInt(value.getValue())); + }) + + .build(); +} diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java b/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java index 6332b89..2c64031 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java @@ -25,6 +25,18 @@ import static java.util.stream.Collectors.toMap; import lombok.val; public class ConcreteType { + public static ConcreteType.Builder builder(Class interpreterValueType, TypeName reference) { + return new Builder<>(interpreterValueType, reference); + } + + public static ConcreteType.Builder builder(Class interpreterValueType, String name) { + return builder(interpreterValueType, TypeName.of(name)); + } + + public static ConcreteType.Builder classBuilder(String name) { + return builder(ObjectInterpreterValue.class, name); + } + public static class Builder { private final ImmutableMap.Builder methods = ImmutableMap.builder(); @@ -159,14 +171,6 @@ public class ConcreteType { return Optional.ofNullable(fields.get(fieldName)); } - public static ConcreteType.Builder builder(Class interpreterValueType, TypeName reference) { - return new Builder<>(interpreterValueType, reference); - } - - public static ConcreteType.Builder builder(Class interpreterValueType, String name) { - return builder(interpreterValueType, TypeName.of(name)); - } - public InterpreterValue callMethod(Environment environment, InterpreterValue receiver, String methodName, List arguments) { val method = findMethod(methods, methodName, arguments); return method.apply( -- cgit v1.2.3