From d764958a284de666462796c9195fdb00d521d78a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 5 Oct 2015 13:00:08 +0100 Subject: Add Python boolean values --- .../couscous/backends/python/PythonSerializer.java | 7 +++++++ .../python/ast/PythonBooleanLiteralNode.java | 22 ++++++++++++++++++++++ .../python/ast/visitors/PythonNodeVisitor.java | 2 ++ .../backends/python/PythonSerializerTests.java | 7 +++++++ 4 files changed, 38 insertions(+) create mode 100644 src/main/java/org/zwobble/couscous/backends/python/ast/PythonBooleanLiteralNode.java (limited to 'src') 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; @@ -44,6 +45,12 @@ public class PythonSerializer implements PythonNodeVisitor { return null; } + @Override + public Void visit(PythonBooleanLiteralNode booleanLiteral) { + writer.writeKeyword(booleanLiteral.getValue() ? "True" : "False"); + return null; + } + @Override public Void visit(PythonReturnNode pythonReturn) { writer.startStatement(); 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 accept(PythonNodeVisitor 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 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; @@ -29,6 +30,12 @@ public class PythonSerializerTests { assertEquals("\"blah\"", output); } + @Test + public void booleansAreNotBoxed() { + assertEquals("True", serialize(pythonBooleanLiteral(true))); + assertEquals("False", serialize(pythonBooleanLiteral(false))); + } + @Test public void returnKeywordIsUsedForReturns() { val output = serialize(pythonReturn(pythonIntegerLiteral(42))); -- cgit v1.2.3