aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java15
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonArrayNode.java31
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonNodeVisitor.java1
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java12
4 files changed, 58 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java b/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
index 89711a2..0a7735d 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
@@ -46,7 +46,20 @@ public class PythonSerializer implements PythonNodeVisitor {
public void visit(PythonVariableReferenceNode reference) {
writer.writeIdentifier(reference.getName());
}
-
+
+ @Override
+ public void visit(PythonArrayNode array) {
+ writer.writeSymbol("[");
+ writer.writeWithSeparator(
+ array.getElements(),
+ element -> write(element),
+ () -> {
+ writer.writeSymbol(",");
+ writer.writeSpace();
+ });
+ writer.writeSymbol("]");
+ }
+
@Override
public void visit(PythonConditionalExpressionNode conditional) {
writeParenthesised(conditional.getTrueValue(), conditional);
diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonArrayNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonArrayNode.java
new file mode 100644
index 0000000..91588ea
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonArrayNode.java
@@ -0,0 +1,31 @@
+package org.zwobble.couscous.backends.python.ast;
+
+import org.zwobble.couscous.backends.python.ast.visitors.PythonNodeVisitor;
+
+import java.util.List;
+
+public class PythonArrayNode implements PythonExpressionNode {
+ public static PythonExpressionNode pythonArray(List<PythonExpressionNode> elements) {
+ return new PythonArrayNode(elements);
+ }
+
+ private final List<PythonExpressionNode> elements;
+
+ public PythonArrayNode(List<PythonExpressionNode> elements) {
+ this.elements = elements;
+ }
+
+ public List<PythonExpressionNode> getElements() {
+ return elements;
+ }
+
+ @Override
+ public int precedence() {
+ return Integer.MAX_VALUE;
+ }
+
+ @Override
+ public void accept(PythonNodeVisitor visitor) {
+ visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonNodeVisitor.java b/src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonNodeVisitor.java
index d43691d..bcc8604 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonNodeVisitor.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonNodeVisitor.java
@@ -7,6 +7,7 @@ public interface PythonNodeVisitor {
void visit(PythonStringLiteralNode stringLiteral);
void visit(PythonBooleanLiteralNode booleanLiteral);
void visit(PythonVariableReferenceNode reference);
+ void visit(PythonArrayNode array);
void visit(PythonConditionalExpressionNode conditional);
void visit(PythonAttributeAccessNode attributeAccess);
void visit(PythonCallNode call);
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
index 7ff9cee..98b2eed 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java
@@ -7,6 +7,7 @@ import org.zwobble.couscous.backends.python.ast.PythonModuleNode;
import static org.junit.Assert.assertEquals;
import static org.zwobble.couscous.backends.python.PythonSerializer.serialize;
+import static org.zwobble.couscous.backends.python.ast.PythonArrayNode.pythonArray;
import static org.zwobble.couscous.backends.python.ast.PythonAssignmentNode.pythonAssignment;
import static org.zwobble.couscous.backends.python.ast.PythonAttributeAccessNode.pythonAttributeAccess;
import static org.zwobble.couscous.backends.python.ast.PythonBinaryOperation.pythonAnd;
@@ -57,6 +58,17 @@ public class PythonSerializerTests {
public void variableReferenceIsSerializedAsIdentifier() {
assertEquals("blah", serialize(pythonVariableReference("blah")));
}
+
+ @Test
+ public void elementsOfArrayAreSerialised() {
+ assertEquals("[]", serialize(pythonArray(list())));
+ assertEquals("[one]", serialize(pythonArray(list(pythonVariableReference("one")))));
+ assertEquals(
+ "[one, two]",
+ serialize(pythonArray(list(
+ pythonVariableReference("one"),
+ pythonVariableReference("two")))));
+ }
@Test
public void conditionalExpressionIsSerializedUsingSubExpressions() {