aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/OperationNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/Operator.java40
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java10
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java6
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java3
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java22
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java3
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);
})