diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-31 13:42:14 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-31 13:42:14 +0000 |
| commit | eff6ead0d0089fae070c6dbb7c937353632322c1 (patch) | |
| tree | f90ad6ebd4a6c25b234c8a116911c2f36dc0a551 /src/main/java/org/zwobble/couscous/backends/python | |
| parent | c69e902235ea6a197c197c786c88f2bd15f10de3 (diff) | |
Support int inequality
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/python')
4 files changed, 45 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java index 9639c72..c6aa62d 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java @@ -6,6 +6,8 @@ import java.util.Optional; import org.zwobble.couscous.ast.TypeName; import org.zwobble.couscous.backends.python.ast.PythonExpressionNode; +import org.zwobble.couscous.backends.python.ast.PythonNotNode; +import org.zwobble.couscous.values.BooleanValue; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.StringValue; @@ -32,6 +34,14 @@ public class PrimitiveMethods { .build(); + private static final Map<String, PrimitiveMethodGenerator> BOOLEAN_METHODS = + ImmutableMap.<String, PrimitiveMethodGenerator>builder() + + .put("negate", (receiver, arguments) -> + PythonNotNode.pythonNot(receiver)) + + .build(); + private static final Map<String, PrimitiveMethodGenerator> INT_METHODS; static { @@ -76,6 +86,7 @@ public class PrimitiveMethods { private static final Map<TypeName, Map<String, PrimitiveMethodGenerator>> METHODS = ImmutableMap.<TypeName, Map<String, PrimitiveMethodGenerator>>builder() .put(StringValue.REF, STRING_METHODS) + .put(BooleanValue.REF, BOOLEAN_METHODS) .put(IntegerValue.REF, INT_METHODS) .build(); 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 1674e1f..eadb545 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java @@ -16,6 +16,7 @@ import org.zwobble.couscous.backends.python.ast.PythonImportNode; import org.zwobble.couscous.backends.python.ast.PythonIntegerLiteralNode; import org.zwobble.couscous.backends.python.ast.PythonModuleNode; import org.zwobble.couscous.backends.python.ast.PythonNode; +import org.zwobble.couscous.backends.python.ast.PythonNotNode; import org.zwobble.couscous.backends.python.ast.PythonPassNode; import org.zwobble.couscous.backends.python.ast.PythonReturnNode; import org.zwobble.couscous.backends.python.ast.PythonStatementNode; @@ -103,6 +104,13 @@ public class PythonSerializer implements PythonNodeVisitor { }); writer.writeSymbol("]"); } + + @Override + public void visit(PythonNotNode notOperation) { + writer.writeKeyword("not"); + writer.writeSpace(); + writeParenthesised(notOperation.getOperand()); + } @Override public void visit(PythonReturnNode pythonReturn) { diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonNotNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonNotNode.java new file mode 100644 index 0000000..6fe7dc6 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonNotNode.java @@ -0,0 +1,24 @@ +package org.zwobble.couscous.backends.python.ast; + +import org.zwobble.couscous.backends.python.ast.visitors.PythonNodeVisitor; + +public class PythonNotNode implements PythonExpressionNode { + public static PythonExpressionNode pythonNot(PythonExpressionNode operand) { + return new PythonNotNode(operand); + } + + private final PythonExpressionNode operand; + + private PythonNotNode(PythonExpressionNode operand) { + this.operand = operand; + } + + public PythonExpressionNode getOperand() { + return operand; + } + + @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 7632342..59a1fe9 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 @@ -11,6 +11,7 @@ import org.zwobble.couscous.backends.python.ast.PythonGetSliceNode; import org.zwobble.couscous.backends.python.ast.PythonImportNode; import org.zwobble.couscous.backends.python.ast.PythonIntegerLiteralNode; import org.zwobble.couscous.backends.python.ast.PythonModuleNode; +import org.zwobble.couscous.backends.python.ast.PythonNotNode; import org.zwobble.couscous.backends.python.ast.PythonPassNode; import org.zwobble.couscous.backends.python.ast.PythonReturnNode; import org.zwobble.couscous.backends.python.ast.PythonStringLiteralNode; @@ -25,6 +26,7 @@ public interface PythonNodeVisitor { void visit(PythonAttributeAccessNode attributeAccess); void visit(PythonCallNode call); void visit(PythonGetSliceNode getSlice); + void visit(PythonNotNode notOperation); void visit(PythonReturnNode pythonReturn); void visit(PythonPassNode pass); |
