diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-24 16:13:33 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-24 16:13:33 +0000 |
| commit | 5fe2fa7934197d73bc1f6a3e361149923279b35a (patch) | |
| tree | 3850ffc02c864875084c174e26466a052ccc6368 /src/main/java/org/zwobble/couscous/ast | |
| parent | f2ed6b591da6149319c149d1c78694bfa9641a73 (diff) | |
Implement negation in C# backend
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/ast/OperationNode.java | 4 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/ast/Operations.java | 7 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/ast/Operator.java | 39 |
3 files changed, 30 insertions, 20 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/OperationNode.java b/src/main/java/org/zwobble/couscous/ast/OperationNode.java index 0840044..6be841f 100644 --- a/src/main/java/org/zwobble/couscous/ast/OperationNode.java +++ b/src/main/java/org/zwobble/couscous/ast/OperationNode.java @@ -28,6 +28,10 @@ public class OperationNode implements ExpressionNode { type); } + public Operator getOperator() { + return operator; + } + public List<ExpressionNode> getArguments() { return arguments; } diff --git a/src/main/java/org/zwobble/couscous/ast/Operations.java b/src/main/java/org/zwobble/couscous/ast/Operations.java index 5af2f8b..0ae4923 100644 --- a/src/main/java/org/zwobble/couscous/ast/Operations.java +++ b/src/main/java/org/zwobble/couscous/ast/Operations.java @@ -5,9 +5,6 @@ import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.InternalCouscousValue; import org.zwobble.couscous.values.ObjectValues; -import java.util.Collections; - -import static org.zwobble.couscous.ast.MethodCallNode.methodCall; import static org.zwobble.couscous.ast.MethodCallNode.staticMethodCall; import static org.zwobble.couscous.ast.TypeCoercionNode.typeCoercion; import static org.zwobble.couscous.util.ExtraLists.list; @@ -19,7 +16,9 @@ public class Operations { public static ExpressionNode not(ExpressionNode value) { if (value.getType().equals(BooleanValue.REF)) { - return methodCall(value, "negate", Collections.emptyList(), BooleanValue.REF); + return OperationNode.operation( + Operator.BOOLEAN_NOT, list(value), + BooleanValue.REF); } else { throw new IllegalArgumentException("Can only negate booleans"); } diff --git a/src/main/java/org/zwobble/couscous/ast/Operator.java b/src/main/java/org/zwobble/couscous/ast/Operator.java index a215138..a51a01b 100644 --- a/src/main/java/org/zwobble/couscous/ast/Operator.java +++ b/src/main/java/org/zwobble/couscous/ast/Operator.java @@ -1,30 +1,37 @@ package org.zwobble.couscous.ast; public enum Operator { - BOOLEAN_AND("and", true), - BOOLEAN_OR("or", true), - - ADD("add", false), - SUBTRACT("subtract", false), - MULTIPLY("multiply", false), - DIVIDE("divide", false), - MOD("mod", false), - - EQUALS("equals", true), - NOT_EQUALS("notEquals", true), - GREATER_THAN("greaterThan", true), - GREATER_THAN_OR_EQUAL("greaterThanOrEqual", true), - LESS_THAN("lessThan", true), - LESS_THAN_OR_EQUAL("lessThanOrEqual", true); + BOOLEAN_AND("&&", "and", true), + BOOLEAN_OR("||", "or", true), + BOOLEAN_NOT("!", "negate", true), + ADD("+", "add", false), + SUBTRACT("-", "subtract", false), + MULTIPLY("*", "multiply", false), + DIVIDE("/", "divide", false), + MOD("%", "mod", false), + + EQUALS("==", "equals", true), + NOT_EQUALS("!=", "notEquals", true), + GREATER_THAN(">", "greaterThan", true), + GREATER_THAN_OR_EQUAL(">=", "greaterThanOrEqual", true), + LESS_THAN("<", "lessThan", true), + LESS_THAN_OR_EQUAL("<=", "lessThanOrEqual", true); + + private final String symbol; private final String methodName; private final boolean isBoolean; - Operator(String methodName, boolean isBoolean) { + Operator(String symbol, String methodName, boolean isBoolean) { + this.symbol = symbol; this.methodName = methodName; this.isBoolean = isBoolean; } + public String getSymbol() { + return symbol; + } + public String getMethodName() { return methodName; } |
