示例#1
0
"""List primitive ops."""

from typing import List

from mypyc.ir.ops import ERR_MAGIC, ERR_NEVER, ERR_FALSE, ERR_NEG_INT, EmitterInterface
from mypyc.ir.rtypes import (int_rprimitive, short_int_rprimitive,
                             list_rprimitive, object_rprimitive,
                             bool_rprimitive, c_int_rprimitive,
                             c_pyssize_t_rprimitive)
from mypyc.primitives.registry import (load_address_op, c_function_op,
                                       c_binary_op, c_method_op, c_custom_op)

# Get the 'builtins.list' type object.
load_address_op(name='builtins.list',
                type=object_rprimitive,
                src='PyList_Type')

# list(obj)
to_list = c_function_op(
    name='builtins.list',
    arg_types=[object_rprimitive],
    return_type=list_rprimitive,
    c_function_name='PySequence_List',
    error_kind=ERR_MAGIC,
)

new_list_op = c_custom_op(arg_types=[c_pyssize_t_rprimitive],
                          return_type=list_rprimitive,
                          c_function_name='PyList_New',
                          error_kind=ERR_MAGIC)
示例#2
0
"""Primitive dict ops."""

from mypyc.ir.ops import 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, c_int_rprimitive,
                             bit_rprimitive)

from mypyc.primitives.registry import (custom_op, method_op, function_op,
                                       binary_op, load_address_op, ERR_NEG_INT)

# Get the 'dict' type object.
load_address_op(name='builtins.dict',
                type=object_rprimitive,
                src='PyDict_Type')

# Construct an empty dictionary via dict().
function_op(name='builtins.dict',
            arg_types=[],
            return_type=dict_rprimitive,
            c_function_name='PyDict_New',
            error_kind=ERR_MAGIC)

# Construct an empty dictionary.
dict_new_op = custom_op(arg_types=[],
                        return_type=dict_rprimitive,
                        c_function_name='PyDict_New',
                        error_kind=ERR_MAGIC)

# Construct a dictionary from keys and values.
示例#3
0
文件: misc_ops.py 项目: sthagen/mypy
    object_rprimitive,
    str_rprimitive,
    object_pointer_rprimitive,
    int_rprimitive,
    dict_rprimitive,
    c_int_rprimitive,
    bit_rprimitive,
    c_pyssize_t_rprimitive,
    list_rprimitive,
)
from mypyc.primitives.registry import (function_op, custom_op, load_address_op,
                                       ERR_NEG_INT)

# Get the 'bool' type object.
load_address_op(name='builtins.bool',
                type=object_rprimitive,
                src='PyBool_Type')

# Get the 'range' type object.
load_address_op(name='builtins.range',
                type=object_rprimitive,
                src='PyRange_Type')

# Get the boxed Python 'None' object
none_object_op = load_address_op(name='Py_None',
                                 type=object_rprimitive,
                                 src='_Py_NoneStruct')

# Get the boxed object '...'
ellipsis_op = load_address_op(name='...',
                              type=object_rprimitive,
示例#4
0
文件: str_ops.py 项目: sthagen/mypy
"""Primitive str ops."""

from typing import List, Tuple

from mypyc.ir.ops import ERR_MAGIC, ERR_NEVER
from mypyc.ir.rtypes import (RType, object_rprimitive, str_rprimitive,
                             int_rprimitive, list_rprimitive, c_int_rprimitive,
                             pointer_rprimitive, bool_rprimitive,
                             bit_rprimitive, c_pyssize_t_rprimitive,
                             bytes_rprimitive)
from mypyc.primitives.registry import (method_op, binary_op, function_op,
                                       load_address_op, custom_op, ERR_NEG_INT)

# Get the 'str' type object.
load_address_op(name='builtins.str',
                type=object_rprimitive,
                src='PyUnicode_Type')

# str(obj)
str_op = function_op(name='builtins.str',
                     arg_types=[object_rprimitive],
                     return_type=str_rprimitive,
                     c_function_name='PyObject_Str',
                     error_kind=ERR_MAGIC)

# str1 + str2
binary_op(name='+',
          arg_types=[str_rprimitive, str_rprimitive],
          return_type=str_rprimitive,
          c_function_name='PyUnicode_Concat',
          error_kind=ERR_MAGIC)
示例#5
0
文件: bytes_ops.py 项目: alanhdu/mypy
"""Primitive bytes ops."""

from mypyc.ir.ops import ERR_MAGIC
from mypyc.ir.rtypes import (object_rprimitive, bytes_rprimitive,
                             list_rprimitive, dict_rprimitive, str_rprimitive,
                             RUnion)
from mypyc.primitives.registry import (load_address_op, function_op, method_op,
                                       binary_op)

# Get the 'bytes' type object.
load_address_op(name='builtins.bytes',
                type=object_rprimitive,
                src='PyBytes_Type')

# bytes(obj)
function_op(
    name='builtins.bytes',
    arg_types=[RUnion([list_rprimitive, dict_rprimitive, str_rprimitive])],
    return_type=bytes_rprimitive,
    c_function_name='PyBytes_FromObject',
    error_kind=ERR_MAGIC)

# bytearray(obj)
function_op(name='builtins.bytearray',
            arg_types=[object_rprimitive],
            return_type=bytes_rprimitive,
            c_function_name='PyByteArray_FromObject',
            error_kind=ERR_MAGIC)

# bytes + bytes
# bytearray + bytearray
示例#6
0
from mypyc.ir.ops import ERR_NEVER, ERR_MAGIC, ComparisonOp
from mypyc.ir.rtypes import (
    int_rprimitive, bool_rprimitive, float_rprimitive, object_rprimitive,
    str_rprimitive, RType
)
from mypyc.primitives.registry import (
    load_address_op, 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 load_address to the type
load_address_op(
    name='builtins.int',
    type=object_rprimitive,
    src='PyLong_Type')

# 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,
示例#7
0
                           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')

# id(obj)
c_function_op(name='builtins.id',
              arg_types=[object_rprimitive],
              return_type=int_rprimitive,
              c_function_name='CPyTagged_Id',
              error_kind=ERR_NEVER)

# Return the result of obj.__await()__ or obj.__iter__() (if no __await__ exists)
coro_op = c_custom_op(arg_types=[object_rprimitive],
                      return_type=object_rprimitive,
                      c_function_name='CPy_GetCoro',
                      error_kind=ERR_MAGIC)