diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-10 14:14:47 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-10 14:14:47 +0100 |
| commit | 854993655d4318d565226413645268f0885df0cb (patch) | |
| tree | 741fd891c89b662ed48b03f55697804035812829 /src/main/java/org/zwobble/couscous/interpreter | |
| parent | 1f41544a60c12b34eeff50f4629462534b4bb725 (diff) | |
Distinguish boxed and unboxed primitives
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter')
3 files changed, 30 insertions, 9 deletions
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 <T> ConcreteType.Builder<T> builder(Class<T> interpreterValueType, TypeName reference) { + return new Builder<>(interpreterValueType, reference); + } + + public static <T> ConcreteType.Builder<T> builder(Class<T> interpreterValueType, String name) { + return builder(interpreterValueType, TypeName.of(name)); + } + + public static ConcreteType.Builder<ObjectInterpreterValue> classBuilder(String name) { + return builder(ObjectInterpreterValue.class, name); + } + public static class Builder<T> { private final ImmutableMap.Builder<String, MethodValue> methods = ImmutableMap.builder(); @@ -159,14 +171,6 @@ public class ConcreteType { return Optional.ofNullable(fields.get(fieldName)); } - public static <T> ConcreteType.Builder<T> builder(Class<T> interpreterValueType, TypeName reference) { - return new Builder<>(interpreterValueType, reference); - } - - public static <T> ConcreteType.Builder<T> builder(Class<T> interpreterValueType, String name) { - return builder(interpreterValueType, TypeName.of(name)); - } - public InterpreterValue callMethod(Environment environment, InterpreterValue receiver, String methodName, List<InterpreterValue> arguments) { val method = findMethod(methods, methodName, arguments); return method.apply( |
