Beispiel #1
0
# 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,
Beispiel #2
0

# 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,
Beispiel #3
0
            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,
Beispiel #4
0
# 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'))