From 75b69c7f4e7ed84f82c549e36a3928a48720cc26 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 4 Jan 2016 23:28:22 +0000 Subject: Move type coercion decisions into the backends --- .../couscous/backends/python/PythonCodeGenerator.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/main/java/org/zwobble/couscous/backends/python') 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 arguments) { + return pythonCall(pythonAttributeAccess(pythonVariableReference("_couscous"), name), arguments); + } } private static boolean isPrimitive(ExpressionNode value) { -- cgit v1.2.3