aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/Names.java16
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java4
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java12
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java7
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java6
5 files changed, 29 insertions, 16 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/Names.java b/src/main/java/org/zwobble/couscous/backends/Names.java
new file mode 100644
index 0000000..fc8072f
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/backends/Names.java
@@ -0,0 +1,16 @@
+package org.zwobble.couscous.backends;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.Iterables;
+import org.zwobble.couscous.ast.MethodSignature;
+
+import static com.google.common.collect.Iterables.transform;
+import static org.zwobble.couscous.util.ExtraLists.list;
+
+public class Names {
+ public static String toUniqueName(MethodSignature signature) {
+ return Joiner.on("__").join(Iterables.concat(
+ list(signature.getName()),
+ transform(signature.getArguments(), argument -> argument.getQualifiedName().replace('.', '_'))));
+ }
+}
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 3ac7363..5a90dc7 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
@@ -3,7 +3,7 @@ package org.zwobble.couscous.backends.csharp;
import com.google.common.collect.ImmutableMap;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import org.zwobble.couscous.backends.python.PythonCodeGenerator;
+import org.zwobble.couscous.backends.Names;
import org.zwobble.couscous.values.*;
import java.util.Map;
@@ -49,7 +49,7 @@ public class CsharpCodeGenerator {
}
private String transformMethodName(MethodSignature signature) {
- return PythonCodeGenerator.toName(signature);
+ return Names.toUniqueName(signature);
}
private Optional<ExpressionNode> transformExpression(ExpressionNode expression) {
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
index 086b3a0..d7e56aa 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
@@ -1,6 +1,5 @@
package org.zwobble.couscous.backends.python;
-import com.google.common.base.Joiner;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
@@ -10,6 +9,7 @@ import org.zwobble.couscous.ast.structure.NodeStructure;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeMapperWithDefault;
import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
+import org.zwobble.couscous.backends.Names;
import org.zwobble.couscous.backends.python.ast.*;
import org.zwobble.couscous.values.*;
@@ -161,7 +161,7 @@ public class PythonCodeGenerator {
method.isStatic() ? Collections.<String>emptyList() : list("self"),
explicitArgumentNames);
List<PythonStatementNode> pythonBody = generateStatements(method.getBody());
- return pythonFunctionDefinition(toName(method.signature()), ImmutableList.copyOf(argumentNames), new PythonBlock(pythonBody));
+ return pythonFunctionDefinition(Names.toUniqueName(method.signature()), ImmutableList.copyOf(argumentNames), new PythonBlock(pythonBody));
}
private static List<PythonStatementNode> generateStatements(List<StatementNode> statements) {
@@ -252,7 +252,7 @@ public class PythonCodeGenerator {
List<PythonExpressionNode> arguments = generateExpressions(methodCall.getArguments());
return getPrimitiveMethod(methodCall, receiver, arguments)
- .orElseGet(() -> pythonCall(pythonAttributeAccess(receiver, toName(methodCall.signature())), arguments));
+ .orElseGet(() -> pythonCall(pythonAttributeAccess(receiver, Names.toUniqueName(methodCall.signature())), arguments));
}
private Optional<PythonExpressionNode> getPrimitiveMethod(
@@ -346,10 +346,4 @@ public class PythonCodeGenerator {
private static PythonVariableReferenceNode typeReference(TypeName className) {
return pythonVariableReference(className.getSimpleName());
}
-
- public static String toName(MethodSignature signature) {
- return Joiner.on("__").join(Iterables.concat(
- list(signature.getName()),
- transform(signature.getArguments(), argument -> argument.getQualifiedName().replace('.', '_'))));
- }
} \ No newline at end of file
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java
index 651e50b..d293f84 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java
@@ -9,9 +9,9 @@ import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.MethodSignature;
import org.zwobble.couscous.ast.TypeName;
+import org.zwobble.couscous.backends.Names;
import org.zwobble.couscous.backends.csharp.CsharpBackend;
import org.zwobble.couscous.backends.csharp.CsharpSerializer;
-import org.zwobble.couscous.backends.python.PythonCodeGenerator;
import org.zwobble.couscous.tests.MethodRunner;
import org.zwobble.couscous.tests.backends.Processes;
import org.zwobble.couscous.util.ExtraLists;
@@ -61,9 +61,10 @@ public class CsharpMethodRunner implements MethodRunner {
boolean isVoid)
throws IOException, InterruptedException
{
- String csharpMethodName = PythonCodeGenerator.toName(new MethodSignature(
+ MethodSignature signature = new MethodSignature(
methodName,
- eagerMap(arguments, argument -> argument.getType())));
+ eagerMap(arguments, argument -> argument.getType()));
+ String csharpMethodName = Names.toUniqueName(signature);
String value = CsharpSerializer.serialize(
staticMethodCall(
TypeName.of(NAMESPACE + "." + className.getQualifiedName()),
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java
index 14fcf80..e541459 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java
@@ -5,6 +5,7 @@ import org.hamcrest.Matchers;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.MethodSignature;
import org.zwobble.couscous.ast.TypeName;
+import org.zwobble.couscous.backends.Names;
import org.zwobble.couscous.backends.python.PythonBackend;
import org.zwobble.couscous.backends.python.PythonCodeGenerator;
import org.zwobble.couscous.backends.python.PythonSerializer;
@@ -50,9 +51,10 @@ public class PythonMethodRunner implements MethodRunner {
throws IOException, InterruptedException {
String argumentsString = Joiner.on(", ").join(arguments.stream().map(PythonCodeGenerator::generateCode).map(PythonSerializer::serialize).iterator());
- String pythonMethodName = PythonCodeGenerator.toName(new MethodSignature(
+ MethodSignature signature = new MethodSignature(
methodName,
- eagerMap(arguments, argument -> argument.getType())));
+ eagerMap(arguments, argument -> argument.getType()));
+ String pythonMethodName = Names.toUniqueName(signature);
String program = "from couscous." + className.getQualifiedName() + " import " + className.getSimpleName() + ";" +
"value = " + className.getSimpleName() + "." + pythonMethodName + "(" + argumentsString + ");" +
"print(type(value)); print(value)";