| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- """Primitive bytes ops."""
- from __future__ import annotations
- from mypyc.ir.ops import ERR_MAGIC
- from mypyc.ir.rtypes import (
- RUnion,
- bytes_rprimitive,
- c_int_rprimitive,
- c_pyssize_t_rprimitive,
- dict_rprimitive,
- int_rprimitive,
- list_rprimitive,
- object_rprimitive,
- str_rprimitive,
- )
- from mypyc.primitives.registry import (
- ERR_NEG_INT,
- binary_op,
- custom_op,
- function_op,
- load_address_op,
- method_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 ==/!= (return -1/0/1)
- bytes_compare = custom_op(
- arg_types=[bytes_rprimitive, bytes_rprimitive],
- return_type=c_int_rprimitive,
- c_function_name="CPyBytes_Compare",
- error_kind=ERR_NEG_INT,
- )
- # bytes + bytes
- # bytearray + bytearray
- binary_op(
- name="+",
- arg_types=[bytes_rprimitive, bytes_rprimitive],
- return_type=bytes_rprimitive,
- c_function_name="CPyBytes_Concat",
- error_kind=ERR_MAGIC,
- steals=[True, False],
- )
- # bytes[begin:end]
- bytes_slice_op = custom_op(
- arg_types=[bytes_rprimitive, int_rprimitive, int_rprimitive],
- return_type=bytes_rprimitive,
- c_function_name="CPyBytes_GetSlice",
- error_kind=ERR_MAGIC,
- )
- # bytes[index]
- # bytearray[index]
- method_op(
- name="__getitem__",
- arg_types=[bytes_rprimitive, int_rprimitive],
- return_type=int_rprimitive,
- c_function_name="CPyBytes_GetItem",
- error_kind=ERR_MAGIC,
- )
- # bytes.join(obj)
- method_op(
- name="join",
- arg_types=[bytes_rprimitive, object_rprimitive],
- return_type=bytes_rprimitive,
- c_function_name="CPyBytes_Join",
- error_kind=ERR_MAGIC,
- )
- # Join bytes objects and return a new bytes.
- # The first argument is the total number of the following bytes.
- bytes_build_op = custom_op(
- arg_types=[c_pyssize_t_rprimitive],
- return_type=bytes_rprimitive,
- c_function_name="CPyBytes_Build",
- error_kind=ERR_MAGIC,
- var_arg_type=bytes_rprimitive,
- )
|