aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java5
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonBinaryOperation.java4
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java2
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java3
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java4
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java14
6 files changed, 25 insertions, 7 deletions
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 054a359..5e3795c 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
@@ -41,7 +41,10 @@ public class PrimitiveMethods {
.put("toLowerCase", (receiver, arguments) ->
pythonCall(pythonAttributeAccess(receiver, "lower"), list()))
-
+
+ .put("equals", (receiver, arguments) ->
+ PythonBinaryOperation.pythonEq(receiver, arguments.get(0)))
+
.build();
private static final Map<String, PrimitiveMethodGenerator> BOOLEAN_METHODS =
diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBinaryOperation.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBinaryOperation.java
index fb33626..8d6b9ce 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBinaryOperation.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBinaryOperation.java
@@ -10,6 +10,10 @@ public class PythonBinaryOperation implements PythonExpressionNode {
public static PythonExpressionNode pythonAdd(PythonExpressionNode left, PythonExpressionNode right) {
return new PythonBinaryOperation("+", left, right);
}
+
+ public static PythonExpressionNode pythonEq(PythonExpressionNode left, PythonExpressionNode right) {
+ return new PythonBinaryOperation("==", left, right);
+ }
private final String operator;
private final PythonExpressionNode left;
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
index c04cb3e..059f2ad 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
@@ -80,7 +80,7 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> {
List<InterpreterValue> arguments = evalArguments(methodCall.getArguments());
MethodSignature signature = new MethodSignature(
methodCall.getMethodName(),
- eagerMap(arguments, argument -> argument.getType().getName()));
+ eagerMap(methodCall.getArguments(), argument -> argument.getType()));
return type.callMethod(environment, receiver, signature, arguments);
}
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 820c2b1..03a0289 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java
@@ -7,6 +7,9 @@ import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.PrimitiveValues;
public final class BooleanInterpreterValue implements InterpreterValue {
+ public static final BooleanInterpreterValue TRUE = new BooleanInterpreterValue(true);
+ public static final BooleanInterpreterValue FALSE = new BooleanInterpreterValue(false);
+
private static final ConcreteType TYPE = ConcreteType.builder(BooleanInterpreterValue.class, "boolean")
.method("negate", Collections.emptyList(), (environment, arguments) ->
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java
index e06732a..14d1085 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java
@@ -9,7 +9,9 @@ import org.zwobble.couscous.values.UnitValue;
public class InterpreterValues {
public static final UnitInterpreterValue UNIT = UnitInterpreterValue.UNIT;
-
+ public static final BooleanInterpreterValue FALSE = BooleanInterpreterValue.FALSE;
+ public static final BooleanInterpreterValue TRUE = BooleanInterpreterValue.TRUE;
+
public static InterpreterValue value(int value) {
return new IntegerInterpreterValue(value);
}
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 4fff53e..3aaa073 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java
@@ -1,10 +1,7 @@
package org.zwobble.couscous.interpreter.values;
import org.zwobble.couscous.interpreter.NoSuchField;
-import org.zwobble.couscous.values.IntegerValue;
-import org.zwobble.couscous.values.PrimitiveValue;
-import org.zwobble.couscous.values.PrimitiveValues;
-import org.zwobble.couscous.values.StringValue;
+import org.zwobble.couscous.values.*;
import java.util.Optional;
@@ -29,6 +26,15 @@ public final class StringInterpreterValue implements InterpreterValue {
.method("toLowerCase", list(), (environment, arguments) ->
of(arguments.getReceiver().value.toLowerCase()))
+ .method("equals", list(ObjectValues.OBJECT), (environment, arguments) -> {
+ InterpreterValue right = arguments.get(0);
+ if (right instanceof StringInterpreterValue) {
+ return new BooleanInterpreterValue(arguments.getReceiver().value.equals(((StringInterpreterValue)right).value));
+ } else {
+ return InterpreterValues.FALSE;
+ }
+ })
+
.build();
private final String value;