aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-01 11:25:15 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-01 11:25:15 +0000
commit0e48fe6a73c4b663ad9e291cc06c2dc6663d9142 (patch)
treeb19a909a670d199df9192f5d9c9a9140dd871334 /src/main/java/org/zwobble
parent4bf64824e44e5101cd54bbe99d22bd8cc38adf24 (diff)
Support integer equality with objects
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java12
1 files changed, 10 insertions, 2 deletions
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 b050442..da28bc5 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
@@ -7,6 +7,7 @@ import org.zwobble.couscous.ast.Operator;
import org.zwobble.couscous.interpreter.Environment;
import org.zwobble.couscous.interpreter.NoSuchField;
import org.zwobble.couscous.values.IntegerValue;
+import org.zwobble.couscous.values.ObjectValues;
import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.PrimitiveValues;
@@ -24,8 +25,15 @@ public final class IntegerInterpreterValue implements InterpreterValue {
infixReturningInteger((left, right) -> left / right))
.method(Operator.MOD.getMethodName(), asList(IntegerValue.REF),
infixReturningInteger((left, right) -> left % right))
- .method(Operator.EQUALS.getMethodName(), asList(IntegerValue.REF),
- infixReturningBoolean(Integer::equals))
+ .method(Operator.EQUALS.getMethodName(), asList(ObjectValues.OBJECT),
+ (environment, arguments) -> {
+ InterpreterValue right = arguments.getPositionalArguments().get(0);
+ if (right instanceof IntegerInterpreterValue) {
+ return new BooleanInterpreterValue(arguments.getReceiver().getValue() == ((IntegerInterpreterValue)right).getValue());
+ } else {
+ return new BooleanInterpreterValue(false);
+ }
+ })
.method(Operator.NOT_EQUALS.getMethodName(), asList(IntegerValue.REF),
infixReturningBoolean((left, right) -> !left.equals(right)))
.method(Operator.GREATER_THAN.getMethodName(), asList(IntegerValue.REF),