aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/python
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-04 23:28:22 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-04 23:28:22 +0000
commit75b69c7f4e7ed84f82c549e36a3928a48720cc26 (patch)
treed400967b67b7e6ec7c922a586ae14c6cda35f6ed /src/main/java/org/zwobble/couscous/backends/python
parentbb0b36b86f841ec6340fe6e727ed2ea9db1c2d64 (diff)
Move type coercion decisions into the backends
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/python')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java16
1 files changed, 16 insertions, 0 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 913b1b7..ada7dea 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
@@ -261,6 +261,22 @@ public class PythonCodeGenerator {
public PythonExpressionNode visit(FieldAccessNode fieldAccess) {
return pythonAttributeAccess(generateExpression(fieldAccess.getLeft()), fieldAccess.getFieldName());
}
+
+ @Override
+ public PythonExpressionNode visit(TypeCoercionNode typeCoercion) {
+ PythonExpressionNode value = generateExpression(typeCoercion.getExpression());
+ if (typeCoercion.isIntegerBox()) {
+ return internalMethod("boxInt", asList(value));
+ } else if (typeCoercion.isIntegerUnbox()) {
+ return internalMethod("unboxInt", asList(value));
+ } else {
+ return value;
+ }
+ }
+
+ private PythonExpressionNode internalMethod(String name, List<PythonExpressionNode> arguments) {
+ return pythonCall(pythonAttributeAccess(pythonVariableReference("_couscous"), name), arguments);
+ }
}
private static boolean isPrimitive(ExpressionNode value) {