diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-10 15:34:04 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-10 15:34:04 +0000 |
| commit | ea9515d7e948c21aea648a245371e3cb04dbdaea (patch) | |
| tree | 95fa7d17870abb78ddb51f51bb79824cc0bdcfe3 /src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java | |
| parent | bea8f44c058369bd175fb6b9e8da5b456669854d (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.java | 22 |
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; |
