Skip to content

Commit 3b71a7f

Browse files
committed
feat: new primitive for weakref.__call__
1 parent 81eadfb commit 3b71a7f

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

mypyc/primitives/weakref_ops.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from mypyc.ir.ops import ERR_MAGIC
22
from mypyc.ir.rtypes import object_rprimitive
3-
from mypyc.primitives.registry import function_op
3+
from mypyc.primitives.registry import ERR_NEG_INT, function_op
44

55
# Weakref operations
66

@@ -11,3 +11,11 @@
1111
c_function_name="PyWeakref_NewRef",
1212
error_kind=ERR_MAGIC,
1313
)
14+
15+
deref_op = function_op(
16+
name="weakref.ReferenceType.__call__",
17+
arg_types=[object_rprimitive],
18+
return_type=object_rprimitive,
19+
c_function_name="PyWeakref_GetRef",
20+
error_kind=ERR_NEG_INT,
21+
)

mypyc/test-data/irbuild-weakref.test

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,26 @@
22
import weakref
33
from typing import Any, Callable
44
def f(x: object, cb: Callable[[object], Any]) -> object:
5-
return weakref.ref(x, cb)
5+
return weakref.ref(x, cb)()
66

77
[out]
88
def f(x, cb):
9-
x, cb, r0 :: object
9+
x, cb, r0, r1 :: object
1010
L0:
1111
r0 = PyWeakref_NewRef(x, cb)
12-
return r0
12+
r1 = PyWeakref_GetRef(r0)
13+
return r1
1314

1415
[case testFromWeakrefRefCallback]
1516
from typing import Any, Callable
1617
from weakref import ref
1718
def f(x: object, cb: Callable[[object], Any]) -> object:
18-
return ref(x, cb)
19+
return ref(x, cb)()
1920

2021
[out]
2122
def f(x, cb):
22-
x, cb, r0 :: object
23+
x, cb, r0, r1 :: object
2324
L0:
2425
r0 = PyWeakref_NewRef(x, cb)
25-
return r0
26+
r1 = PyWeakref_GetRef(r0)
27+
return r1

0 commit comments

Comments
 (0)