diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-06 08:16:52 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-06 08:18:18 +0000 |
| commit | e4229671c4cf6db860fc6cf68bcfb8fdd69fdcb8 (patch) | |
| tree | b8f61f97f0e9af47f90f49e0debaf061d07f9229 /src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java | |
| parent | 5eafcf8cb10546916d4b38c3208ebfdfafff93e4 (diff) | |
Support method overloading in interpreter
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java | 16 |
1 files changed, 12 insertions, 4 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 3bcb41a..be58d56 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java @@ -4,8 +4,7 @@ import java.util.Optional; import java.util.function.BiFunction; import org.zwobble.couscous.ast.Operator; -import org.zwobble.couscous.interpreter.Environment; -import org.zwobble.couscous.interpreter.NoSuchField; +import org.zwobble.couscous.interpreter.*; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.ObjectValues; import org.zwobble.couscous.values.PrimitiveValue; @@ -29,11 +28,16 @@ public final class IntegerInterpreterValue implements InterpreterValue { (environment, arguments) -> { InterpreterValue right = arguments.getPositionalArguments().get(0); if (right instanceof IntegerInterpreterValue) { - return new BooleanInterpreterValue(arguments.getReceiver().getValue() == ((IntegerInterpreterValue)right).getValue()); + return integerEquals(arguments, ((IntegerInterpreterValue)right)); } else { return new BooleanInterpreterValue(false); } }) + .method(Operator.EQUALS.getMethodName(), asList(IntegerValue.REF), + (environment, arguments) -> { + IntegerInterpreterValue right = (IntegerInterpreterValue)arguments.getPositionalArguments().get(0); + return integerEquals(arguments, right); + }) .method(Operator.NOT_EQUALS.getMethodName(), asList(IntegerValue.REF), infixReturningBoolean((left, right) -> !left.equals(right))) .method(Operator.GREATER_THAN.getMethodName(), asList(IntegerValue.REF), @@ -45,7 +49,11 @@ public final class IntegerInterpreterValue implements InterpreterValue { .method(Operator.LESS_THAN_OR_EQUAL.getMethodName(), asList(IntegerValue.REF), infixReturningBoolean((left, right) -> left <= right)) .build(); - + + private static BooleanInterpreterValue integerEquals(MethodCallArguments<IntegerInterpreterValue> arguments, IntegerInterpreterValue right) { + return new BooleanInterpreterValue(arguments.getReceiver().getValue() == right.getValue()); + } + private static BiFunction<Environment, MethodCallArguments<IntegerInterpreterValue>, InterpreterValue> infixReturningInteger(BiFunction<Integer, Integer, Integer> func) { |
