From ea9515d7e948c21aea648a245371e3cb04dbdaea Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 10 Jan 2016 15:34:04 +0000 Subject: Add support for boolean and/or --- .../values/BooleanInterpreterValue.java | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java') 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; -- cgit v1.2.3