Ejemplo n.º 1
0
def int_unary_op(name: str, c_function_name: str) -> CFunctionDescription:
    return c_unary_op(name=name,
                      arg_type=int_rprimitive,
                      return_type=int_rprimitive,
                      c_function_name=c_function_name,
                      error_kind=ERR_NEVER)
Ejemplo n.º 2
0
    return_type=c_int_rprimitive,
    c_function_name='PySequence_Contains',
    error_kind=ERR_NEG_INT,
    truncated_type=bool_rprimitive,
    ordering=[1, 0],
    priority=0)


# Unary operations

for op, funcname in [('-', 'PyNumber_Negative'),
                     ('+', 'PyNumber_Positive'),
                     ('~', 'PyNumber_Invert')]:
    c_unary_op(name=op,
               arg_type=object_rprimitive,
               return_type=object_rprimitive,
               c_function_name=funcname,
               error_kind=ERR_MAGIC,
               priority=0)

c_unary_op(
    name='not',
    arg_type=object_rprimitive,
    return_type=c_int_rprimitive,
    c_function_name='PyObject_Not',
    error_kind=ERR_NEG_INT,
    truncated_type=bool_rprimitive,
    priority=0)

# obj1[obj2]
c_method_op(name='__getitem__',
            arg_types=[object_rprimitive, object_rprimitive],
Ejemplo n.º 3
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)


# Unary operations

for op, funcname in [('-', 'PyNumber_Negative'),
                     ('+', 'PyNumber_Positive'),
                     ('~', 'PyNumber_Invert')]:
    c_unary_op(name=op,
               arg_type=object_rprimitive,
               return_type=object_rprimitive,
               c_function_name=funcname,
               error_kind=ERR_MAGIC,
               priority=0)

unary_op(op='not',
         arg_type=object_rprimitive,
         result_type=bool_rprimitive,
         error_kind=ERR_MAGIC,
         format_str='{dest} = not {args[0]}',
         emit=call_negative_magic_emit('PyObject_Not'),
         priority=0)


# obj1[obj2]
c_method_op(name='__getitem__',
            arg_types=[object_rprimitive, object_rprimitive],