15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Builtin Definitions 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from Symtab import BuiltinScope, StructOrUnionScope 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from Code import UtilityCode 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from TypeSlots import Signature 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import PyrexTypes 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import Options 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# C-level implementations of builtin types, functions and methods 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)iter_next_utility_code = UtilityCode.load("IterNext", "ObjectHandling.c") 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)getattr_utility_code = UtilityCode.load("GetAttr", "ObjectHandling.c") 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)getattr3_utility_code = UtilityCode.load("GetAttr3", "Builtins.c") 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)pyexec_utility_code = UtilityCode.load("PyExec", "Builtins.c") 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)pyexec_globals_utility_code = UtilityCode.load("PyExecGlobals", "Builtins.c") 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)globals_utility_code = UtilityCode.load("Globals", "Builtins.c") 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)py_set_utility_code = UtilityCode.load("pyset_compat", "Builtins.c") 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)builtin_utility_code = { 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'set' : py_set_utility_code, 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'frozenset' : py_set_utility_code, 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# mapping from builtins to their C-level equivalents 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class _BuiltinOverride(object): 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def __init__(self, py_name, args, ret_type, cname, py_equiv="*", 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=None, sig=None, func_type=None, 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) is_strict_signature=False, builtin_return_type=None): 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.py_name, self.cname, self.py_equiv = py_name, cname, py_equiv 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.args, self.ret_type = args, ret_type 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.func_type, self.sig = func_type, sig 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.builtin_return_type = builtin_return_type 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.is_strict_signature = is_strict_signature 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.utility_code = utility_code 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def build_func_type(self, sig=None, self_arg=None): 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if sig is None: 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sig = Signature(self.args, self.ret_type) 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sig.exception_check = False # not needed for the current builtins 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) func_type = sig.function_type(self_arg) 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if self.is_strict_signature: 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) func_type.is_strict_signature = True 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if self.builtin_return_type: 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) func_type.return_type = builtin_types[self.builtin_return_type] 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return func_type 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class BuiltinAttribute(object): 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def __init__(self, py_name, cname=None, field_type=None, field_type_name=None): 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.py_name = py_name 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.cname = cname or py_name 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.field_type_name = field_type_name # can't do the lookup before the type is declared! 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.field_type = field_type 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def declare_in_type(self, self_type): 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if self.field_type_name is not None: 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # lazy type lookup 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) field_type = builtin_scope.lookup(self.field_type_name).type 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else: 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) field_type = self.field_type or PyrexTypes.py_object_type 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) entry = self_type.scope.declare(self.py_name, self.cname, field_type, None, 'private') 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) entry.is_variable = True 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class BuiltinFunction(_BuiltinOverride): 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def declare_in_scope(self, scope): 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) func_type, sig = self.func_type, self.sig 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if func_type is None: 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) func_type = self.build_func_type(sig) 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scope.declare_builtin_cfunction(self.py_name, func_type, self.cname, 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.py_equiv, self.utility_code) 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class BuiltinMethod(_BuiltinOverride): 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def declare_in_type(self, self_type): 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) method_type, sig = self.func_type, self.sig 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if method_type is None: 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # override 'self' type (first argument) 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self_arg = PyrexTypes.CFuncTypeArg("", self_type, None) 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self_arg.not_none = True 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self_arg.accept_builtin_subtypes = True 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) method_type = self.build_func_type(sig, self_arg) 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self_type.scope.declare_builtin_cfunction( 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.py_name, method_type, self.cname, utility_code=self.utility_code) 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)builtin_function_table = [ 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # name, args, return, C API func, py equiv = "*" 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('abs', "d", "d", "fabs", 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) is_strict_signature = True), 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('abs', "f", "f", "fabsf", 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) is_strict_signature = True), 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('abs', None, None, "__Pyx_abs_int", 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = UtilityCode.load("abs_int", "Builtins.c"), 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) func_type = PyrexTypes.CFuncType( 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyrexTypes.c_uint_type, [ 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyrexTypes.CFuncTypeArg("arg", PyrexTypes.c_int_type, None) 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ], 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) is_strict_signature = True)), 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('abs', None, None, "__Pyx_abs_long", 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = UtilityCode.load("abs_long", "Builtins.c"), 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) func_type = PyrexTypes.CFuncType( 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyrexTypes.c_ulong_type, [ 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyrexTypes.CFuncTypeArg("arg", PyrexTypes.c_long_type, None) 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ], 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) is_strict_signature = True)), 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('abs', None, None, "__Pyx_abs_longlong", 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = UtilityCode.load("abs_longlong", "Builtins.c"), 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) func_type = PyrexTypes.CFuncType( 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyrexTypes.c_ulonglong_type, [ 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyrexTypes.CFuncTypeArg("arg", PyrexTypes.c_longlong_type, None) 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ], 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) is_strict_signature = True)), 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('abs', "O", "O", "PyNumber_Absolute"), 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('callable', "O", "b", "__Pyx_PyCallable_Check", 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = UtilityCode.load("CallableCheck", "ObjectHandling.c")), 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('chr', "", "", ""), 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('cmp', "", "", "", ""), # int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result) 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('compile', "", "", ""), # PyObject* Py_CompileString( char *str, char *filename, int start) 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('delattr', "OO", "r", "PyObject_DelAttr"), 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('dir', "O", "O", "PyObject_Dir"), 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('divmod', "OO", "O", "PyNumber_Divmod"), 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('exec', "O", "O", "__Pyx_PyExecGlobals", 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = pyexec_globals_utility_code), 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('exec', "OO", "O", "__Pyx_PyExec2", 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = pyexec_utility_code), 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('exec', "OOO", "O", "__Pyx_PyExec3", 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = pyexec_utility_code), 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('eval', "", "", ""), 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('execfile', "", "", ""), 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('filter', "", "", ""), 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('getattr3', "OOO", "O", "__Pyx_GetAttr3", "getattr", 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=getattr3_utility_code), # Pyrex legacy 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('getattr', "OOO", "O", "__Pyx_GetAttr3", 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=getattr3_utility_code), 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('getattr', "OO", "O", "__Pyx_GetAttr", 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=getattr_utility_code), 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('hasattr', "OO", "b", "PyObject_HasAttr"), 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('hash', "O", "h", "PyObject_Hash"), 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('hex', "", "", ""), 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('id', "", "", ""), 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('input', "", "", ""), 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('intern', "O", "O", "__Pyx_Intern", 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = UtilityCode.load("Intern", "Builtins.c")), 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('isinstance', "OO", "b", "PyObject_IsInstance"), 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('issubclass', "OO", "b", "PyObject_IsSubclass"), 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('iter', "OO", "O", "PyCallIter_New"), 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('iter', "O", "O", "PyObject_GetIter"), 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('len', "O", "z", "PyObject_Length"), 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('locals', "", "O", "__pyx_locals"), 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('map', "", "", ""), 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('max', "", "", ""), 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('min', "", "", ""), 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('next', "O", "O", "__Pyx_PyIter_Next", 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = iter_next_utility_code), # not available in Py2 => implemented here 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('next', "OO", "O", "__Pyx_PyIter_Next2", 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = iter_next_utility_code), # not available in Py2 => implemented here 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('oct', "", "", ""), 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('open', "ss", "O", "PyFile_FromString"), # not in Py3 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('ord', "", "", ""), 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('pow', "OOO", "O", "PyNumber_Power"), 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('pow', "OO", "O", "__Pyx_PyNumber_Power2", 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = UtilityCode.load("pow2", "Builtins.c")), 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('range', "", "", ""), 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('raw_input', "", "", ""), 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('reduce', "", "", ""), 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('reload', "O", "O", "PyImport_ReloadModule"), 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('repr', "O", "O", "PyObject_Repr", builtin_return_type='str'), 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('round', "", "", ""), 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('setattr', "OOO", "r", "PyObject_SetAttr"), 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('sum', "", "", ""), 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('type', "O", "O", "PyObject_Type"), 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('unichr', "", "", ""), 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('unicode', "", "", ""), 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('vars', "", "", ""), 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('zip', "", "", ""), 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # Can't do these easily until we have builtin type entries. 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('typecheck', "OO", "i", "PyObject_TypeCheck", False), 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) #('issubtype', "OO", "i", "PyType_IsSubtype", False), 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # Put in namespace append optimization. 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('__Pyx_PyObject_Append', "OO", "O", "__Pyx_PyObject_Append"), 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)] 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)if not Options.old_style_globals: 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) builtin_function_table.append( 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinFunction('globals', "", "O", "__Pyx_Globals", 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=globals_utility_code)) 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Builtin types 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# bool 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# buffer 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# classmethod 2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# dict 2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# enumerate 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# file 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# float 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# int 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# list 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# long 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# object 2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# property 2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# slice 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# staticmethod 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# super 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# str 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# tuple 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# type 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# xrange 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)builtin_types_table = [ 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("type", "PyType_Type", []), 2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# This conflicts with the C++ bool type, and unfortunately 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# C++ is too liberal about PyObject* <-> bool conversions, 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# resulting in unintuitive runtime behavior and segfaults. 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# ("bool", "PyBool_Type", []), 2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("int", "PyInt_Type", []), 2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("long", "PyLong_Type", []), 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("float", "PyFloat_Type", []), 2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("complex", "PyComplex_Type", [BuiltinAttribute('cval', field_type_name = 'Py_complex'), 2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinAttribute('real', 'cval.real', field_type = PyrexTypes.c_double_type), 2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinAttribute('imag', 'cval.imag', field_type = PyrexTypes.c_double_type), 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]), 2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("basestring", "PyBaseString_Type", [ 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("join", "TO", "T", "__Pyx_PyBaseString_Join", 2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("StringJoin", "StringTools.c")), 2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]), 2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("bytearray", "PyByteArray_Type", [ 2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]), 2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("bytes", "PyBytes_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"), 2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("join", "TO", "O", "__Pyx_PyBytes_Join", 2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("StringJoin", "StringTools.c")), 2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]), 2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("str", "PyString_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"), 2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("join", "TO", "O", "__Pyx_PyString_Join", 2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) builtin_return_type='basestring', 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("StringJoin", "StringTools.c")), 2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]), 2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("unicode", "PyUnicode_Type", [BuiltinMethod("__contains__", "TO", "b", "PyUnicode_Contains"), 2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("join", "TO", "T", "PyUnicode_Join"), 2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]), 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("tuple", "PyTuple_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"), 2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]), 2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("list", "PyList_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"), 2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("insert", "TzO", "r", "PyList_Insert"), 2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("reverse", "T", "r", "PyList_Reverse"), 2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("append", "TO", "r", "__Pyx_PyList_Append", 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("ListAppend", "Optimize.c")), 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("extend", "TO", "r", "__Pyx_PyList_Extend", 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("ListExtend", "Optimize.c")), 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]), 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("dict", "PyDict_Type", [BuiltinMethod("__contains__", "TO", "b", "PyDict_Contains"), 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("has_key", "TO", "b", "PyDict_Contains"), 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("items", "T", "O", "__Pyx_PyDict_Items", 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("py_dict_items", "Builtins.c")), 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("keys", "T", "O", "__Pyx_PyDict_Keys", 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("py_dict_keys", "Builtins.c")), 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("values", "T", "O", "__Pyx_PyDict_Values", 2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("py_dict_values", "Builtins.c")), 2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("iteritems", "T", "O", "__Pyx_PyDict_IterItems", 2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("py_dict_iteritems", "Builtins.c")), 2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("iterkeys", "T", "O", "__Pyx_PyDict_IterKeys", 2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("py_dict_iterkeys", "Builtins.c")), 2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("itervalues", "T", "O", "__Pyx_PyDict_IterValues", 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("py_dict_itervalues", "Builtins.c")), 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("viewitems", "T", "O", "__Pyx_PyDict_ViewItems", 2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("py_dict_viewitems", "Builtins.c")), 2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("viewkeys", "T", "O", "__Pyx_PyDict_ViewKeys", 2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("py_dict_viewkeys", "Builtins.c")), 2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("viewvalues", "T", "O", "__Pyx_PyDict_ViewValues", 2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("py_dict_viewvalues", "Builtins.c")), 2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("clear", "T", "r", "__Pyx_PyDict_Clear", 2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code=UtilityCode.load("py_dict_clear", "Optimize.c")), 2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("copy", "T", "T", "PyDict_Copy")]), 2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("slice", "PySlice_Type", [BuiltinAttribute('start'), 2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinAttribute('stop'), 2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinAttribute('step'), 2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]), 2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# ("file", "PyFile_Type", []), # not in Py3 2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("set", "PySet_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"), 2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("clear", "T", "r", "PySet_Clear", 2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = py_set_utility_code), 2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # discard() and remove() have a special treatment for unhashable values 3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# BuiltinMethod("discard", "TO", "r", "PySet_Discard", 3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# utility_code = py_set_utility_code), 3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("add", "TO", "r", "PySet_Add", 3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = py_set_utility_code), 3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BuiltinMethod("pop", "T", "O", "PySet_Pop", 3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility_code = py_set_utility_code)]), 3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("frozenset", "PyFrozenSet_Type", []), 3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)] 3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)types_that_construct_their_instance = set([ 3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # some builtin types do not always return an instance of 3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # themselves - these do: 3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'type', 'bool', 'long', 'float', 'complex', 3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'bytes', 'unicode', 'bytearray', 3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'tuple', 'list', 'dict', 'set', 'frozenset' 3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # 'str', # only in Py3.x 3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # 'file', # only in Py2.x 3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)]) 3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)builtin_structs_table = [ 3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ('Py_buffer', 'Py_buffer', 3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [("buf", PyrexTypes.c_void_ptr_type), 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("obj", PyrexTypes.py_object_type), 3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("len", PyrexTypes.c_py_ssize_t_type), 3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("itemsize", PyrexTypes.c_py_ssize_t_type), 3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("readonly", PyrexTypes.c_bint_type), 3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("ndim", PyrexTypes.c_int_type), 3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("format", PyrexTypes.c_char_ptr_type), 3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("shape", PyrexTypes.c_py_ssize_t_ptr_type), 3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("strides", PyrexTypes.c_py_ssize_t_ptr_type), 3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("suboffsets", PyrexTypes.c_py_ssize_t_ptr_type), 3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("smalltable", PyrexTypes.CArrayType(PyrexTypes.c_py_ssize_t_type, 2)), 3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ("internal", PyrexTypes.c_void_ptr_type), 3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]), 3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ('Py_complex', 'Py_complex', 3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [('real', PyrexTypes.c_double_type), 3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ('imag', PyrexTypes.c_double_type), 3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ]) 3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)] 3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# set up builtin scope 3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)builtin_scope = BuiltinScope() 3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)def init_builtin_funcs(): 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for bf in builtin_function_table: 3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bf.declare_in_scope(builtin_scope) 3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)builtin_types = {} 3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)def init_builtin_types(): 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) global builtin_types 3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for name, cname, methods in builtin_types_table: 3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) utility = builtin_utility_code.get(name) 3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if name == 'frozenset': 3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) objstruct_cname = 'PySetObject' 3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) elif name == 'bool': 3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) objstruct_cname = None 3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) else: 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) objstruct_cname = 'Py%sObject' % name.capitalize() 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) the_type = builtin_scope.declare_builtin_type(name, cname, utility, objstruct_cname) 3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) builtin_types[name] = the_type 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for method in methods: 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) method.declare_in_type(the_type) 3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)def init_builtin_structs(): 3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for name, cname, attribute_types in builtin_structs_table: 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scope = StructOrUnionScope(name) 3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for attribute_name, attribute_type in attribute_types: 3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scope.declare_var(attribute_name, attribute_type, None, 3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) attribute_name, allow_pyobject=True) 3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) builtin_scope.declare_struct_or_union( 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) name, "struct", scope, 1, None, cname = cname) 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)def init_builtins(): 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) init_builtin_structs() 3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) init_builtin_types() 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) init_builtin_funcs() 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) builtin_scope.declare_var( 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) '__debug__', PyrexTypes.c_const_type(PyrexTypes.c_bint_type), 3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pos=None, cname='(!Py_OptimizeFlag)', is_cdef=True) 3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) global list_type, tuple_type, dict_type, set_type, frozenset_type 3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) global bytes_type, str_type, unicode_type, basestring_type, slice_type 3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) global float_type, bool_type, type_type, complex_type, bytearray_type 3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) type_type = builtin_scope.lookup('type').type 3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) list_type = builtin_scope.lookup('list').type 3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tuple_type = builtin_scope.lookup('tuple').type 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dict_type = builtin_scope.lookup('dict').type 3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_type = builtin_scope.lookup('set').type 3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) frozenset_type = builtin_scope.lookup('frozenset').type 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) slice_type = builtin_scope.lookup('slice').type 3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bytes_type = builtin_scope.lookup('bytes').type 3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) str_type = builtin_scope.lookup('str').type 3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) unicode_type = builtin_scope.lookup('unicode').type 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) basestring_type = builtin_scope.lookup('basestring').type 3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bytearray_type = builtin_scope.lookup('bytearray').type 3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) float_type = builtin_scope.lookup('float').type 4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool_type = builtin_scope.lookup('bool').type 4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) complex_type = builtin_scope.lookup('complex').type 4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)init_builtins() 405