Skip to content

Commit b320f66

Browse files
committed
Add irbuild glue test for property setter, remove stale comment
1 parent dcb31e1 commit b320f66

2 files changed

Lines changed: 75 additions & 2 deletions

File tree

mypyc/test-data/irbuild-glue-methods.test

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,3 +453,78 @@ class EE(E):
453453
main:7: error: An argument with type "i64" cannot be given a default value in a method override
454454
main:13: error: Incompatible argument type "i64" (base class has type "int")
455455
main:18: error: Incompatible argument type "int" (base class has type "i64")
456+
457+
[case testPropertySetterShadowGlue]
458+
import mypy_extensions
459+
460+
@mypy_extensions.mypyc_attr(allow_interpreted_subclasses=True)
461+
class Base:
462+
_x: str
463+
464+
def __init__(self) -> None:
465+
self._x = ""
466+
467+
@property
468+
def x(self) -> str:
469+
return self._x
470+
471+
@x.setter
472+
def x(self, v: str) -> None:
473+
self._x = v
474+
[out]
475+
def Base.__init__(self):
476+
self :: __main__.Base
477+
r0 :: str
478+
r1 :: bool
479+
L0:
480+
r0 = ''
481+
self._x = r0; r1 = is_error
482+
return 1
483+
def Base.__init____Base_glue(self):
484+
self :: __main__.Base
485+
r0 :: str
486+
r1 :: object[1]
487+
r2 :: object_ptr
488+
r3 :: object
489+
r4 :: None
490+
L0:
491+
r0 = '__init__'
492+
r1 = [self]
493+
r2 = load_address r1
494+
r3 = PyObject_VectorcallMethod(r0, r2, 9223372036854775809, 0)
495+
keep_alive self
496+
r4 = unbox(None, r3)
497+
return r4
498+
def Base.x(self):
499+
self :: __main__.Base
500+
r0 :: str
501+
L0:
502+
r0 = self._x
503+
return r0
504+
def Base.x__Base_glue(__mypyc_self__):
505+
__mypyc_self__ :: __main__.Base
506+
r0 :: str
507+
r1 :: object
508+
r2 :: str
509+
L0:
510+
r0 = 'x'
511+
r1 = CPyObject_GetAttr(__mypyc_self__, r0)
512+
r2 = cast(str, r1)
513+
return r2
514+
def Base.__mypyc_setter__x(self, v):
515+
self :: __main__.Base
516+
v :: str
517+
r0 :: bool
518+
L0:
519+
self._x = v; r0 = is_error
520+
return 1
521+
def Base.__mypyc_setter__x__Base_glue(self, v):
522+
self :: __main__.Base
523+
v, r0 :: str
524+
r1 :: i32
525+
r2 :: bit
526+
L0:
527+
r0 = 'x'
528+
r1 = PyObject_SetAttr(self, r0, v)
529+
r2 = r1 >= 0 :: signed
530+
return 1

mypyc/test-data/run-classes.test

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5776,8 +5776,6 @@ assert c.value() == 42
57765776
assert c.derived() == 42
57775777

57785778
[case testPropertyShadowVtableGlue]
5779-
# The setter's shadow glue overwrites the getter's (both keyed by fdef.name),
5780-
# misaligning subsequent vtable entries -> segfault on interpreted subclasses.
57815779
from typing import List
57825780
import mypy_extensions
57835781

0 commit comments

Comments
 (0)