init
This commit is contained in:
commit
38355d2442
9083 changed files with 1225834 additions and 0 deletions
|
|
@ -0,0 +1,68 @@
|
|||
"""Primitive tuple ops for *variable-length* tuples.
|
||||
|
||||
Note: Varying-length tuples are represented as boxed Python tuple
|
||||
objects, i.e. tuple_rprimitive (RPrimitive), not RTuple.
|
||||
"""
|
||||
|
||||
from mypyc.ir.ops import ERR_MAGIC, ERR_FALSE
|
||||
from mypyc.ir.rtypes import (
|
||||
tuple_rprimitive, int_rprimitive, list_rprimitive, object_rprimitive,
|
||||
c_pyssize_t_rprimitive, bit_rprimitive
|
||||
)
|
||||
from mypyc.primitives.registry import method_op, function_op, custom_op
|
||||
|
||||
|
||||
# tuple[index] (for an int index)
|
||||
tuple_get_item_op = method_op(
|
||||
name='__getitem__',
|
||||
arg_types=[tuple_rprimitive, int_rprimitive],
|
||||
return_type=object_rprimitive,
|
||||
c_function_name='CPySequenceTuple_GetItem',
|
||||
error_kind=ERR_MAGIC)
|
||||
|
||||
# Construct a boxed tuple from items: (item1, item2, ...)
|
||||
new_tuple_op = custom_op(
|
||||
arg_types=[c_pyssize_t_rprimitive],
|
||||
return_type=tuple_rprimitive,
|
||||
c_function_name='PyTuple_Pack',
|
||||
error_kind=ERR_MAGIC,
|
||||
var_arg_type=object_rprimitive)
|
||||
|
||||
new_tuple_with_length_op = custom_op(
|
||||
arg_types=[c_pyssize_t_rprimitive],
|
||||
return_type=tuple_rprimitive,
|
||||
c_function_name='PyTuple_New',
|
||||
error_kind=ERR_MAGIC)
|
||||
|
||||
# PyTuple_SET_ITEM does no error checking,
|
||||
# and should only be used to fill in brand new tuples.
|
||||
new_tuple_set_item_op = custom_op(
|
||||
arg_types=[tuple_rprimitive, int_rprimitive, object_rprimitive],
|
||||
return_type=bit_rprimitive,
|
||||
c_function_name='CPySequenceTuple_SetItemUnsafe',
|
||||
error_kind=ERR_FALSE,
|
||||
steals=[False, False, True])
|
||||
|
||||
# Construct tuple from a list.
|
||||
list_tuple_op = function_op(
|
||||
name='builtins.tuple',
|
||||
arg_types=[list_rprimitive],
|
||||
return_type=tuple_rprimitive,
|
||||
c_function_name='PyList_AsTuple',
|
||||
error_kind=ERR_MAGIC,
|
||||
priority=2)
|
||||
|
||||
# Construct tuple from an arbitrary (iterable) object.
|
||||
function_op(
|
||||
name='builtins.tuple',
|
||||
arg_types=[object_rprimitive],
|
||||
return_type=tuple_rprimitive,
|
||||
c_function_name='PySequence_Tuple',
|
||||
error_kind=ERR_MAGIC)
|
||||
|
||||
# tuple[begin:end]
|
||||
tuple_slice_op = custom_op(
|
||||
arg_types=[tuple_rprimitive, int_rprimitive, int_rprimitive],
|
||||
return_type=object_rprimitive,
|
||||
c_function_name='CPySequenceTuple_GetSlice',
|
||||
error_kind=ERR_MAGIC)
|
||||
Loading…
Add table
Add a link
Reference in a new issue