10000 [mypyc] Add bytes concat op by 97littleleaf11 · Pull Request #10926 · python/mypy · GitHub
[go: up one dir, main page]

Skip to content

[mypyc] Add bytes concat op #10926

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Aug 6, 2021
Next Next commit
[mypyc] Add bytes and bytearray initialization ops
  • Loading branch information
97littleleaf11 committed Aug 1, 2021
commit c13c6babc4a8985b05de6053d656ecb101250475
21 changes: 19 additions & 2 deletions mypyc/primitives/bytes_ops.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,28 @@
"""Primitive bytes ops."""

from mypyc.ir.rtypes import object_rprimitive
from mypyc.primitives.registry import load_address_op
from mypyc.ir.ops import ERR_MAGIC
from mypyc.ir.rtypes import object_rprimitive, bytes_rprimitive
from mypyc.primitives.registry import load_address_op, function_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=[object_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)
40 changes: 40 additions & 0 deletions mypyc/test-data/irbuild-bytes.test
8000
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[case testBytesBasics]
def f(s: str) -> None:
a = bytes()
b = bytes(s)
[out]
def f(s):
s :: str
r0, r1 :: object
r2, a, r3, b :: bytes
L0:
r0 = load_address PyBytes_Type
r1 = PyObject_CallFunctionObjArgs(r0, 0)
r2 = cast(bytes, r1)
a = r2
r3 = PyBytes_FromObject(s)
b = r3
return 1

[case testBytearrayBasics]
def f(s: str) -> None:
a = bytearray()
b = bytearray(s)
[out]
def f(s):
s :: str
r0 :: object
r1 :: str
r2, r3, a :: object
r4 :: bytes
b :: object
L0:
r0 = builtins :: module
r1 = 'bytearray'
r2 = CPyObject_GetAttr(r0, r1)
r3 = PyObject_CallFunctionObjArgs(r2, 0)
a = r3
r4 = PyByteArray_FromObject(s)
b = r4
return 1

9 changes: 5 additions & 4 deletions mypyc/test/test_irbuild.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,21 @@

files = [
'irbuild-basic.test',
'irbuild-int.test',
'irbuild-lists.test',
'irbuild-tuple.test',
'irbuild-dict.test',
'irbuild-set.test',
'irbuild-str.test',
'irbuild-bytes.test',
'irbuild-statements.test',
'irbuild-nested.test',
'irbuild-classes.test',
'irbuild-optional.test',
'irbuild-tuple.test',
'irbuild-any.test',
'irbuild-generics.test',
'irbuild-try.test',
'irbuild-set.test',
'irbuild-str.test',
'irbuild-strip-asserts.test',
'irbuild-int.test',
'irbuild-vectorcall.test',
'irbuild-unreachable.test',
'irbuild-isinstance.test',
Expand Down
0