# 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, error_kind=ERR_FALSE, emit=call_negative_bool_emit('CPyDict_SetItem')) # key in dict binary_op(op='in', arg_types=[object_rprimitive, dict_rprimitive], result_type=bool_rprimitive, error_kind=ERR_MAGIC, format_str='{dest} = {args[0]} in {args[1]} :: dict', emit=negative_int_emit('{dest} = PyDict_Contains({args[1]}, {args[0]});')) # dict1.update(dict2) dict_update_op = method_op( name='update', arg_types=[dict_rprimitive, dict_rprimitive], result_type=bool_rprimitive, error_kind=ERR_FALSE,
# obj1[obj2] method_op('__getitem__', arg_types=[object_rprimitive, object_rprimitive], result_type=object_rprimitive, error_kind=ERR_MAGIC, emit=call_emit('PyObject_GetItem'), priority=0) # obj1[obj2] = obj3 method_op('__setitem__', arg_types=[object_rprimitive, object_rprimitive, object_rprimitive], result_type=bool_rprimitive, error_kind=ERR_FALSE, emit=call_negative_bool_emit('PyObject_SetItem'), priority=0) # del obj1[obj2] method_op('__delitem__', arg_types=[object_rprimitive, object_rprimitive], result_type=bool_rprimitive, error_kind=ERR_FALSE, emit=call_negative_bool_emit('PyObject_DelItem'), priority=0) # hash(obj) func_op( name='builtins.hash', arg_types=[object_rprimitive], result_type=int_rprimitive,
c_function_name='CPySet_Remove', error_kind=ERR_FALSE) # set.discard(obj) c_method_op(name='discard', arg_types=[set_rprimitive, object_rprimitive], return_type=c_int_rprimitive, c_function_name='PySet_Discard', error_kind=ERR_NEG_INT) # set.add(obj) set_add_op = method_op(name='add', arg_types=[set_rprimitive, object_rprimitive], result_type=bool_rprimitive, error_kind=ERR_FALSE, emit=call_negative_bool_emit('PySet_Add')) # set.update(obj) # # This is not a public API but looks like it should be fine. set_update_op = method_op(name='update', arg_types=[set_rprimitive, object_rprimitive], result_type=bool_rprimitive, error_kind=ERR_FALSE, emit=call_negative_bool_emit('_PySet_Update')) # set.clear() method_op(name='clear', arg_types=[set_rprimitive], result_type=bool_rprimitive, error_kind=ERR_FALSE,
# list[index] = obj list_set_item_op = method_op( name='__setitem__', arg_types=[list_rprimitive, int_rprimitive, object_rprimitive], steals=[False, False, True], result_type=bool_rprimitive, error_kind=ERR_FALSE, emit=call_emit('CPyList_SetItem')) # list.append(obj) list_append_op = method_op(name='append', arg_types=[list_rprimitive, object_rprimitive], result_type=bool_rprimitive, error_kind=ERR_FALSE, emit=call_negative_bool_emit('PyList_Append')) # list.extend(obj) list_extend_op = method_op(name='extend', arg_types=[list_rprimitive, object_rprimitive], result_type=object_rprimitive, error_kind=ERR_MAGIC, emit=call_emit('CPyList_Extend')) # list.pop() list_pop_last = method_op(name='pop', arg_types=[list_rprimitive], result_type=object_rprimitive, error_kind=ERR_MAGIC, emit=call_emit('CPyList_PopLast'))