Skip to content

Commit 037f945

Browse files
msimacektimfel
authored andcommitted
Fix binding non-descriptors in PyObjectGetMethod
1 parent 969e104 commit 037f945

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/lib/PyObjectGetMethod.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ static Object getFixedAttr(VirtualFrame frame, Object receiver, @SuppressWarning
120120
@Cached BranchProfile returnBoundDescr) {
121121
boolean methodFound = false;
122122
Object descr = lookupNode.execute(lazyClass);
123-
Object getMethod = null;
123+
Object getMethod = PNone.NO_VALUE;
124124
if (descr != PNone.NO_VALUE) {
125125
hasDescr.enter();
126126
if (MaybeBindDescriptorNode.isMethodDescriptor(descr)) {
@@ -147,11 +147,14 @@ static Object getFixedAttr(VirtualFrame frame, Object receiver, @SuppressWarning
147147
returnUnboundMethod.enter();
148148
return descr;
149149
}
150-
if (getMethod != null) {
150+
if (getMethod != PNone.NO_VALUE) {
151151
// callGet is used twice, and cannot act as the profile here
152152
returnBoundDescr.enter();
153153
return new BoundDescriptor(callGet.execute(frame, getMethod, descr, receiver, lazyClass));
154154
}
155+
if (descr != PNone.NO_VALUE) {
156+
return new BoundDescriptor(descr);
157+
}
155158
throw raiseNode.raise(AttributeError, ErrorMessages.OBJ_P_HAS_NO_ATTR_S, receiver, name);
156159
}
157160

@@ -169,7 +172,7 @@ static Object getDynamicAttr(Frame frame, Object receiver, String name,
169172
@Shared("raiseNode") @Cached PRaiseNode raiseNode) {
170173
boolean methodFound = false;
171174
Object descr = lookupNode.execute(lazyClass, name);
172-
Object getMethod = null;
175+
Object getMethod = PNone.NO_VALUE;
173176
if (descr != PNone.NO_VALUE) {
174177
if (MaybeBindDescriptorNode.isMethodDescriptor(descr)) {
175178
methodFound = true;
@@ -190,9 +193,12 @@ static Object getDynamicAttr(Frame frame, Object receiver, String name,
190193
if (methodFound) {
191194
return descr;
192195
}
193-
if (getMethod != null) {
196+
if (getMethod != PNone.NO_VALUE) {
194197
return new BoundDescriptor(callGet.execute(frame, getMethod, descr, receiver, lazyClass));
195198
}
199+
if (descr != PNone.NO_VALUE) {
200+
return new BoundDescriptor(descr);
201+
}
196202
throw raiseNode.raise(AttributeError, ErrorMessages.OBJ_P_HAS_NO_ATTR_S, receiver, name);
197203
}
198204
}

0 commit comments

Comments
 (0)