diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-05 13:00:08 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-05 13:00:08 +0100 |
| commit | d764958a284de666462796c9195fdb00d521d78a (patch) | |
| tree | 163f1d7ecafb86b3b05062d82d436cb4523e3245 | |
| parent | cc1543421aafac336be05ac0b75cecc2da4b6818 (diff) | |
Add Python boolean values
4 files changed, 38 insertions, 0 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 e5a13e5..b6adb80 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java @@ -1,6 +1,7 @@ package org.zwobble.couscous.backends.python; import org.zwobble.couscous.backends.python.ast.PythonBlock; +import org.zwobble.couscous.backends.python.ast.PythonBooleanLiteralNode; import org.zwobble.couscous.backends.python.ast.PythonClassNode; import org.zwobble.couscous.backends.python.ast.PythonFunctionDefinitionNode; import org.zwobble.couscous.backends.python.ast.PythonIntegerLiteralNode; @@ -45,6 +46,12 @@ public class PythonSerializer implements PythonNodeVisitor<Void> { } @Override + public Void visit(PythonBooleanLiteralNode booleanLiteral) { + writer.writeKeyword(booleanLiteral.getValue() ? "True" : "False"); + return null; + } + + @Override public Void visit(PythonReturnNode pythonReturn) { writer.startStatement(); writer.writeKeyword("return"); diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBooleanLiteralNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBooleanLiteralNode.java new file mode 100644 index 0000000..43caf0a --- /dev/null +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBooleanLiteralNode.java @@ -0,0 +1,22 @@ +package org.zwobble.couscous.backends.python.ast; + +import org.zwobble.couscous.backends.python.ast.visitors.PythonNodeVisitor; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Value; + +@Value(staticConstructor="pythonBooleanLiteral") +public class PythonBooleanLiteralNode implements PythonExpressionNode { + @Getter(value = AccessLevel.NONE) + boolean value; + + public boolean getValue() { + return value; + } + + @Override + public <T> T accept(PythonNodeVisitor<T> visitor) { + return 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 0210df6..42f97a0 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 @@ -1,5 +1,6 @@ package org.zwobble.couscous.backends.python.ast.visitors; +import org.zwobble.couscous.backends.python.ast.PythonBooleanLiteralNode; import org.zwobble.couscous.backends.python.ast.PythonClassNode; import org.zwobble.couscous.backends.python.ast.PythonFunctionDefinitionNode; import org.zwobble.couscous.backends.python.ast.PythonIntegerLiteralNode; @@ -11,6 +12,7 @@ import org.zwobble.couscous.backends.python.ast.PythonStringLiteralNode; public interface PythonNodeVisitor<T> { T visit(PythonIntegerLiteralNode integerLiteral); T visit(PythonStringLiteralNode stringLiteral); + T visit(PythonBooleanLiteralNode booleanLiteral); T visit(PythonReturnNode pythonReturn); T visit(PythonPassNode pass); 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 4f9b63b..8a608f8 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 @@ -6,6 +6,7 @@ import org.zwobble.couscous.backends.python.ast.PythonClassNode; import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; import static org.zwobble.couscous.backends.python.PythonSerializer.serialize; +import static org.zwobble.couscous.backends.python.ast.PythonBooleanLiteralNode.pythonBooleanLiteral; import static org.zwobble.couscous.backends.python.ast.PythonFunctionDefinitionNode.pythonFunctionDefinition; import static org.zwobble.couscous.backends.python.ast.PythonIntegerLiteralNode.pythonIntegerLiteral; import static org.zwobble.couscous.backends.python.ast.PythonModuleNode.pythonModule; @@ -30,6 +31,12 @@ public class PythonSerializerTests { } @Test + public void booleansAreNotBoxed() { + assertEquals("True", serialize(pythonBooleanLiteral(true))); + assertEquals("False", serialize(pythonBooleanLiteral(false))); + } + + @Test public void returnKeywordIsUsedForReturns() { val output = serialize(pythonReturn(pythonIntegerLiteral(42))); assertEquals("return 42\n", output); |
