diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-06 17:11:19 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-06 17:11:19 +0000 |
| commit | a063cdcec0ecfe449a22f0134dc559a40583fc09 (patch) | |
| tree | 5514f8fe1af64f15c5a60efc7a2a0048083dfcaf /src/main/java/org/zwobble/couscous | |
| parent | 9dbf7ce22b7735e644d964437313a34229800e57 (diff) | |
Move naming code out of Python backend
Diffstat (limited to 'src/main/java/org/zwobble/couscous')
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 |
