예제 #1
0
파일: misc_ops.py 프로젝트: wesleyks/mypy
from mypyc.ir.ops import ERR_NEVER, ERR_MAGIC, ERR_FALSE, ERR_NEG_INT
from mypyc.ir.rtypes import (RTuple, none_rprimitive, bool_rprimitive,
                             object_rprimitive, str_rprimitive, int_rprimitive,
                             dict_rprimitive, c_int_rprimitive)
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
예제 #2
0
from mypyc.ir.rtypes import (
    RTuple, none_rprimitive, bool_rprimitive, object_rprimitive, str_rprimitive,
    int_rprimitive, dict_rprimitive
)
from mypyc.primitives.registry import (
    name_ref_op, simple_emit, unary_op, func_op, custom_op, call_emit, name_emit,
    call_negative_magic_emit
)


# 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
예제 #3
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'))
예제 #4
0
파일: int_ops.py 프로젝트: sociopath00/mypy
from mypyc.ir.ops import ERR_NEVER, ERR_MAGIC, BinaryIntOp
from mypyc.ir.rtypes import (int_rprimitive, bool_rprimitive, float_rprimitive,
                             object_rprimitive, str_rprimitive, RType)
from mypyc.primitives.registry import (name_ref_op, name_emit, c_unary_op,
                                       CFunctionDescription, c_function_op,
                                       c_binary_op, c_custom_op)

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

# Get the type object for 'builtins.int'.
# 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=name_emit('&PyLong_Type', target_type='PyObject *'),
            is_borrowed=True)

# Convert from a float to int. We could do a bit better directly.
c_function_op(name='builtins.int',
              arg_types=[float_rprimitive],
              return_type=object_rprimitive,
              c_function_name='CPyLong_FromFloat',
              error_kind=ERR_MAGIC)

# int(string)
c_function_op(name='builtins.int',
              arg_types=[str_rprimitive],
              return_type=object_rprimitive,
              c_function_name='CPyLong_FromStr',
              error_kind=ERR_MAGIC)
예제 #5
0
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,
    error_kind=ERR_FALSE,
예제 #6
0
from mypyc.ir.ops import ERR_NEVER, ERR_MAGIC, ERR_FALSE, ERR_NEG_INT
from mypyc.ir.rtypes import (RTuple, bool_rprimitive, object_rprimitive,
                             str_rprimitive, int_rprimitive, dict_rprimitive,
                             c_int_rprimitive)
from mypyc.primitives.registry import (simple_emit, unary_op, func_op,
                                       custom_op, call_emit, name_emit,
                                       call_negative_magic_emit, c_function_op,
                                       c_custom_op, load_address_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 the boxed object '...'
ellipsis_op = custom_op(name='...',
                        arg_types=[],
                        result_type=object_rprimitive,
                        error_kind=ERR_NEVER,
                        emit=name_emit('Py_Ellipsis'),
                        is_borrowed=True)

# Get the boxed NotImplemented object
not_implemented_op = load_address_op(name='builtins.NotImplemented',
                                     type=object_rprimitive,
                                     src='_Py_NotImplementedStruct')