aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/python
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-17 22:33:15 +0000
committerMichael Williamson <mike@zwobble.org>2016-03-18 08:00:10 +0000
commitcea82209e5aa312f4a513308c148d3e944004cb4 (patch)
tree6f7e5fa7bb1656b4650bb227866195f35bc962e0 /src/main/java/org/zwobble/couscous/backends/python
parent5687fd7f88485f95e970b3d93fbf2800e84eb3b8 (diff)
Improve support for generics
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/python')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java5
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java10
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonExpressionStatement.java25
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonNodeVisitor.java4
4 files changed, 39 insertions, 5 deletions
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 49e7b80..fc3aa98 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
@@ -39,6 +39,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.backends.python.ast.visitors.PythonExpressionStatement.pythonExpressionStatement;
import static org.zwobble.couscous.util.Casts.tryCast;
import static org.zwobble.couscous.util.ExtraLists.list;
@@ -195,10 +196,10 @@ public class PythonCodeGenerator {
@Override
public PythonStatementNode visit(ExpressionStatementNode expressionStatement) {
if (expressionStatement.getExpression() instanceof AssignmentNode) {
- final org.zwobble.couscous.ast.AssignmentNode assignment = (AssignmentNode)expressionStatement.getExpression();
+ AssignmentNode assignment = (AssignmentNode)expressionStatement.getExpression();
return pythonAssignment(assignment.getTarget().accept(EXPRESSION_GENERATOR), generateExpression(assignment.getValue()));
} else {
- throw new UnsupportedOperationException();
+ return pythonExpressionStatement(generateExpression(expressionStatement.getExpression()));
}
}
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 d3771d3..7732a87 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
@@ -2,6 +2,7 @@ package org.zwobble.couscous.backends.python;
import org.zwobble.couscous.backends.SourceCodeWriter;
import org.zwobble.couscous.backends.python.ast.*;
+import org.zwobble.couscous.backends.python.ast.visitors.PythonExpressionStatement;
import org.zwobble.couscous.backends.python.ast.visitors.PythonNodeVisitor;
public class PythonSerializer implements PythonNodeVisitor {
@@ -101,7 +102,14 @@ public class PythonSerializer implements PythonNodeVisitor {
writer.writeSpace();
writeParenthesised(operation.getRight(), operation);
}
-
+
+ @Override
+ public void visit(PythonExpressionStatement statement) {
+ writer.writeStatement(() -> {
+ write(statement.getExpression());
+ });
+ }
+
@Override
public void visit(PythonReturnNode pythonReturn) {
writer.writeStatement(() -> {
diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonExpressionStatement.java b/src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonExpressionStatement.java
new file mode 100644
index 0000000..0ba1c38
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonExpressionStatement.java
@@ -0,0 +1,25 @@
+package org.zwobble.couscous.backends.python.ast.visitors;
+
+import org.zwobble.couscous.backends.python.ast.PythonExpressionNode;
+import org.zwobble.couscous.backends.python.ast.PythonStatementNode;
+
+public class PythonExpressionStatement implements PythonStatementNode {
+ public static PythonExpressionStatement pythonExpressionStatement(PythonExpressionNode expression) {
+ return new PythonExpressionStatement(expression);
+ }
+
+ private final PythonExpressionNode expression;
+
+ public PythonExpressionStatement(PythonExpressionNode expression) {
+ this.expression = expression;
+ }
+
+ public PythonExpressionNode getExpression() {
+ return expression;
+ }
+
+ @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 8f04787..d43691d 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
@@ -13,7 +13,8 @@ public interface PythonNodeVisitor {
void visit(PythonGetSliceNode getSlice);
void visit(PythonNotNode notOperation);
void visit(PythonBinaryOperation operation);
-
+
+ void visit(PythonExpressionStatement statement);
void visit(PythonReturnNode pythonReturn);
void visit(PythonPassNode pass);
void visit(PythonClassNode pythonClass);
@@ -24,5 +25,4 @@ public interface PythonNodeVisitor {
void visit(PythonWhileNode whileLoop);
void visit(PythonModuleNode module);
-
}