diff options
Diffstat (limited to 'src')
7 files changed, 40 insertions, 46 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/OperationNode.java b/src/main/java/org/zwobble/couscous/ast/OperationNode.java index 6be841f..06c739e 100644 --- a/src/main/java/org/zwobble/couscous/ast/OperationNode.java +++ b/src/main/java/org/zwobble/couscous/ast/OperationNode.java @@ -23,7 +23,7 @@ public class OperationNode implements ExpressionNode { public ExpressionNode desugar() { return MethodCallNode.methodCall( arguments.get(0), - operator.getMethodName(), + operator.getSymbol(), arguments.subList(1, arguments.size()), type); } diff --git a/src/main/java/org/zwobble/couscous/ast/Operator.java b/src/main/java/org/zwobble/couscous/ast/Operator.java index a51a01b..2a6ebfa 100644 --- a/src/main/java/org/zwobble/couscous/ast/Operator.java +++ b/src/main/java/org/zwobble/couscous/ast/Operator.java @@ -1,30 +1,28 @@ package org.zwobble.couscous.ast; public enum Operator { - 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); + BOOLEAN_AND("&&", true), + BOOLEAN_OR("||", true), + BOOLEAN_NOT("!", true), + + ADD("+", false), + SUBTRACT("-", false), + MULTIPLY("*", false), + DIVIDE("/", false), + MOD("%", false), + + EQUALS("==", true), + NOT_EQUALS("!=", true), + GREATER_THAN(">", true), + GREATER_THAN_OR_EQUAL(">=", true), + LESS_THAN("<", true), + LESS_THAN_OR_EQUAL("<=", true); private final String symbol; - private final String methodName; private final boolean isBoolean; - Operator(String symbol, String methodName, boolean isBoolean) { + Operator(String symbol, boolean isBoolean) { this.symbol = symbol; - this.methodName = methodName; this.isBoolean = isBoolean; } @@ -32,10 +30,6 @@ public enum Operator { return symbol; } - public String getMethodName() { - return methodName; - } - public boolean isBoolean() { return isBoolean; } diff --git a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java index 78624b0..b62048f 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java @@ -33,7 +33,7 @@ public class PrimitiveMethods { .put("substring", (receiver, arguments) -> pythonGetSlice(receiver, arguments)) - .put("add", (receiver, arguments) -> + .put(Operator.ADD.getSymbol(), (receiver, arguments) -> PythonBinaryOperation.pythonAdd(receiver, arguments.get(0))) .put("toLowerCase", (receiver, arguments) -> @@ -49,7 +49,7 @@ public class PrimitiveMethods { static { ImmutableMap.Builder<String, PrimitiveMethodGenerator> methods = ImmutableMap.builder(); - methods.put("negate", (receiver, arguments) -> + methods.put(Operator.BOOLEAN_NOT.getSymbol(), (receiver, arguments) -> PythonNotNode.pythonNot(receiver)); addOperation(methods, Operator.BOOLEAN_AND, PythonBinaryOperation::pythonAnd); @@ -70,11 +70,11 @@ public class PrimitiveMethods { addOperation(methods, Operator.SUBTRACT, PythonBinaryOperation::pythonSubtract); addOperation(methods, Operator.MULTIPLY, PythonBinaryOperation::pythonMultiply); - methods.put(Operator.DIVIDE.getMethodName(), (receiver, arguments) -> + methods.put(Operator.DIVIDE.getSymbol(), (receiver, arguments) -> pythonCall( internalReference("_div_round_to_zero"), list(receiver, arguments.get(0)))); - methods.put(Operator.MOD.getMethodName(), (receiver, arguments) -> + methods.put(Operator.MOD.getSymbol(), (receiver, arguments) -> pythonCall( internalReference("_mod_round_to_zero"), list(receiver, arguments.get(0)))); @@ -98,7 +98,7 @@ public class PrimitiveMethods { Operator operator, BiFunction<PythonExpressionNode, PythonExpressionNode, PythonExpressionNode> build) { - addOperation(methods, operator.getMethodName(), build); + addOperation(methods, operator.getSymbol(), build); } private static void addOperation( 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 023f684..bb60863 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java @@ -20,15 +20,15 @@ public final class BooleanInterpreterValue implements InterpreterValue { private static final ConcreteType TYPE = ConcreteType.builder(BooleanInterpreterValue.class, "boolean") - .method("negate", list(), (environment, arguments) -> + .method(Operator.BOOLEAN_NOT.getSymbol(), list(), (environment, arguments) -> of(!arguments.getReceiver().getValue())) - .method(Operator.BOOLEAN_AND.getMethodName(), list(BooleanValue.REF), (environment, arguments) -> { + .method(Operator.BOOLEAN_AND.getSymbol(), 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) -> { + .method(Operator.BOOLEAN_OR.getSymbol(), list(BooleanValue.REF), (environment, arguments) -> { BooleanInterpreterValue right = (BooleanInterpreterValue)arguments.get(0); return of(arguments.getReceiver().getValue() || right.getValue()); }) diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java index 228dbb7..2aa7024 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java @@ -1,6 +1,5 @@ package org.zwobble.couscous.interpreter.values; -import org.zwobble.couscous.ast.Operator; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.ObjectValues; import org.zwobble.couscous.values.StringValue; @@ -33,7 +32,7 @@ public class BoxedIntegerInterpreterValue { return of(value); }) - .method(Operator.EQUALS.getMethodName(), list(ObjectValues.OBJECT), + .method("equals", list(ObjectValues.OBJECT), (environment, arguments) -> { InterpreterValue right = arguments.getPositionalArguments().get(0); if (right.getType().getName().equals(ObjectValues.BOXED_INT)) { 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 acd8845..8c6af74 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java @@ -14,30 +14,30 @@ import static org.zwobble.couscous.util.ExtraLists.list; public final class IntegerInterpreterValue implements InterpreterValue { public static final ConcreteType TYPE = ConcreteType.builder(IntegerInterpreterValue.class, IntegerValue.REF) - .method(Operator.ADD.getMethodName(), list(IntegerValue.REF), + .method(Operator.ADD.getSymbol(), list(IntegerValue.REF), infixReturningInteger((left, right) -> left + right)) - .method(Operator.SUBTRACT.getMethodName(), list(IntegerValue.REF), + .method(Operator.SUBTRACT.getSymbol(), list(IntegerValue.REF), infixReturningInteger((left, right) -> left - right)) - .method(Operator.MULTIPLY.getMethodName(), list(IntegerValue.REF), + .method(Operator.MULTIPLY.getSymbol(), list(IntegerValue.REF), infixReturningInteger((left, right) -> left * right)) - .method(Operator.DIVIDE.getMethodName(), list(IntegerValue.REF), + .method(Operator.DIVIDE.getSymbol(), list(IntegerValue.REF), infixReturningInteger((left, right) -> left / right)) - .method(Operator.MOD.getMethodName(), list(IntegerValue.REF), + .method(Operator.MOD.getSymbol(), list(IntegerValue.REF), infixReturningInteger((left, right) -> left % right)) - .method(Operator.EQUALS.getMethodName(), list(IntegerValue.REF), + .method(Operator.EQUALS.getSymbol(), list(IntegerValue.REF), (environment, arguments) -> { IntegerInterpreterValue right = (IntegerInterpreterValue)arguments.getPositionalArguments().get(0); return integerEquals(arguments, right); }) - .method(Operator.NOT_EQUALS.getMethodName(), list(IntegerValue.REF), + .method(Operator.NOT_EQUALS.getSymbol(), list(IntegerValue.REF), infixReturningBoolean((left, right) -> !left.equals(right))) - .method(Operator.GREATER_THAN.getMethodName(), list(IntegerValue.REF), + .method(Operator.GREATER_THAN.getSymbol(), list(IntegerValue.REF), infixReturningBoolean((left, right) -> left > right)) - .method(Operator.GREATER_THAN_OR_EQUAL.getMethodName(), list(IntegerValue.REF), + .method(Operator.GREATER_THAN_OR_EQUAL.getSymbol(), list(IntegerValue.REF), infixReturningBoolean((left, right) -> left >= right)) - .method(Operator.LESS_THAN.getMethodName(), list(IntegerValue.REF), + .method(Operator.LESS_THAN.getSymbol(), list(IntegerValue.REF), infixReturningBoolean((left, right) -> left < right)) - .method(Operator.LESS_THAN_OR_EQUAL.getMethodName(), list(IntegerValue.REF), + .method(Operator.LESS_THAN_OR_EQUAL.getSymbol(), list(IntegerValue.REF), infixReturningBoolean((left, right) -> left <= right)) .build(); diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java index f86b343..55a17cc 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java @@ -1,5 +1,6 @@ package org.zwobble.couscous.interpreter.values; +import org.zwobble.couscous.ast.Operator; import org.zwobble.couscous.interpreter.errors.NoSuchField; import org.zwobble.couscous.values.*; @@ -18,7 +19,7 @@ public final class StringInterpreterValue implements InterpreterValue { return of(arguments.getReceiver().value.substring(startIndex.getValue(), endIndex.getValue())); }) - .method("add", list(StringValue.REF), (environment, arguments) -> { + .method(Operator.ADD.getSymbol(), list(StringValue.REF), (environment, arguments) -> { StringInterpreterValue right = (StringInterpreterValue)arguments.get(0); return of(arguments.getReceiver().value + right.value); }) |
