# 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, emit=call_negative_bool_emit('CPyDict_Update'), priority=2) # Operation used for **value in dict displays. # This is mostly like dict.update(obj), but has customized error handling. dict_update_in_display_op = custom_op( arg_types=[dict_rprimitive, dict_rprimitive], result_type=bool_rprimitive,
error_kind=ERR_MAGIC, emit=call_emit(funcname), priority=0) binary_op(op='**', arg_types=[object_rprimitive, object_rprimitive], result_type=object_rprimitive, error_kind=ERR_MAGIC, emit=simple_emit('{dest} = PyNumber_Power({args[0]}, {args[1]}, Py_None);'), priority=0) binary_op('in', arg_types=[object_rprimitive, object_rprimitive], result_type=bool_rprimitive, error_kind=ERR_MAGIC, emit=negative_int_emit('{dest} = PySequence_Contains({args[1]}, {args[0]});'), priority=0) binary_op('is', arg_types=[object_rprimitive, object_rprimitive], result_type=bool_rprimitive, error_kind=ERR_NEVER, emit=simple_emit('{dest} = {args[0]} == {args[1]};'), priority=0) binary_op('is not', arg_types=[object_rprimitive, object_rprimitive], result_type=bool_rprimitive, error_kind=ERR_NEVER, emit=simple_emit('{dest} = {args[0]} != {args[1]};'), priority=0)