if looking_at_base_type(s):
#print "p_c_simple_base_type: looking_at_base_type at", s.position()
is_basic = 1
- signed, longness = p_sign_and_longness(s)
- if s.sy == 'IDENT' and s.systring in basic_c_type_names:
+ if s.sy == 'IDENT' and s.systring in special_basic_c_types:
+ signed, longness = special_basic_c_types[s.systring]
name = s.systring
s.next()
else:
- name = 'int'
+ signed, longness = p_sign_and_longness(s)
+ if s.sy == 'IDENT' and s.systring in basic_c_type_names:
+ name = s.systring
+ s.next()
+ else:
+ name = 'int'
elif looking_at_dotted_name(s):
#print "p_c_simple_base_type: looking_at_type_name at", s.position()
name = s.systring
else:
return 0
-basic_c_type_names = ("void", "char", "int", "float", "double", "Py_ssize_t", "size_t", "bint")
+basic_c_type_names = ("void", "char", "int", "float", "double", "bint")
+
+special_basic_c_types = {
+ # name : (signed, longness)
+ "Py_ssize_t" : (2, 0),
+ "size_t" : (0, 0),
+}
sign_and_longness_words = ("short", "long", "signed", "unsigned")
base_type_start_words = \
- basic_c_type_names + sign_and_longness_words
+ basic_c_type_names + sign_and_longness_words + tuple(special_basic_c_types)
def p_sign_and_longness(s):
signed = 1
(2, 1, "int"): c_slong_type,
(2, 2, "int"): c_slonglong_type,
- (1, 0, "Py_ssize_t"): c_py_ssize_t_type,
- (1, 0, "size_t") : c_size_t_type,
+ (2, 0, "Py_ssize_t"): c_py_ssize_t_type,
+ (0, 0, "size_t") : c_size_t_type,
(1, 0, "long"): c_long_type,
(1, 0, "short"): c_short_type,
-cdef signed Py_ssize_t a
-cdef unsigned Py_ssize_t b
-cdef signed size_t c
-cdef unsigned size_t d
cdef signed float e
cdef unsigned float f
cdef signed double g
4:5: Unrecognised type modifier combination
5:5: Unrecognised type modifier combination
6:5: Unrecognised type modifier combination
-7:5: Unrecognised type modifier combination
-8:5: Unrecognised type modifier combination
-9:5: Unrecognised type modifier combination
-10:5: Unrecognised type modifier combination
"""