예제 #1
0
파일: int_ops.py 프로젝트: tmehlinger/mypy
    name_ref_op,
    binary_op,
    unary_op,
    func_op,
    custom_op,
    simple_emit,
    call_emit,
)

# These int constructors produce object_rprimitives that then need to be unboxed
# I guess unboxing ourselves would save a check and branch though?

# For ordinary calls to int() we use a name_ref to the type
name_ref_op('builtins.int',
            result_type=object_rprimitive,
            error_kind=ERR_NEVER,
            emit=simple_emit('{dest} = (PyObject *)&PyLong_Type;'),
            is_borrowed=True)

# Convert from a float. We could do a bit better directly.
func_op(name='builtins.int',
        arg_types=[float_rprimitive],
        result_type=object_rprimitive,
        error_kind=ERR_MAGIC,
        emit=call_emit('CPyLong_FromFloat'),
        priority=1)


def int_binary_op(op: str,
                  c_func_name: str,
                  result_type: RType = int_rprimitive,
예제 #2
0
파일: str_ops.py 프로젝트: kuldip11/mypy
"""Primitive str ops."""

from typing import List, Callable

from mypyc.ir.ops import ERR_MAGIC, ERR_NEVER, EmitterInterface, EmitCallback
from mypyc.ir.rtypes import (RType, object_rprimitive, str_rprimitive,
                             bool_rprimitive, int_rprimitive, list_rprimitive)
from mypyc.primitives.registry import (func_op, binary_op, simple_emit,
                                       name_ref_op, method_op, call_emit,
                                       name_emit, c_method_op)

# Get the 'str' type object.
name_ref_op('builtins.str',
            result_type=object_rprimitive,
            error_kind=ERR_NEVER,
            emit=name_emit('&PyUnicode_Type', target_type='PyObject *'),
            is_borrowed=True)

# str(obj)
func_op(name='builtins.str',
        arg_types=[object_rprimitive],
        result_type=str_rprimitive,
        error_kind=ERR_MAGIC,
        emit=call_emit('PyObject_Str'))

# str1 + str2
binary_op(op='+',
          arg_types=[str_rprimitive, str_rprimitive],
          result_type=str_rprimitive,
          error_kind=ERR_MAGIC,
          emit=call_emit('PyUnicode_Concat'))
예제 #3
0
파일: misc_ops.py 프로젝트: wesleyks/mypy
from mypyc.primitives.registry import (name_ref_op, simple_emit, unary_op,
                                       func_op, custom_op, call_emit,
                                       name_emit, call_negative_magic_emit,
                                       c_function_op)

# Get the boxed Python 'None' object
none_object_op = custom_op(result_type=object_rprimitive,
                           arg_types=[],
                           error_kind=ERR_NEVER,
                           format_str='{dest} = builtins.None :: object',
                           emit=name_emit('Py_None'),
                           is_borrowed=True)

# Get an unboxed None value
none_op = name_ref_op('builtins.None',
                      result_type=none_rprimitive,
                      error_kind=ERR_NEVER,
                      emit=simple_emit('{dest} = 1; /* None */'))

# Get an unboxed True value
true_op = name_ref_op('builtins.True',
                      result_type=bool_rprimitive,
                      error_kind=ERR_NEVER,
                      emit=simple_emit('{dest} = 1;'))

# Get an unboxed False value
false_op = name_ref_op('builtins.False',
                       result_type=bool_rprimitive,
                       error_kind=ERR_NEVER,
                       emit=simple_emit('{dest} = 0;'))

# Get the boxed object '...'
예제 #4
0
from mypyc.ir.ops import EmitterInterface, ERR_FALSE, ERR_MAGIC, ERR_NEVER
from mypyc.ir.rtypes import (dict_rprimitive, object_rprimitive,
                             bool_rprimitive, int_rprimitive, list_rprimitive,
                             dict_next_rtuple_single, dict_next_rtuple_pair,
                             c_pyssize_t_rprimitive)

from mypyc.primitives.registry import (name_ref_op, method_op, binary_op,
                                       func_op, custom_op, simple_emit,
                                       negative_int_emit, call_emit,
                                       call_negative_bool_emit, name_emit,
                                       c_custom_op, c_method_op, c_function_op)

# Get the 'dict' type object.
name_ref_op('builtins.dict',
            result_type=object_rprimitive,
            error_kind=ERR_NEVER,
            emit=name_emit('&PyDict_Type', target_type="PyObject *"),
            is_borrowed=True)

# 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,