aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/csharp
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-24 16:13:33 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-24 16:13:33 +0000
commit5fe2fa7934197d73bc1f6a3e361149923279b35a (patch)
tree3850ffc02c864875084c174e26466a052ccc6368 /src/main/java/org/zwobble/couscous/backends/csharp
parentf2ed6b591da6149319c149d1c78694bfa9641a73 (diff)
Implement negation in C# backend
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/csharp')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java3
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java24
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java4
3 files changed, 29 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
index 9e48e9a..ab55e0d 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
@@ -50,7 +50,8 @@ public class CsharpCodeGenerator extends NodeTransformer {
return call.getReceiver().accept(new Receiver.Mapper<Optional<ExpressionNode>>() {
@Override
public Optional<ExpressionNode> visit(ExpressionNode receiver) {
- return Optional.empty();
+ return CsharpPrimitiveMethods.getPrimitiveMethod(receiver.getType(), call.getMethodName())
+ .map(generator -> generator.generate(receiver, call.getArguments()));
}
@Override
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java
index 9424b2d..e094258 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java
@@ -3,6 +3,8 @@ package org.zwobble.couscous.backends.csharp;
import com.google.common.collect.ImmutableMap;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.ast.TypeName;
+import org.zwobble.couscous.backends.python.ast.PythonExpressionNode;
+import org.zwobble.couscous.values.BooleanValue;
import org.zwobble.couscous.values.ObjectValues;
import java.util.List;
@@ -13,6 +15,18 @@ import static org.zwobble.couscous.ast.MethodCallNode.staticMethodCall;
import static org.zwobble.couscous.util.ExtraLists.list;
public class CsharpPrimitiveMethods {
+ private static final Map<String, PrimitiveMethodGenerator> BOOLEAN_METHODS;
+
+ static {
+ ImmutableMap.Builder<String, PrimitiveMethodGenerator> methods = ImmutableMap.builder();
+ BOOLEAN_METHODS = methods.build();
+ }
+
+ private static final Map<TypeName, Map<String, PrimitiveMethodGenerator>> METHODS =
+ ImmutableMap.<TypeName, Map<String, PrimitiveMethodGenerator>>builder()
+ .put(BooleanValue.REF, BOOLEAN_METHODS)
+ .build();
+
private static final Map<String, PrimitiveStaticMethodGenerator> STATIC_INT_METHODS =
ImmutableMap.<String, PrimitiveStaticMethodGenerator>builder()
@@ -29,6 +43,16 @@ public class CsharpPrimitiveMethods {
.put(ObjectValues.BOXED_INT, STATIC_INT_METHODS)
.build();
+ public static Optional<PrimitiveMethodGenerator> getPrimitiveMethod(TypeName type, String methodName) {
+ return Optional.ofNullable(METHODS.get(type))
+ .flatMap(methodsForType -> Optional.ofNullable(methodsForType.get(methodName)));
+ }
+
+ @FunctionalInterface
+ public interface PrimitiveMethodGenerator {
+ ExpressionNode generate(ExpressionNode receiver, List<ExpressionNode> arguments);
+ }
+
public static Optional<PrimitiveStaticMethodGenerator> getPrimitiveStaticMethod(TypeName type, String methodName) {
return Optional.ofNullable(STATIC_METHODS.get(type))
.flatMap(methodsForType -> Optional.ofNullable(methodsForType.get(methodName)));
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
index 06dafbb..6f20310 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -121,7 +121,9 @@ public class CsharpSerializer implements NodeVisitor {
@Override
public void visit(OperationNode operation) {
- write(operation.desugar());
+ // TODO: distinguish operator types (prefix, infix)
+ writer.writeSymbol(operation.getOperator().getSymbol());
+ write(operation.getArguments().get(0));
}
private void writeArguments(List<? extends ExpressionNode> arguments) {