name_ref_op, binary_op, unary_op, func_op, custom_op, simple_emit, call_emit, ) # These int constructors produce object_rprimitives that then need to be unboxed # I guess unboxing ourselves would save a check and branch though? # For ordinary calls to int() we use a name_ref to the type name_ref_op('builtins.int', result_type=object_rprimitive, error_kind=ERR_NEVER, emit=simple_emit('{dest} = (PyObject *)&PyLong_Type;'), is_borrowed=True) # Convert from a float. We could do a bit better directly. func_op(name='builtins.int', arg_types=[float_rprimitive], result_type=object_rprimitive, error_kind=ERR_MAGIC, emit=call_emit('CPyLong_FromFloat'), priority=1) def int_binary_op(op: str, c_func_name: str, result_type: RType = int_rprimitive,
"""Primitive str ops.""" from typing import List, Callable from mypyc.ir.ops import ERR_MAGIC, ERR_NEVER, EmitterInterface, EmitCallback from mypyc.ir.rtypes import (RType, object_rprimitive, str_rprimitive, bool_rprimitive, int_rprimitive, list_rprimitive) from mypyc.primitives.registry import (func_op, binary_op, simple_emit, name_ref_op, method_op, call_emit, name_emit, c_method_op) # Get the 'str' type object. name_ref_op('builtins.str', result_type=object_rprimitive, error_kind=ERR_NEVER, emit=name_emit('&PyUnicode_Type', target_type='PyObject *'), is_borrowed=True) # str(obj) func_op(name='builtins.str', arg_types=[object_rprimitive], result_type=str_rprimitive, error_kind=ERR_MAGIC, emit=call_emit('PyObject_Str')) # str1 + str2 binary_op(op='+', arg_types=[str_rprimitive, str_rprimitive], result_type=str_rprimitive, error_kind=ERR_MAGIC, emit=call_emit('PyUnicode_Concat'))
from mypyc.primitives.registry import (name_ref_op, simple_emit, unary_op, func_op, custom_op, call_emit, name_emit, call_negative_magic_emit, c_function_op) # Get the boxed Python 'None' object none_object_op = custom_op(result_type=object_rprimitive, arg_types=[], error_kind=ERR_NEVER, format_str='{dest} = builtins.None :: object', emit=name_emit('Py_None'), is_borrowed=True) # Get an unboxed None value none_op = name_ref_op('builtins.None', result_type=none_rprimitive, error_kind=ERR_NEVER, emit=simple_emit('{dest} = 1; /* None */')) # Get an unboxed True value true_op = name_ref_op('builtins.True', result_type=bool_rprimitive, error_kind=ERR_NEVER, emit=simple_emit('{dest} = 1;')) # Get an unboxed False value false_op = name_ref_op('builtins.False', result_type=bool_rprimitive, error_kind=ERR_NEVER, emit=simple_emit('{dest} = 0;')) # Get the boxed object '...'
from mypyc.ir.ops import EmitterInterface, 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) from mypyc.primitives.registry import (name_ref_op, method_op, binary_op, func_op, custom_op, simple_emit, negative_int_emit, call_emit, call_negative_bool_emit, name_emit, c_custom_op, c_method_op, c_function_op) # Get the 'dict' type object. name_ref_op('builtins.dict', result_type=object_rprimitive, error_kind=ERR_NEVER, emit=name_emit('&PyDict_Type', target_type="PyObject *"), is_borrowed=True) # dict[key] dict_get_item_op = method_op(name='__getitem__', arg_types=[dict_rprimitive, object_rprimitive], result_type=object_rprimitive, error_kind=ERR_MAGIC, emit=call_emit('CPyDict_GetItem')) # dict[key] = value dict_set_item_op = method_op( name='__setitem__', arg_types=[dict_rprimitive, object_rprimitive, object_rprimitive], result_type=bool_rprimitive,