From db0458d53254b4e54c0ee4ed3ce02bcfda4dcd38 Mon Sep 17 00:00:00 2001 From: Robert Bradshaw Date: Mon, 7 Jun 2010 10:51:51 -0700 Subject: [PATCH] Fix large integer literal inference. --- Cython/Compiler/TypeInference.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Cython/Compiler/TypeInference.py b/Cython/Compiler/TypeInference.py index b3ddeaf9..e0daaabc 100644 --- a/Cython/Compiler/TypeInference.py +++ b/Cython/Compiler/TypeInference.py @@ -3,6 +3,7 @@ import ExprNodes import Nodes import Builtin import PyrexTypes +from Cython import Utils from PyrexTypes import py_object_type, unspecified_type from Visitor import CythonTransform @@ -175,7 +176,25 @@ class MarkOverflowingArithmetic(CythonTransform): visit_InPlaceAssignmentNode = visit_dangerous_node visit_Node = visit_safe_node - + + def visit_assignment(self, lhs, rhs): + if (isinstance(rhs, ExprNodes.IntNode) + and isinstance(lhs, ExprNodes.NameNode) + and Utils.long_literal(rhs.value)): + entry = lhs.entry or self.env.lookup(lhs.name) + if entry: + entry.might_overflow = True + + def visit_SingleAssignmentNode(self, node): + self.visit_assignment(node.lhs, node.rhs) + self.visitchildren(node) + return node + + def visit_CascadedAssignmentNode(self, node): + for lhs in node.lhs_list: + self.visit_assignment(lhs, node.rhs) + self.visitchildren(node) + return node class PyObjectTypeInferer: """ -- 2.26.2