From 98cb5a8e3a4394aae0ab3d23d187e9355d3f1d7f Mon Sep 17 00:00:00 2001 From: Robert Bradshaw Date: Wed, 26 May 2010 21:21:16 -0700 Subject: [PATCH] Fix types of marked integer literals. --- Cython/Compiler/ExprNodes.py | 7 ++++++- tests/run/int_literals.pyx | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index 413a51f2..ad266fd4 100755 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -787,7 +787,12 @@ class IntNode(ConstNode): unsigned = "" longness = "" - type = PyrexTypes.c_long_type + + def __init__(self, pos, **kwds): + ExprNode.__init__(self, pos, **kwds) + rank = max(1, len(self.longness)) + sign = not self.unsigned + self.type = PyrexTypes.modifiers_and_name_to_type[sign, rank, "int"] def coerce_to(self, dst_type, env): if self.type is dst_type: diff --git a/tests/run/int_literals.pyx b/tests/run/int_literals.pyx index 6dca2dd3..2e38b0cf 100644 --- a/tests/run/int_literals.pyx +++ b/tests/run/int_literals.pyx @@ -6,6 +6,7 @@ __doc__ = u""" """ import sys +from cython cimport typeof if sys.version_info[0] >= 3: __doc__ = __doc__.replace(u'L', u'') @@ -35,3 +36,20 @@ def large_literal(): return 0xFFFFFFFFFFFF else: return 0xFFFFFFF + +def c_long_types(): + """ + >>> c_long_types() + long + long + long long + unsigned long + unsigned long + unsigned long long + """ + print typeof(1) + print typeof(1L) + print typeof(1LL) + print typeof(1U) + print typeof(1UL) + print typeof(1ULL) -- 2.26.2