aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-05 13:00:08 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-05 13:00:08 +0100
commitd764958a284de666462796c9195fdb00d521d78a (patch)
tree163f1d7ecafb86b3b05062d82d436cb4523e3245 /src
parentcc1543421aafac336be05ac0b75cecc2da4b6818 (diff)
Add Python boolean values
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java7
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonBooleanLiteralNode.java22
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/visitors/PythonNodeVisitor.java2
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/python/PythonSerializerTests.java7
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);