"""List primitive ops.""" from typing import List from mypyc.ir.ops import ERR_MAGIC, ERR_NEVER, ERR_FALSE, ERR_NEG_INT, EmitterInterface from mypyc.ir.rtypes import (int_rprimitive, short_int_rprimitive, list_rprimitive, object_rprimitive, bool_rprimitive, c_int_rprimitive, c_pyssize_t_rprimitive) from mypyc.primitives.registry import (load_address_op, c_function_op, c_binary_op, c_method_op, c_custom_op) # Get the 'builtins.list' type object. load_address_op(name='builtins.list', type=object_rprimitive, src='PyList_Type') # list(obj) to_list = c_function_op( name='builtins.list', arg_types=[object_rprimitive], return_type=list_rprimitive, c_function_name='PySequence_List', error_kind=ERR_MAGIC, ) new_list_op = c_custom_op(arg_types=[c_pyssize_t_rprimitive], return_type=list_rprimitive, c_function_name='PyList_New', error_kind=ERR_MAGIC)
"""Primitive dict ops.""" from mypyc.ir.ops import ERR_FALSE, ERR_MAGIC, ERR_NEVER from mypyc.ir.rtypes import (dict_rprimitive, object_rprimitive, bool_rprimitive, int_rprimitive, list_rprimitive, dict_next_rtuple_single, dict_next_rtuple_pair, c_pyssize_t_rprimitive, c_int_rprimitive, bit_rprimitive) from mypyc.primitives.registry import (custom_op, method_op, function_op, binary_op, load_address_op, ERR_NEG_INT) # Get the 'dict' type object. load_address_op(name='builtins.dict', type=object_rprimitive, src='PyDict_Type') # Construct an empty dictionary via dict(). function_op(name='builtins.dict', arg_types=[], return_type=dict_rprimitive, c_function_name='PyDict_New', error_kind=ERR_MAGIC) # Construct an empty dictionary. dict_new_op = custom_op(arg_types=[], return_type=dict_rprimitive, c_function_name='PyDict_New', error_kind=ERR_MAGIC) # Construct a dictionary from keys and values.
object_rprimitive, str_rprimitive, object_pointer_rprimitive, int_rprimitive, dict_rprimitive, c_int_rprimitive, bit_rprimitive, c_pyssize_t_rprimitive, list_rprimitive, ) from mypyc.primitives.registry import (function_op, custom_op, load_address_op, ERR_NEG_INT) # Get the 'bool' type object. load_address_op(name='builtins.bool', type=object_rprimitive, src='PyBool_Type') # Get the 'range' type object. load_address_op(name='builtins.range', type=object_rprimitive, src='PyRange_Type') # Get the boxed Python 'None' object none_object_op = load_address_op(name='Py_None', type=object_rprimitive, src='_Py_NoneStruct') # Get the boxed object '...' ellipsis_op = load_address_op(name='...', type=object_rprimitive,
"""Primitive str ops.""" from typing import List, Tuple from mypyc.ir.ops import ERR_MAGIC, ERR_NEVER from mypyc.ir.rtypes import (RType, object_rprimitive, str_rprimitive, int_rprimitive, list_rprimitive, c_int_rprimitive, pointer_rprimitive, bool_rprimitive, bit_rprimitive, c_pyssize_t_rprimitive, bytes_rprimitive) from mypyc.primitives.registry import (method_op, binary_op, function_op, load_address_op, custom_op, ERR_NEG_INT) # Get the 'str' type object. load_address_op(name='builtins.str', type=object_rprimitive, src='PyUnicode_Type') # str(obj) str_op = function_op(name='builtins.str', arg_types=[object_rprimitive], return_type=str_rprimitive, c_function_name='PyObject_Str', error_kind=ERR_MAGIC) # str1 + str2 binary_op(name='+', arg_types=[str_rprimitive, str_rprimitive], return_type=str_rprimitive, c_function_name='PyUnicode_Concat', error_kind=ERR_MAGIC)
"""Primitive bytes ops.""" from mypyc.ir.ops import ERR_MAGIC from mypyc.ir.rtypes import (object_rprimitive, bytes_rprimitive, list_rprimitive, dict_rprimitive, str_rprimitive, RUnion) from mypyc.primitives.registry import (load_address_op, function_op, method_op, binary_op) # Get the 'bytes' type object. load_address_op(name='builtins.bytes', type=object_rprimitive, src='PyBytes_Type') # bytes(obj) function_op( name='builtins.bytes', arg_types=[RUnion([list_rprimitive, dict_rprimitive, str_rprimitive])], return_type=bytes_rprimitive, c_function_name='PyBytes_FromObject', error_kind=ERR_MAGIC) # bytearray(obj) function_op(name='builtins.bytearray', arg_types=[object_rprimitive], return_type=bytes_rprimitive, c_function_name='PyByteArray_FromObject', error_kind=ERR_MAGIC) # bytes + bytes # bytearray + bytearray
from mypyc.ir.ops import ERR_NEVER, ERR_MAGIC, ComparisonOp from mypyc.ir.rtypes import ( int_rprimitive, bool_rprimitive, float_rprimitive, object_rprimitive, str_rprimitive, RType ) from mypyc.primitives.registry import ( load_address_op, c_unary_op, CFunctionDescription, c_function_op, c_binary_op, c_custom_op ) # These int constructors produce object_rprimitives that then need to be unboxed # I guess unboxing ourselves would save a check and branch though? # Get the type object for 'builtins.int'. # For ordinary calls to int() we use a load_address to the type load_address_op( name='builtins.int', type=object_rprimitive, src='PyLong_Type') # Convert from a float to int. We could do a bit better directly. c_function_op( name='builtins.int', arg_types=[float_rprimitive], return_type=object_rprimitive, c_function_name='CPyLong_FromFloat', error_kind=ERR_MAGIC) # int(string) c_function_op( name='builtins.int', arg_types=[str_rprimitive], return_type=object_rprimitive,
error_kind=ERR_NEVER, format_str='{dest} = builtins.None :: object', emit=name_emit('Py_None'), is_borrowed=True) # Get the boxed object '...' ellipsis_op = custom_op(name='...', arg_types=[], result_type=object_rprimitive, error_kind=ERR_NEVER, emit=name_emit('Py_Ellipsis'), is_borrowed=True) # Get the boxed NotImplemented object not_implemented_op = load_address_op(name='builtins.NotImplemented', type=object_rprimitive, src='_Py_NotImplementedStruct') # id(obj) c_function_op(name='builtins.id', arg_types=[object_rprimitive], return_type=int_rprimitive, c_function_name='CPyTagged_Id', error_kind=ERR_NEVER) # Return the result of obj.__await()__ or obj.__iter__() (if no __await__ exists) coro_op = c_custom_op(arg_types=[object_rprimitive], return_type=object_rprimitive, c_function_name='CPy_GetCoro', error_kind=ERR_MAGIC)