aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/values
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-06 22:11:12 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-06 22:11:12 +0000
commitb81b68e59c6d34ccd109ec9aa517c4ead3c56ebd (patch)
tree09a98bf42ed1be289a6501241322eb6d438f1e5a /src/main/java/org/zwobble/couscous/interpreter/values
parent45ae597f7751b7e9d12ef00cf394a9cf0155176c (diff)
Implement overloading by argument type in Python backend
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java23
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java6
2 files changed, 23 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java
index 3ffa244..9bf6a51 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java
@@ -8,6 +8,16 @@ import org.zwobble.couscous.values.StringValue;
import static java.util.Arrays.asList;
public class BoxedIntegerInterpreterValue {
+ public static ObjectInterpreterValue of(int value) {
+ return of(new IntegerInterpreterValue(value));
+ }
+
+ public static ObjectInterpreterValue of(IntegerInterpreterValue value) {
+ ObjectInterpreterValue obj = new ObjectInterpreterValue(TYPE);
+ obj.setField("value", value);
+ return obj;
+ }
+
public static final ConcreteType TYPE = ConcreteType.classBuilder("java.lang.Integer")
.field("value", IntegerValue.REF)
@@ -17,6 +27,12 @@ public class BoxedIntegerInterpreterValue {
return new IntegerInterpreterValue(Integer.parseInt(value.getValue()));
})
+ .staticMethod("valueOf", asList(IntegerValue.REF),
+ (environment, arguments) -> {
+ IntegerInterpreterValue value = (IntegerInterpreterValue)arguments.get(0);
+ return of(value);
+ })
+
.method(Operator.EQUALS.getMethodName(), asList(ObjectValues.OBJECT),
(environment, arguments) -> {
InterpreterValue right = arguments.getPositionalArguments().get(0);
@@ -28,5 +44,12 @@ public class BoxedIntegerInterpreterValue {
return new BooleanInterpreterValue(false);
}
})
+
+ .method("toString", asList(),
+ (environment, arguments) -> {
+ IntegerInterpreterValue value = (IntegerInterpreterValue)arguments.getReceiver().getField("value");
+ return new StringInterpreterValue(Integer.toString(value.getValue()));
+ })
+
.build();
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
index be58d56..3e80a21 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
@@ -106,12 +106,6 @@ public final class IntegerInterpreterValue implements InterpreterValue {
return this.value;
}
- public InterpreterValue box() {
- ObjectInterpreterValue box = new ObjectInterpreterValue(BoxedIntegerInterpreterValue.TYPE);
- box.setField("value", this);
- return box;
- }
-
@java.lang.Override
public boolean equals(final java.lang.Object o) {
if (o == this) return true;