Skip to content

Commit 198e081

Browse files
committed
fix most property tests
1 parent 6a2611b commit 198e081

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

graalpython/lib-graalpython/property.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@
3838
# SOFTWARE.
3939

4040

41+
def _f(): pass
42+
FunctionType = type(_f)
43+
descriptor = type(FunctionType.__code__)
44+
45+
4146
class property(object):
4247
"""
4348
property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
@@ -72,6 +77,15 @@ def __init__(self, fget=None, fset=None, fdel=None, doc=None, name=None):
7277
self.fset = fset
7378
self.fdel = fdel
7479
self.doc = doc
80+
self.getter_doc = False
81+
if self.doc is None and fget:
82+
gdoc = getattr(fget, "__doc__")
83+
if gdoc:
84+
if type(self) is property:
85+
self.doc = gdoc
86+
else:
87+
self.__doc__ = gdoc
88+
self.getter_doc = True
7589
self.name = name
7690
self._owner = None
7791

@@ -117,4 +131,26 @@ def __copy(self, fget=None, fset=None, fdel=None):
117131
_fget = fget if fget is not None else self.fget
118132
_fset = fset if fset is not None else self.fset
119133
_fdel = fdel if fdel is not None else self.fdel
120-
return type(self)(fget=_fget, fset=_fset, fdel=_fdel, doc=self.doc, name=self.name)
134+
_doc = None if (self.getter_doc and _fget) else self.doc
135+
return type(self)(fget=_fget, fset=_fset, fdel=_fdel, doc=_doc, name=self.name)
136+
137+
138+
def isabstract(self):
139+
return (bool(getattr(self.fget, "__isabstractmethod__", False)) or
140+
bool(getattr(self.fset, "__isabstractmethod__", False)) or
141+
bool(getattr(self.fdel, "__isabstractmethod__", False)))
142+
143+
144+
property.__isabstractmethod__ = descriptor(fget=isabstract, name="__isabstractmethod__", owner=property)
145+
146+
147+
def get_doc(self):
148+
return self.doc
149+
150+
151+
def set_doc(self, value):
152+
self.doc = value
153+
self.getter_doc = False
154+
155+
156+
property.__doc__ = descriptor(fget=get_doc, fset=set_doc, name="__doc__", owner=property)

0 commit comments

Comments
 (0)