aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/python
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/python')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java9
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java6
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java15
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java3
4 files changed, 19 insertions, 14 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 d2f89ba..cc2ec06 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
@@ -22,6 +22,7 @@ import static org.zwobble.couscous.backends.python.ast.PythonBinaryOperation.pyt
import static org.zwobble.couscous.backends.python.ast.PythonCallNode.pythonCall;
import static org.zwobble.couscous.backends.python.ast.PythonGetSliceNode.pythonGetSlice;
import static org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode.pythonVariableReference;
+import static org.zwobble.couscous.util.ExtraLists.list;
public class PrimitiveMethods {
private static final Map<String, PrimitiveMethodGenerator> STRING_METHODS =
@@ -30,7 +31,7 @@ public class PrimitiveMethods {
.put("length", (receiver, arguments) ->
pythonCall(
pythonVariableReference("len"),
- asList(receiver)))
+ list(receiver)))
.put("substring", (receiver, arguments) ->
pythonGetSlice(receiver, arguments))
@@ -51,7 +52,7 @@ public class PrimitiveMethods {
ImmutableMap.Builder<String, PrimitiveMethodGenerator> methods = ImmutableMap.builder();
methods.put("toString", (receiver, arguments) ->
- pythonCall(pythonVariableReference("str"), ImmutableList.of(receiver)));
+ pythonCall(pythonVariableReference("str"), list(receiver)));
addOperation(methods, Operator.ADD.getMethodName(), "+");
addOperation(methods, Operator.SUBTRACT.getMethodName(), "-");
@@ -60,11 +61,11 @@ public class PrimitiveMethods {
methods.put(Operator.DIVIDE.getMethodName(), (receiver, arguments) ->
pythonCall(
internalReference("_div_round_to_zero"),
- asList(receiver, arguments.get(0))));
+ list(receiver, arguments.get(0))));
methods.put(Operator.MOD.getMethodName(), (receiver, arguments) ->
pythonCall(
internalReference("_mod_round_to_zero"),
- asList(receiver, arguments.get(0))));
+ list(receiver, arguments.get(0))));
addOperation(methods, Operator.EQUALS.getMethodName(), "==");
addOperation(methods, Operator.NOT_EQUALS.getMethodName(), "!=");
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
index f30beed..de36ed6 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
@@ -8,6 +8,7 @@ import java.nio.file.Path;
import java.util.List;
import java.util.stream.Stream;
+import com.google.common.collect.ImmutableList;
import org.zwobble.couscous.Backend;
import org.zwobble.couscous.ast.ClassNode;
@@ -16,9 +17,10 @@ import com.google.common.io.Resources;
import static java.util.Arrays.asList;
import static org.zwobble.couscous.backends.python.PythonCodeGenerator.generateCode;
import static org.zwobble.couscous.backends.python.PythonSerializer.serialize;
+import static org.zwobble.couscous.util.ExtraLists.list;
public class PythonBackend implements Backend {
- private static final List<String> RUNTIME_FILES = asList(
+ private static final List<String> RUNTIME_FILES = ImmutableList.of(
"java.lang.Object",
"java.lang.Boolean",
"java.lang.Integer",
@@ -63,7 +65,7 @@ public class PythonBackend implements Backend {
Path path = destinationPathForModule(name);
Files.createDirectories(path.getParent());
createPythonPackages(path.getParent());
- Files.write(path, asList(contents));
+ Files.write(path, list(contents));
}
private void createPythonPackages(Path packagePath) throws IOException {
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 104854c..96fc544 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
@@ -40,6 +40,7 @@ import static org.zwobble.couscous.backends.python.ast.PythonReturnNode.pythonRe
import static org.zwobble.couscous.backends.python.ast.PythonStringLiteralNode.pythonStringLiteral;
import static org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode.pythonVariableReference;
import static org.zwobble.couscous.backends.python.ast.PythonWhileNode.pythonWhile;
+import static org.zwobble.couscous.util.ExtraLists.list;
public class PythonCodeGenerator {
public static PythonModuleNode generateCode(ClassNode classNode) {
@@ -47,7 +48,7 @@ public class PythonCodeGenerator {
PythonImportNode internalsImport = pythonImport(
importPathToRoot(classNode),
- asList(pythonImportAlias("_couscous")));
+ list(pythonImportAlias("_couscous")));
PythonFunctionDefinitionNode constructor =
generateConstructor(classNode.getConstructor());
@@ -58,7 +59,7 @@ public class PythonCodeGenerator {
PythonClassNode pythonClass = pythonClass(
classNode.getSimpleName(),
- ImmutableList.copyOf(Iterables.concat(asList(constructor), pythonMethods)));
+ ImmutableList.copyOf(Iterables.concat(list(constructor), pythonMethods)));
return pythonModule(ImmutableList.copyOf(Iterators.concat(
singletonIterator(pythonClass),
@@ -70,7 +71,7 @@ public class PythonCodeGenerator {
Set<TypeName> classes = findReferencedClasses(classNode);
return classes.stream()
.filter(name -> !name.equals(InternalCouscousValue.REF))
- .map(name -> pythonImport(importPathToRoot(classNode) + name.getQualifiedName(), asList(pythonImportAlias(name.getSimpleName()))));
+ .map(name -> pythonImport(importPathToRoot(classNode) + name.getQualifiedName(), list(pythonImportAlias(name.getSimpleName()))));
}
private static String importPathToRoot(ClassNode classNode) {
@@ -131,7 +132,7 @@ public class PythonCodeGenerator {
private static PythonFunctionDefinitionNode generateConstructor(ConstructorNode constructor) {
Iterable<String> explicitArgumentNames = transform(constructor.getArguments(), argument -> argument.getName());
- Iterable<String> argumentNames = Iterables.concat(asList("self"), explicitArgumentNames);
+ Iterable<String> argumentNames = Iterables.concat(list("self"), explicitArgumentNames);
List<PythonStatementNode> pythonBody = constructor.getBody().stream().map(PythonCodeGenerator::generateStatement).collect(Collectors.toList());
return pythonFunctionDefinition("__init__", ImmutableList.copyOf(argumentNames), new PythonBlock(pythonBody));
}
@@ -139,7 +140,7 @@ public class PythonCodeGenerator {
private static PythonFunctionDefinitionNode generateFunction(MethodNode method) {
Iterable<String> explicitArgumentNames = transform(method.getArguments(), argument -> argument.getName());
Iterable<String> argumentNames = Iterables.concat(
- method.isStatic() ? Collections.<String>emptyList() : asList("self"),
+ 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));
@@ -270,7 +271,7 @@ public class PythonCodeGenerator {
PythonExpressionNode value = generateExpression(typeCoercion.getExpression());
if (isIntegerBox(typeCoercion)) {
// TODO: replace with direct access to java.lang.Integer
- return internalMethod("boxInt", asList(value));
+ return internalMethod("boxInt", list(value));
} else if (isIntegerUnbox(typeCoercion)) {
return pythonAttributeAccess(value, "_value");
} else {
@@ -297,7 +298,7 @@ public class PythonCodeGenerator {
public static String toName(MethodSignature signature) {
return Joiner.on("__").join(Iterables.concat(
- ImmutableList.of(signature.getName()),
+ list(signature.getName()),
transform(signature.getArguments(), argument -> argument.getQualifiedName().replace('.', '_'))));
}
diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java
index 8bc7132..b1889a7 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java
@@ -6,13 +6,14 @@ import java.util.List;
import com.google.common.collect.ImmutableList;
import static java.util.Arrays.asList;
+import static org.zwobble.couscous.util.ExtraLists.list;
public class PythonBlock implements Iterable<PythonStatementNode> {
private final List<PythonStatementNode> statements;
public PythonBlock(List<? extends PythonStatementNode> statements) {
if (statements.isEmpty()) {
- this.statements = asList(PythonPassNode.PASS);
+ this.statements = list(PythonPassNode.PASS);
} else {
this.statements = ImmutableList.copyOf(statements);
}