aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/cython/Cython/Compiler/Builtin.py
diff options
context:
space:
mode:
authorAnton Samokhvalov <pg83@yandex.ru>2022-02-10 16:45:15 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:15 +0300
commit72cb13b4aff9bc9cf22e49251bc8fd143f82538f (patch)
treeda2c34829458c7d4e74bdfbdf85dff449e9e7fb8 /contrib/tools/cython/Cython/Compiler/Builtin.py
parent778e51ba091dc39e7b7fcab2b9cf4dbedfb6f2b5 (diff)
downloadydb-72cb13b4aff9bc9cf22e49251bc8fd143f82538f.tar.gz
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/tools/cython/Cython/Compiler/Builtin.py')
-rw-r--r--contrib/tools/cython/Cython/Compiler/Builtin.py746
1 files changed, 373 insertions, 373 deletions
diff --git a/contrib/tools/cython/Cython/Compiler/Builtin.py b/contrib/tools/cython/Cython/Compiler/Builtin.py
index 5fa717507d..b4a97a9322 100644
--- a/contrib/tools/cython/Cython/Compiler/Builtin.py
+++ b/contrib/tools/cython/Cython/Compiler/Builtin.py
@@ -1,100 +1,100 @@
-#
-# Builtin Definitions
-#
-
-from __future__ import absolute_import
-
-from .Symtab import BuiltinScope, StructOrUnionScope
-from .Code import UtilityCode
-from .TypeSlots import Signature
-from . import PyrexTypes
-from . import Options
-
-
-# C-level implementations of builtin types, functions and methods
-
-iter_next_utility_code = UtilityCode.load("IterNext", "ObjectHandling.c")
-getattr_utility_code = UtilityCode.load("GetAttr", "ObjectHandling.c")
-getattr3_utility_code = UtilityCode.load("GetAttr3", "Builtins.c")
-pyexec_utility_code = UtilityCode.load("PyExec", "Builtins.c")
-pyexec_globals_utility_code = UtilityCode.load("PyExecGlobals", "Builtins.c")
-globals_utility_code = UtilityCode.load("Globals", "Builtins.c")
-
-builtin_utility_code = {
+#
+# Builtin Definitions
+#
+
+from __future__ import absolute_import
+
+from .Symtab import BuiltinScope, StructOrUnionScope
+from .Code import UtilityCode
+from .TypeSlots import Signature
+from . import PyrexTypes
+from . import Options
+
+
+# C-level implementations of builtin types, functions and methods
+
+iter_next_utility_code = UtilityCode.load("IterNext", "ObjectHandling.c")
+getattr_utility_code = UtilityCode.load("GetAttr", "ObjectHandling.c")
+getattr3_utility_code = UtilityCode.load("GetAttr3", "Builtins.c")
+pyexec_utility_code = UtilityCode.load("PyExec", "Builtins.c")
+pyexec_globals_utility_code = UtilityCode.load("PyExecGlobals", "Builtins.c")
+globals_utility_code = UtilityCode.load("Globals", "Builtins.c")
+
+builtin_utility_code = {
'StopAsyncIteration': UtilityCode.load_cached("StopAsyncIteration", "Coroutine.c"),
-}
-
-
-# mapping from builtins to their C-level equivalents
-
-class _BuiltinOverride(object):
- def __init__(self, py_name, args, ret_type, cname, py_equiv="*",
- utility_code=None, sig=None, func_type=None,
- is_strict_signature=False, builtin_return_type=None):
- self.py_name, self.cname, self.py_equiv = py_name, cname, py_equiv
- self.args, self.ret_type = args, ret_type
- self.func_type, self.sig = func_type, sig
- self.builtin_return_type = builtin_return_type
- self.is_strict_signature = is_strict_signature
- self.utility_code = utility_code
-
- def build_func_type(self, sig=None, self_arg=None):
- if sig is None:
- sig = Signature(self.args, self.ret_type)
- sig.exception_check = False # not needed for the current builtins
- func_type = sig.function_type(self_arg)
- if self.is_strict_signature:
- func_type.is_strict_signature = True
- if self.builtin_return_type:
- func_type.return_type = builtin_types[self.builtin_return_type]
- return func_type
-
-
-class BuiltinAttribute(object):
- def __init__(self, py_name, cname=None, field_type=None, field_type_name=None):
- self.py_name = py_name
- self.cname = cname or py_name
- self.field_type_name = field_type_name # can't do the lookup before the type is declared!
- self.field_type = field_type
-
- def declare_in_type(self, self_type):
- if self.field_type_name is not None:
- # lazy type lookup
- field_type = builtin_scope.lookup(self.field_type_name).type
- else:
- field_type = self.field_type or PyrexTypes.py_object_type
- entry = self_type.scope.declare(self.py_name, self.cname, field_type, None, 'private')
- entry.is_variable = True
-
-
-class BuiltinFunction(_BuiltinOverride):
- def declare_in_scope(self, scope):
- func_type, sig = self.func_type, self.sig
- if func_type is None:
- func_type = self.build_func_type(sig)
- scope.declare_builtin_cfunction(self.py_name, func_type, self.cname,
- self.py_equiv, self.utility_code)
-
-
-class BuiltinMethod(_BuiltinOverride):
- def declare_in_type(self, self_type):
- method_type, sig = self.func_type, self.sig
- if method_type is None:
- # override 'self' type (first argument)
- self_arg = PyrexTypes.CFuncTypeArg("", self_type, None)
- self_arg.not_none = True
- self_arg.accept_builtin_subtypes = True
- method_type = self.build_func_type(sig, self_arg)
- self_type.scope.declare_builtin_cfunction(
- self.py_name, method_type, self.cname, utility_code=self.utility_code)
-
-
-builtin_function_table = [
- # name, args, return, C API func, py equiv = "*"
- BuiltinFunction('abs', "d", "d", "fabs",
- is_strict_signature = True),
- BuiltinFunction('abs', "f", "f", "fabsf",
- is_strict_signature = True),
+}
+
+
+# mapping from builtins to their C-level equivalents
+
+class _BuiltinOverride(object):
+ def __init__(self, py_name, args, ret_type, cname, py_equiv="*",
+ utility_code=None, sig=None, func_type=None,
+ is_strict_signature=False, builtin_return_type=None):
+ self.py_name, self.cname, self.py_equiv = py_name, cname, py_equiv
+ self.args, self.ret_type = args, ret_type
+ self.func_type, self.sig = func_type, sig
+ self.builtin_return_type = builtin_return_type
+ self.is_strict_signature = is_strict_signature
+ self.utility_code = utility_code
+
+ def build_func_type(self, sig=None, self_arg=None):
+ if sig is None:
+ sig = Signature(self.args, self.ret_type)
+ sig.exception_check = False # not needed for the current builtins
+ func_type = sig.function_type(self_arg)
+ if self.is_strict_signature:
+ func_type.is_strict_signature = True
+ if self.builtin_return_type:
+ func_type.return_type = builtin_types[self.builtin_return_type]
+ return func_type
+
+
+class BuiltinAttribute(object):
+ def __init__(self, py_name, cname=None, field_type=None, field_type_name=None):
+ self.py_name = py_name
+ self.cname = cname or py_name
+ self.field_type_name = field_type_name # can't do the lookup before the type is declared!
+ self.field_type = field_type
+
+ def declare_in_type(self, self_type):
+ if self.field_type_name is not None:
+ # lazy type lookup
+ field_type = builtin_scope.lookup(self.field_type_name).type
+ else:
+ field_type = self.field_type or PyrexTypes.py_object_type
+ entry = self_type.scope.declare(self.py_name, self.cname, field_type, None, 'private')
+ entry.is_variable = True
+
+
+class BuiltinFunction(_BuiltinOverride):
+ def declare_in_scope(self, scope):
+ func_type, sig = self.func_type, self.sig
+ if func_type is None:
+ func_type = self.build_func_type(sig)
+ scope.declare_builtin_cfunction(self.py_name, func_type, self.cname,
+ self.py_equiv, self.utility_code)
+
+
+class BuiltinMethod(_BuiltinOverride):
+ def declare_in_type(self, self_type):
+ method_type, sig = self.func_type, self.sig
+ if method_type is None:
+ # override 'self' type (first argument)
+ self_arg = PyrexTypes.CFuncTypeArg("", self_type, None)
+ self_arg.not_none = True
+ self_arg.accept_builtin_subtypes = True
+ method_type = self.build_func_type(sig, self_arg)
+ self_type.scope.declare_builtin_cfunction(
+ self.py_name, method_type, self.cname, utility_code=self.utility_code)
+
+
+builtin_function_table = [
+ # name, args, return, C API func, py equiv = "*"
+ BuiltinFunction('abs', "d", "d", "fabs",
+ is_strict_signature = True),
+ BuiltinFunction('abs', "f", "f", "fabsf",
+ is_strict_signature = True),
BuiltinFunction('abs', "i", "i", "abs",
is_strict_signature = True),
BuiltinFunction('abs', "l", "l", "labs",
@@ -108,17 +108,17 @@ builtin_function_table = [
is_strict_signature = True, nogil=True)),
] + list(
BuiltinFunction('abs', None, None, "/*abs_{0}*/".format(t.specialization_name()),
- func_type = PyrexTypes.CFuncType(
+ func_type = PyrexTypes.CFuncType(
t,
[PyrexTypes.CFuncTypeArg("arg", t, None)],
is_strict_signature = True, nogil=True))
for t in (PyrexTypes.c_uint_type, PyrexTypes.c_ulong_type, PyrexTypes.c_ulonglong_type)
) + list(
BuiltinFunction('abs', None, None, "__Pyx_c_abs{0}".format(t.funcsuffix),
- func_type = PyrexTypes.CFuncType(
+ func_type = PyrexTypes.CFuncType(
t.real_type, [
PyrexTypes.CFuncTypeArg("arg", t, None)
- ],
+ ],
is_strict_signature = True, nogil=True))
for t in (PyrexTypes.c_float_complex_type,
PyrexTypes.c_double_complex_type,
@@ -130,52 +130,52 @@ builtin_function_table = [
#('any', "", "", ""),
#('ascii', "", "", ""),
#('bin', "", "", ""),
- BuiltinFunction('callable', "O", "b", "__Pyx_PyCallable_Check",
- utility_code = UtilityCode.load("CallableCheck", "ObjectHandling.c")),
- #('chr', "", "", ""),
- #('cmp', "", "", "", ""), # int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result)
- #('compile', "", "", ""), # PyObject* Py_CompileString( char *str, char *filename, int start)
- BuiltinFunction('delattr', "OO", "r", "PyObject_DelAttr"),
- BuiltinFunction('dir', "O", "O", "PyObject_Dir"),
- BuiltinFunction('divmod', "OO", "O", "PyNumber_Divmod"),
- BuiltinFunction('exec', "O", "O", "__Pyx_PyExecGlobals",
- utility_code = pyexec_globals_utility_code),
- BuiltinFunction('exec', "OO", "O", "__Pyx_PyExec2",
- utility_code = pyexec_utility_code),
- BuiltinFunction('exec', "OOO", "O", "__Pyx_PyExec3",
- utility_code = pyexec_utility_code),
- #('eval', "", "", ""),
- #('execfile', "", "", ""),
- #('filter', "", "", ""),
- BuiltinFunction('getattr3', "OOO", "O", "__Pyx_GetAttr3", "getattr",
- utility_code=getattr3_utility_code), # Pyrex legacy
- BuiltinFunction('getattr', "OOO", "O", "__Pyx_GetAttr3",
- utility_code=getattr3_utility_code),
- BuiltinFunction('getattr', "OO", "O", "__Pyx_GetAttr",
- utility_code=getattr_utility_code),
+ BuiltinFunction('callable', "O", "b", "__Pyx_PyCallable_Check",
+ utility_code = UtilityCode.load("CallableCheck", "ObjectHandling.c")),
+ #('chr', "", "", ""),
+ #('cmp', "", "", "", ""), # int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result)
+ #('compile', "", "", ""), # PyObject* Py_CompileString( char *str, char *filename, int start)
+ BuiltinFunction('delattr', "OO", "r", "PyObject_DelAttr"),
+ BuiltinFunction('dir', "O", "O", "PyObject_Dir"),
+ BuiltinFunction('divmod', "OO", "O", "PyNumber_Divmod"),
+ BuiltinFunction('exec', "O", "O", "__Pyx_PyExecGlobals",
+ utility_code = pyexec_globals_utility_code),
+ BuiltinFunction('exec', "OO", "O", "__Pyx_PyExec2",
+ utility_code = pyexec_utility_code),
+ BuiltinFunction('exec', "OOO", "O", "__Pyx_PyExec3",
+ utility_code = pyexec_utility_code),
+ #('eval', "", "", ""),
+ #('execfile', "", "", ""),
+ #('filter', "", "", ""),
+ BuiltinFunction('getattr3', "OOO", "O", "__Pyx_GetAttr3", "getattr",
+ utility_code=getattr3_utility_code), # Pyrex legacy
+ BuiltinFunction('getattr', "OOO", "O", "__Pyx_GetAttr3",
+ utility_code=getattr3_utility_code),
+ BuiltinFunction('getattr', "OO", "O", "__Pyx_GetAttr",
+ utility_code=getattr_utility_code),
BuiltinFunction('hasattr', "OO", "b", "__Pyx_HasAttr",
utility_code = UtilityCode.load("HasAttr", "Builtins.c")),
- BuiltinFunction('hash', "O", "h", "PyObject_Hash"),
- #('hex', "", "", ""),
- #('id', "", "", ""),
- #('input', "", "", ""),
- BuiltinFunction('intern', "O", "O", "__Pyx_Intern",
- utility_code = UtilityCode.load("Intern", "Builtins.c")),
- BuiltinFunction('isinstance', "OO", "b", "PyObject_IsInstance"),
- BuiltinFunction('issubclass', "OO", "b", "PyObject_IsSubclass"),
- BuiltinFunction('iter', "OO", "O", "PyCallIter_New"),
- BuiltinFunction('iter', "O", "O", "PyObject_GetIter"),
- BuiltinFunction('len', "O", "z", "PyObject_Length"),
- BuiltinFunction('locals', "", "O", "__pyx_locals"),
- #('map', "", "", ""),
- #('max', "", "", ""),
- #('min', "", "", ""),
- BuiltinFunction('next', "O", "O", "__Pyx_PyIter_Next",
- utility_code = iter_next_utility_code), # not available in Py2 => implemented here
- BuiltinFunction('next', "OO", "O", "__Pyx_PyIter_Next2",
- utility_code = iter_next_utility_code), # not available in Py2 => implemented here
- #('oct', "", "", ""),
- #('open', "ss", "O", "PyFile_FromString"), # not in Py3
+ BuiltinFunction('hash', "O", "h", "PyObject_Hash"),
+ #('hex', "", "", ""),
+ #('id', "", "", ""),
+ #('input', "", "", ""),
+ BuiltinFunction('intern', "O", "O", "__Pyx_Intern",
+ utility_code = UtilityCode.load("Intern", "Builtins.c")),
+ BuiltinFunction('isinstance', "OO", "b", "PyObject_IsInstance"),
+ BuiltinFunction('issubclass', "OO", "b", "PyObject_IsSubclass"),
+ BuiltinFunction('iter', "OO", "O", "PyCallIter_New"),
+ BuiltinFunction('iter', "O", "O", "PyObject_GetIter"),
+ BuiltinFunction('len', "O", "z", "PyObject_Length"),
+ BuiltinFunction('locals', "", "O", "__pyx_locals"),
+ #('map', "", "", ""),
+ #('max', "", "", ""),
+ #('min', "", "", ""),
+ BuiltinFunction('next', "O", "O", "__Pyx_PyIter_Next",
+ utility_code = iter_next_utility_code), # not available in Py2 => implemented here
+ BuiltinFunction('next', "OO", "O", "__Pyx_PyIter_Next2",
+ utility_code = iter_next_utility_code), # not available in Py2 => implemented here
+ #('oct', "", "", ""),
+ #('open', "ss", "O", "PyFile_FromString"), # not in Py3
] + [
BuiltinFunction('ord', None, None, "__Pyx_long_cast",
func_type=PyrexTypes.CFuncType(
@@ -196,139 +196,139 @@ builtin_function_table = [
PyrexTypes.CFuncTypeArg("c", PyrexTypes.py_object_type, None)
],
exception_value="(long)(Py_UCS4)-1")),
- BuiltinFunction('pow', "OOO", "O", "PyNumber_Power"),
- BuiltinFunction('pow', "OO", "O", "__Pyx_PyNumber_Power2",
- utility_code = UtilityCode.load("pow2", "Builtins.c")),
- #('range', "", "", ""),
- #('raw_input', "", "", ""),
- #('reduce', "", "", ""),
- BuiltinFunction('reload', "O", "O", "PyImport_ReloadModule"),
+ BuiltinFunction('pow', "OOO", "O", "PyNumber_Power"),
+ BuiltinFunction('pow', "OO", "O", "__Pyx_PyNumber_Power2",
+ utility_code = UtilityCode.load("pow2", "Builtins.c")),
+ #('range', "", "", ""),
+ #('raw_input', "", "", ""),
+ #('reduce', "", "", ""),
+ BuiltinFunction('reload', "O", "O", "PyImport_ReloadModule"),
BuiltinFunction('repr', "O", "O", "PyObject_Repr"), # , builtin_return_type='str'), # add in Cython 3.1
- #('round', "", "", ""),
- BuiltinFunction('setattr', "OOO", "r", "PyObject_SetAttr"),
- #('sum', "", "", ""),
+ #('round', "", "", ""),
+ BuiltinFunction('setattr', "OOO", "r", "PyObject_SetAttr"),
+ #('sum', "", "", ""),
#('sorted', "", "", ""),
- #('type', "O", "O", "PyObject_Type"),
- #('unichr', "", "", ""),
- #('unicode', "", "", ""),
- #('vars', "", "", ""),
- #('zip', "", "", ""),
- # Can't do these easily until we have builtin type entries.
- #('typecheck', "OO", "i", "PyObject_TypeCheck", False),
- #('issubtype', "OO", "i", "PyType_IsSubtype", False),
-
- # Put in namespace append optimization.
- BuiltinFunction('__Pyx_PyObject_Append', "OO", "O", "__Pyx_PyObject_Append"),
+ #('type', "O", "O", "PyObject_Type"),
+ #('unichr', "", "", ""),
+ #('unicode', "", "", ""),
+ #('vars', "", "", ""),
+ #('zip', "", "", ""),
+ # Can't do these easily until we have builtin type entries.
+ #('typecheck', "OO", "i", "PyObject_TypeCheck", False),
+ #('issubtype', "OO", "i", "PyType_IsSubtype", False),
+
+ # Put in namespace append optimization.
+ BuiltinFunction('__Pyx_PyObject_Append', "OO", "O", "__Pyx_PyObject_Append"),
# This is conditionally looked up based on a compiler directive.
BuiltinFunction('__Pyx_Globals', "", "O", "__Pyx_Globals",
utility_code=globals_utility_code),
-]
-
-
-# Builtin types
-# bool
-# buffer
-# classmethod
-# dict
-# enumerate
-# file
-# float
-# int
-# list
-# long
-# object
-# property
-# slice
-# staticmethod
-# super
-# str
-# tuple
-# type
-# xrange
-
-builtin_types_table = [
-
- ("type", "PyType_Type", []),
-
-# This conflicts with the C++ bool type, and unfortunately
-# C++ is too liberal about PyObject* <-> bool conversions,
-# resulting in unintuitive runtime behavior and segfaults.
-# ("bool", "PyBool_Type", []),
-
- ("int", "PyInt_Type", []),
- ("long", "PyLong_Type", []),
- ("float", "PyFloat_Type", []),
-
- ("complex", "PyComplex_Type", [BuiltinAttribute('cval', field_type_name = 'Py_complex'),
- BuiltinAttribute('real', 'cval.real', field_type = PyrexTypes.c_double_type),
- BuiltinAttribute('imag', 'cval.imag', field_type = PyrexTypes.c_double_type),
- ]),
-
- ("basestring", "PyBaseString_Type", [
- BuiltinMethod("join", "TO", "T", "__Pyx_PyBaseString_Join",
- utility_code=UtilityCode.load("StringJoin", "StringTools.c")),
- ]),
- ("bytearray", "PyByteArray_Type", [
- ]),
- ("bytes", "PyBytes_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"),
- BuiltinMethod("join", "TO", "O", "__Pyx_PyBytes_Join",
- utility_code=UtilityCode.load("StringJoin", "StringTools.c")),
- ]),
- ("str", "PyString_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"),
- BuiltinMethod("join", "TO", "O", "__Pyx_PyString_Join",
- builtin_return_type='basestring',
- utility_code=UtilityCode.load("StringJoin", "StringTools.c")),
- ]),
- ("unicode", "PyUnicode_Type", [BuiltinMethod("__contains__", "TO", "b", "PyUnicode_Contains"),
- BuiltinMethod("join", "TO", "T", "PyUnicode_Join"),
- ]),
-
- ("tuple", "PyTuple_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"),
- ]),
-
- ("list", "PyList_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"),
- BuiltinMethod("insert", "TzO", "r", "PyList_Insert"),
- BuiltinMethod("reverse", "T", "r", "PyList_Reverse"),
- BuiltinMethod("append", "TO", "r", "__Pyx_PyList_Append",
- utility_code=UtilityCode.load("ListAppend", "Optimize.c")),
- BuiltinMethod("extend", "TO", "r", "__Pyx_PyList_Extend",
- utility_code=UtilityCode.load("ListExtend", "Optimize.c")),
- ]),
-
- ("dict", "PyDict_Type", [BuiltinMethod("__contains__", "TO", "b", "PyDict_Contains"),
- BuiltinMethod("has_key", "TO", "b", "PyDict_Contains"),
- BuiltinMethod("items", "T", "O", "__Pyx_PyDict_Items",
- utility_code=UtilityCode.load("py_dict_items", "Builtins.c")),
- BuiltinMethod("keys", "T", "O", "__Pyx_PyDict_Keys",
- utility_code=UtilityCode.load("py_dict_keys", "Builtins.c")),
- BuiltinMethod("values", "T", "O", "__Pyx_PyDict_Values",
- utility_code=UtilityCode.load("py_dict_values", "Builtins.c")),
- BuiltinMethod("iteritems", "T", "O", "__Pyx_PyDict_IterItems",
- utility_code=UtilityCode.load("py_dict_iteritems", "Builtins.c")),
- BuiltinMethod("iterkeys", "T", "O", "__Pyx_PyDict_IterKeys",
- utility_code=UtilityCode.load("py_dict_iterkeys", "Builtins.c")),
- BuiltinMethod("itervalues", "T", "O", "__Pyx_PyDict_IterValues",
- utility_code=UtilityCode.load("py_dict_itervalues", "Builtins.c")),
- BuiltinMethod("viewitems", "T", "O", "__Pyx_PyDict_ViewItems",
- utility_code=UtilityCode.load("py_dict_viewitems", "Builtins.c")),
- BuiltinMethod("viewkeys", "T", "O", "__Pyx_PyDict_ViewKeys",
- utility_code=UtilityCode.load("py_dict_viewkeys", "Builtins.c")),
- BuiltinMethod("viewvalues", "T", "O", "__Pyx_PyDict_ViewValues",
- utility_code=UtilityCode.load("py_dict_viewvalues", "Builtins.c")),
- BuiltinMethod("clear", "T", "r", "__Pyx_PyDict_Clear",
- utility_code=UtilityCode.load("py_dict_clear", "Optimize.c")),
- BuiltinMethod("copy", "T", "T", "PyDict_Copy")]),
-
- ("slice", "PySlice_Type", [BuiltinAttribute('start'),
- BuiltinAttribute('stop'),
- BuiltinAttribute('step'),
- ]),
-# ("file", "PyFile_Type", []), # not in Py3
-
- ("set", "PySet_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"),
- BuiltinMethod("clear", "T", "r", "PySet_Clear"),
- # discard() and remove() have a special treatment for unhashable values
+]
+
+
+# Builtin types
+# bool
+# buffer
+# classmethod
+# dict
+# enumerate
+# file
+# float
+# int
+# list
+# long
+# object
+# property
+# slice
+# staticmethod
+# super
+# str
+# tuple
+# type
+# xrange
+
+builtin_types_table = [
+
+ ("type", "PyType_Type", []),
+
+# This conflicts with the C++ bool type, and unfortunately
+# C++ is too liberal about PyObject* <-> bool conversions,
+# resulting in unintuitive runtime behavior and segfaults.
+# ("bool", "PyBool_Type", []),
+
+ ("int", "PyInt_Type", []),
+ ("long", "PyLong_Type", []),
+ ("float", "PyFloat_Type", []),
+
+ ("complex", "PyComplex_Type", [BuiltinAttribute('cval', field_type_name = 'Py_complex'),
+ BuiltinAttribute('real', 'cval.real', field_type = PyrexTypes.c_double_type),
+ BuiltinAttribute('imag', 'cval.imag', field_type = PyrexTypes.c_double_type),
+ ]),
+
+ ("basestring", "PyBaseString_Type", [
+ BuiltinMethod("join", "TO", "T", "__Pyx_PyBaseString_Join",
+ utility_code=UtilityCode.load("StringJoin", "StringTools.c")),
+ ]),
+ ("bytearray", "PyByteArray_Type", [
+ ]),
+ ("bytes", "PyBytes_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"),
+ BuiltinMethod("join", "TO", "O", "__Pyx_PyBytes_Join",
+ utility_code=UtilityCode.load("StringJoin", "StringTools.c")),
+ ]),
+ ("str", "PyString_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"),
+ BuiltinMethod("join", "TO", "O", "__Pyx_PyString_Join",
+ builtin_return_type='basestring',
+ utility_code=UtilityCode.load("StringJoin", "StringTools.c")),
+ ]),
+ ("unicode", "PyUnicode_Type", [BuiltinMethod("__contains__", "TO", "b", "PyUnicode_Contains"),
+ BuiltinMethod("join", "TO", "T", "PyUnicode_Join"),
+ ]),
+
+ ("tuple", "PyTuple_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"),
+ ]),
+
+ ("list", "PyList_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"),
+ BuiltinMethod("insert", "TzO", "r", "PyList_Insert"),
+ BuiltinMethod("reverse", "T", "r", "PyList_Reverse"),
+ BuiltinMethod("append", "TO", "r", "__Pyx_PyList_Append",
+ utility_code=UtilityCode.load("ListAppend", "Optimize.c")),
+ BuiltinMethod("extend", "TO", "r", "__Pyx_PyList_Extend",
+ utility_code=UtilityCode.load("ListExtend", "Optimize.c")),
+ ]),
+
+ ("dict", "PyDict_Type", [BuiltinMethod("__contains__", "TO", "b", "PyDict_Contains"),
+ BuiltinMethod("has_key", "TO", "b", "PyDict_Contains"),
+ BuiltinMethod("items", "T", "O", "__Pyx_PyDict_Items",
+ utility_code=UtilityCode.load("py_dict_items", "Builtins.c")),
+ BuiltinMethod("keys", "T", "O", "__Pyx_PyDict_Keys",
+ utility_code=UtilityCode.load("py_dict_keys", "Builtins.c")),
+ BuiltinMethod("values", "T", "O", "__Pyx_PyDict_Values",
+ utility_code=UtilityCode.load("py_dict_values", "Builtins.c")),
+ BuiltinMethod("iteritems", "T", "O", "__Pyx_PyDict_IterItems",
+ utility_code=UtilityCode.load("py_dict_iteritems", "Builtins.c")),
+ BuiltinMethod("iterkeys", "T", "O", "__Pyx_PyDict_IterKeys",
+ utility_code=UtilityCode.load("py_dict_iterkeys", "Builtins.c")),
+ BuiltinMethod("itervalues", "T", "O", "__Pyx_PyDict_IterValues",
+ utility_code=UtilityCode.load("py_dict_itervalues", "Builtins.c")),
+ BuiltinMethod("viewitems", "T", "O", "__Pyx_PyDict_ViewItems",
+ utility_code=UtilityCode.load("py_dict_viewitems", "Builtins.c")),
+ BuiltinMethod("viewkeys", "T", "O", "__Pyx_PyDict_ViewKeys",
+ utility_code=UtilityCode.load("py_dict_viewkeys", "Builtins.c")),
+ BuiltinMethod("viewvalues", "T", "O", "__Pyx_PyDict_ViewValues",
+ utility_code=UtilityCode.load("py_dict_viewvalues", "Builtins.c")),
+ BuiltinMethod("clear", "T", "r", "__Pyx_PyDict_Clear",
+ utility_code=UtilityCode.load("py_dict_clear", "Optimize.c")),
+ BuiltinMethod("copy", "T", "T", "PyDict_Copy")]),
+
+ ("slice", "PySlice_Type", [BuiltinAttribute('start'),
+ BuiltinAttribute('stop'),
+ BuiltinAttribute('step'),
+ ]),
+# ("file", "PyFile_Type", []), # not in Py3
+
+ ("set", "PySet_Type", [BuiltinMethod("__contains__", "TO", "b", "PySequence_Contains"),
+ BuiltinMethod("clear", "T", "r", "PySet_Clear"),
+ # discard() and remove() have a special treatment for unhashable values
BuiltinMethod("discard", "TO", "r", "__Pyx_PySet_Discard",
utility_code=UtilityCode.load("py_set_discard", "Optimize.c")),
BuiltinMethod("remove", "TO", "r", "__Pyx_PySet_Remove",
@@ -336,114 +336,114 @@ builtin_types_table = [
# update is actually variadic (see Github issue #1645)
# BuiltinMethod("update", "TO", "r", "__Pyx_PySet_Update",
# utility_code=UtilityCode.load_cached("PySet_Update", "Builtins.c")),
- BuiltinMethod("add", "TO", "r", "PySet_Add"),
- BuiltinMethod("pop", "T", "O", "PySet_Pop")]),
- ("frozenset", "PyFrozenSet_Type", []),
+ BuiltinMethod("add", "TO", "r", "PySet_Add"),
+ BuiltinMethod("pop", "T", "O", "PySet_Pop")]),
+ ("frozenset", "PyFrozenSet_Type", []),
("Exception", "((PyTypeObject*)PyExc_Exception)[0]", []),
("StopAsyncIteration", "((PyTypeObject*)__Pyx_PyExc_StopAsyncIteration)[0]", []),
-]
-
-
-types_that_construct_their_instance = set([
- # some builtin types do not always return an instance of
- # themselves - these do:
- 'type', 'bool', 'long', 'float', 'complex',
- 'bytes', 'unicode', 'bytearray',
- 'tuple', 'list', 'dict', 'set', 'frozenset'
- # 'str', # only in Py3.x
- # 'file', # only in Py2.x
-])
-
-
-builtin_structs_table = [
- ('Py_buffer', 'Py_buffer',
- [("buf", PyrexTypes.c_void_ptr_type),
- ("obj", PyrexTypes.py_object_type),
- ("len", PyrexTypes.c_py_ssize_t_type),
- ("itemsize", PyrexTypes.c_py_ssize_t_type),
- ("readonly", PyrexTypes.c_bint_type),
- ("ndim", PyrexTypes.c_int_type),
- ("format", PyrexTypes.c_char_ptr_type),
- ("shape", PyrexTypes.c_py_ssize_t_ptr_type),
- ("strides", PyrexTypes.c_py_ssize_t_ptr_type),
- ("suboffsets", PyrexTypes.c_py_ssize_t_ptr_type),
- ("smalltable", PyrexTypes.CArrayType(PyrexTypes.c_py_ssize_t_type, 2)),
- ("internal", PyrexTypes.c_void_ptr_type),
- ]),
- ('Py_complex', 'Py_complex',
- [('real', PyrexTypes.c_double_type),
- ('imag', PyrexTypes.c_double_type),
- ])
-]
-
-# set up builtin scope
-
-builtin_scope = BuiltinScope()
-
-def init_builtin_funcs():
- for bf in builtin_function_table:
- bf.declare_in_scope(builtin_scope)
-
-builtin_types = {}
-
-def init_builtin_types():
- global builtin_types
- for name, cname, methods in builtin_types_table:
- utility = builtin_utility_code.get(name)
- if name == 'frozenset':
- objstruct_cname = 'PySetObject'
+]
+
+
+types_that_construct_their_instance = set([
+ # some builtin types do not always return an instance of
+ # themselves - these do:
+ 'type', 'bool', 'long', 'float', 'complex',
+ 'bytes', 'unicode', 'bytearray',
+ 'tuple', 'list', 'dict', 'set', 'frozenset'
+ # 'str', # only in Py3.x
+ # 'file', # only in Py2.x
+])
+
+
+builtin_structs_table = [
+ ('Py_buffer', 'Py_buffer',
+ [("buf", PyrexTypes.c_void_ptr_type),
+ ("obj", PyrexTypes.py_object_type),
+ ("len", PyrexTypes.c_py_ssize_t_type),
+ ("itemsize", PyrexTypes.c_py_ssize_t_type),
+ ("readonly", PyrexTypes.c_bint_type),
+ ("ndim", PyrexTypes.c_int_type),
+ ("format", PyrexTypes.c_char_ptr_type),
+ ("shape", PyrexTypes.c_py_ssize_t_ptr_type),
+ ("strides", PyrexTypes.c_py_ssize_t_ptr_type),
+ ("suboffsets", PyrexTypes.c_py_ssize_t_ptr_type),
+ ("smalltable", PyrexTypes.CArrayType(PyrexTypes.c_py_ssize_t_type, 2)),
+ ("internal", PyrexTypes.c_void_ptr_type),
+ ]),
+ ('Py_complex', 'Py_complex',
+ [('real', PyrexTypes.c_double_type),
+ ('imag', PyrexTypes.c_double_type),
+ ])
+]
+
+# set up builtin scope
+
+builtin_scope = BuiltinScope()
+
+def init_builtin_funcs():
+ for bf in builtin_function_table:
+ bf.declare_in_scope(builtin_scope)
+
+builtin_types = {}
+
+def init_builtin_types():
+ global builtin_types
+ for name, cname, methods in builtin_types_table:
+ utility = builtin_utility_code.get(name)
+ if name == 'frozenset':
+ objstruct_cname = 'PySetObject'
elif name == 'bytearray':
objstruct_cname = 'PyByteArrayObject'
- elif name == 'bool':
- objstruct_cname = None
+ elif name == 'bool':
+ objstruct_cname = None
elif name == 'Exception':
objstruct_cname = "PyBaseExceptionObject"
elif name == 'StopAsyncIteration':
objstruct_cname = "PyBaseExceptionObject"
- else:
- objstruct_cname = 'Py%sObject' % name.capitalize()
- the_type = builtin_scope.declare_builtin_type(name, cname, utility, objstruct_cname)
- builtin_types[name] = the_type
- for method in methods:
- method.declare_in_type(the_type)
-
-def init_builtin_structs():
- for name, cname, attribute_types in builtin_structs_table:
- scope = StructOrUnionScope(name)
- for attribute_name, attribute_type in attribute_types:
- scope.declare_var(attribute_name, attribute_type, None,
- attribute_name, allow_pyobject=True)
- builtin_scope.declare_struct_or_union(
- name, "struct", scope, 1, None, cname = cname)
-
-
-def init_builtins():
- init_builtin_structs()
- init_builtin_types()
- init_builtin_funcs()
-
- builtin_scope.declare_var(
- '__debug__', PyrexTypes.c_const_type(PyrexTypes.c_bint_type),
- pos=None, cname='(!Py_OptimizeFlag)', is_cdef=True)
-
- global list_type, tuple_type, dict_type, set_type, frozenset_type
- global bytes_type, str_type, unicode_type, basestring_type, slice_type
- global float_type, bool_type, type_type, complex_type, bytearray_type
- type_type = builtin_scope.lookup('type').type
- list_type = builtin_scope.lookup('list').type
- tuple_type = builtin_scope.lookup('tuple').type
- dict_type = builtin_scope.lookup('dict').type
- set_type = builtin_scope.lookup('set').type
- frozenset_type = builtin_scope.lookup('frozenset').type
- slice_type = builtin_scope.lookup('slice').type
- bytes_type = builtin_scope.lookup('bytes').type
- str_type = builtin_scope.lookup('str').type
- unicode_type = builtin_scope.lookup('unicode').type
- basestring_type = builtin_scope.lookup('basestring').type
- bytearray_type = builtin_scope.lookup('bytearray').type
- float_type = builtin_scope.lookup('float').type
- bool_type = builtin_scope.lookup('bool').type
- complex_type = builtin_scope.lookup('complex').type
-
-
-init_builtins()
+ else:
+ objstruct_cname = 'Py%sObject' % name.capitalize()
+ the_type = builtin_scope.declare_builtin_type(name, cname, utility, objstruct_cname)
+ builtin_types[name] = the_type
+ for method in methods:
+ method.declare_in_type(the_type)
+
+def init_builtin_structs():
+ for name, cname, attribute_types in builtin_structs_table:
+ scope = StructOrUnionScope(name)
+ for attribute_name, attribute_type in attribute_types:
+ scope.declare_var(attribute_name, attribute_type, None,
+ attribute_name, allow_pyobject=True)
+ builtin_scope.declare_struct_or_union(
+ name, "struct", scope, 1, None, cname = cname)
+
+
+def init_builtins():
+ init_builtin_structs()
+ init_builtin_types()
+ init_builtin_funcs()
+
+ builtin_scope.declare_var(
+ '__debug__', PyrexTypes.c_const_type(PyrexTypes.c_bint_type),
+ pos=None, cname='(!Py_OptimizeFlag)', is_cdef=True)
+
+ global list_type, tuple_type, dict_type, set_type, frozenset_type
+ global bytes_type, str_type, unicode_type, basestring_type, slice_type
+ global float_type, bool_type, type_type, complex_type, bytearray_type
+ type_type = builtin_scope.lookup('type').type
+ list_type = builtin_scope.lookup('list').type
+ tuple_type = builtin_scope.lookup('tuple').type
+ dict_type = builtin_scope.lookup('dict').type
+ set_type = builtin_scope.lookup('set').type
+ frozenset_type = builtin_scope.lookup('frozenset').type
+ slice_type = builtin_scope.lookup('slice').type
+ bytes_type = builtin_scope.lookup('bytes').type
+ str_type = builtin_scope.lookup('str').type
+ unicode_type = builtin_scope.lookup('unicode').type
+ basestring_type = builtin_scope.lookup('basestring').type
+ bytearray_type = builtin_scope.lookup('bytearray').type
+ float_type = builtin_scope.lookup('float').type
+ bool_type = builtin_scope.lookup('bool').type
+ complex_type = builtin_scope.lookup('complex').type
+
+
+init_builtins()