aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-06 17:11:19 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-06 17:11:19 +0000
commita063cdcec0ecfe449a22f0134dc559a40583fc09 (patch)
tree5514f8fe1af64f15c5a60efc7a2a0048083dfcaf /src/main/java
parent9dbf7ce22b7735e644d964437313a34229800e57 (diff)
Move naming code out of Python backend
Diffstat (limited to 'src/main/java')
-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
3 files changed, 21 insertions, 11 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