Пример #1
0
         format_str='{dest} = !{args[0]}',
         emit=simple_emit('{dest} = !{args[0]};'),
         priority=1)

method_op('__getitem__',
          arg_types=[object_rprimitive, object_rprimitive],
          result_type=object_rprimitive,
          error_kind=ERR_MAGIC,
          emit=call_emit('PyObject_GetItem'),
          priority=0)

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)

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)

func_op(name='builtins.hash',
        arg_types=[object_rprimitive],
        result_type=int_rprimitive,
        error_kind=ERR_MAGIC,
        emit=call_emit('CPyObject_Hash'))
Пример #2
0
    format_str='{dest} = {args[0]}[{args[1]}] :: unsafe list',
    emit=simple_emit('{dest} = CPyList_GetItemUnsafe({args[0]}, {args[1]});'))

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_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_op = method_op(
    name='extend',
    arg_types=[list_rprimitive, object_rprimitive],
    result_type=object_rprimitive,
    error_kind=ERR_MAGIC,
    emit=simple_emit(
        '{dest} = _PyList_Extend((PyListObject *) {args[0]}, {args[1]});'))

method_op(name='pop',
          arg_types=[list_rprimitive],
          result_type=object_rprimitive,
          error_kind=ERR_MAGIC,
          emit=call_emit('CPyList_PopLast'))
Пример #3
0
            error_kind=ERR_NEVER,
            emit=simple_emit('{dest} = (PyObject *)&PyDict_Type;'),
            is_borrowed=True)

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_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'))

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]});'))

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)
Пример #4
0
    result_type=bool_rprimitive,
    error_kind=ERR_MAGIC,
    format_str='{dest} = {args[0]} in {args[1]} :: set',
    emit=negative_int_emit('{dest} = PySet_Contains({args[1]}, {args[0]});'))

method_op(name='remove',
          arg_types=[set_rprimitive, object_rprimitive],
          result_type=bool_rprimitive,
          error_kind=ERR_FALSE,
          emit=call_emit('CPySet_Remove'))

method_op(name='discard',
          arg_types=[set_rprimitive, object_rprimitive],
          result_type=bool_rprimitive,
          error_kind=ERR_FALSE,
          emit=call_negative_bool_emit('PySet_Discard'))

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'))

# This is not a public API but looks like it should be fine.
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'))

method_op(name='clear',