aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-10 15:34:04 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-10 15:34:04 +0000
commitea9515d7e948c21aea648a245371e3cb04dbdaea (patch)
tree95fa7d17870abb78ddb51f51bb79824cc0bdcfe3 /src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java
parentbea8f44c058369bd175fb6b9e8da5b456669854d (diff)
Add support for boolean and/or
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java
index c94b21d..032caff 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java
@@ -1,11 +1,15 @@
package org.zwobble.couscous.interpreter.values;
-import java.util.Collections;
-import java.util.Optional;
+import org.zwobble.couscous.ast.Operator;
import org.zwobble.couscous.interpreter.NoSuchField;
+import org.zwobble.couscous.values.BooleanValue;
import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.PrimitiveValues;
+import java.util.Optional;
+
+import static org.zwobble.couscous.util.ExtraLists.list;
+
public final class BooleanInterpreterValue implements InterpreterValue {
public static final BooleanInterpreterValue TRUE = new BooleanInterpreterValue(true);
public static final BooleanInterpreterValue FALSE = new BooleanInterpreterValue(false);
@@ -16,9 +20,19 @@ public final class BooleanInterpreterValue implements InterpreterValue {
private static final ConcreteType TYPE = ConcreteType.builder(BooleanInterpreterValue.class, "boolean")
- .method("negate", Collections.emptyList(), (environment, arguments) ->
+ .method("negate", list(), (environment, arguments) ->
of(!arguments.getReceiver().getValue()))
-
+
+ .method(Operator.BOOLEAN_AND.getMethodName(), list(BooleanValue.REF), (environment, arguments) -> {
+ BooleanInterpreterValue right = (BooleanInterpreterValue)arguments.get(0);
+ return of(arguments.getReceiver().getValue() && right.getValue());
+ })
+
+ .method(Operator.BOOLEAN_OR.getMethodName(), list(BooleanValue.REF), (environment, arguments) -> {
+ BooleanInterpreterValue right = (BooleanInterpreterValue)arguments.get(0);
+ return of(arguments.getReceiver().getValue() || right.getValue());
+ })
+
.build();
private final boolean value;