Skip to content

Commit 94359a5

Browse files
committed
Use MaybeBindDescriptorNode in Dynamic special method lookup
1 parent 6e381fa commit 94359a5

File tree

4 files changed

+8
-32
lines changed

4 files changed

+8
-32
lines changed

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,12 @@
4242

4343
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.OverflowError;
4444

45-
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4645
import com.oracle.graal.python.nodes.ErrorMessages;
47-
import com.oracle.graal.python.nodes.PGuards;
4846
import com.oracle.graal.python.nodes.PNodeWithContext;
4947
import com.oracle.graal.python.nodes.PRaiseNode;
5048
import com.oracle.graal.python.util.OverflowException;
5149
import com.oracle.truffle.api.dsl.Cached;
5250
import com.oracle.truffle.api.dsl.GenerateUncached;
53-
import com.oracle.truffle.api.dsl.ImportStatic;
5451
import com.oracle.truffle.api.dsl.Specialization;
5552
import com.oracle.truffle.api.frame.Frame;
5653
import com.oracle.truffle.api.frame.VirtualFrame;
@@ -61,7 +58,6 @@
6158
* overflow.
6259
*/
6360
@GenerateUncached
64-
@ImportStatic({PGuards.class, PythonBuiltinClassType.class})
6561
public abstract class PyLongAsIntNode extends PNodeWithContext {
6662
public abstract int execute(Frame frame, Object object);
6763

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,12 @@
4242

4343
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.OverflowError;
4444

45-
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4645
import com.oracle.graal.python.nodes.ErrorMessages;
47-
import com.oracle.graal.python.nodes.PGuards;
4846
import com.oracle.graal.python.nodes.PNodeWithContext;
4947
import com.oracle.graal.python.nodes.PRaiseNode;
5048
import com.oracle.graal.python.util.OverflowException;
5149
import com.oracle.truffle.api.dsl.Cached;
5250
import com.oracle.truffle.api.dsl.GenerateUncached;
53-
import com.oracle.truffle.api.dsl.ImportStatic;
5451
import com.oracle.truffle.api.dsl.Specialization;
5552
import com.oracle.truffle.api.frame.Frame;
5653
import com.oracle.truffle.api.frame.VirtualFrame;
@@ -61,7 +58,6 @@
6158
* overflow.
6259
*/
6360
@GenerateUncached
64-
@ImportStatic({PGuards.class, PythonBuiltinClassType.class})
6561
public abstract class PyLongAsLongNode extends PNodeWithContext {
6662
public abstract long execute(Frame frame, Object object);
6763

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@
4747
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4848
import com.oracle.graal.python.builtins.modules.WarningsModuleBuiltins;
4949
import com.oracle.graal.python.builtins.objects.PNone;
50+
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
5051
import com.oracle.graal.python.nodes.ErrorMessages;
51-
import com.oracle.graal.python.nodes.PGuards;
5252
import com.oracle.graal.python.nodes.PNodeWithContext;
5353
import com.oracle.graal.python.nodes.PRaiseNode;
5454
import com.oracle.graal.python.nodes.call.special.CallUnaryMethodNode;
55-
import com.oracle.graal.python.nodes.call.special.LookupSpecialMethodNode;
55+
import com.oracle.graal.python.nodes.call.special.LookupSpecialMethodSlotNode;
5656
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
5757
import com.oracle.graal.python.nodes.object.GetClassNode;
5858
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
@@ -72,7 +72,7 @@
7272
* integer wouldn't fit into double.
7373
*/
7474
@GenerateUncached
75-
@ImportStatic({PGuards.class, PythonBuiltinClassType.class})
75+
@ImportStatic(SpecialMethodSlot.class)
7676
public abstract class PyNumberFloatNode extends PNodeWithContext {
7777
public abstract double execute(Frame frame, Object object);
7878

@@ -99,7 +99,7 @@ static double doBoolean(boolean object) {
9999
@Specialization(guards = {"!isDouble(object)", "!isInteger(object)", "!isBoolean(object)"})
100100
static double doObject(VirtualFrame frame, Object object,
101101
@Cached GetClassNode getClassNode,
102-
@Cached LookupSpecialMethodNode.Dynamic lookup,
102+
@Cached(parameters = "Float") LookupSpecialMethodSlotNode lookup,
103103
@Cached CallUnaryMethodNode call,
104104
@Cached GetClassNode resultClassNode,
105105
@Cached IsBuiltinClassProfile resultProfile,
@@ -110,7 +110,7 @@ static double doObject(VirtualFrame frame, Object object,
110110
@Cached WarningsModuleBuiltins.WarnNode warnNode,
111111
@Cached PRaiseNode raiseNode,
112112
@Cached PyFloatFromString fromString) {
113-
Object floatDescr = lookup.execute(frame, getClassNode.execute(object), __FLOAT__, object);
113+
Object floatDescr = lookup.execute(frame, getClassNode.execute(object), object);
114114
if (floatDescr != PNone.NO_VALUE) {
115115
Object result = call.executeObject(frame, floatDescr, object);
116116
Object resultType = resultClassNode.execute(result);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/special/LookupSpecialMethodNode.java

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,7 @@
4040
*/
4141
package com.oracle.graal.python.nodes.call.special;
4242

43-
import com.oracle.graal.python.builtins.objects.PNone;
44-
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
45-
import com.oracle.graal.python.builtins.objects.function.PFunction;
46-
import com.oracle.graal.python.nodes.SpecialMethodNames;
4743
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
48-
import com.oracle.graal.python.nodes.attributes.LookupInheritedAttributeNode;
49-
import com.oracle.graal.python.nodes.call.CallNode;
5044
import com.oracle.truffle.api.dsl.Cached;
5145
import com.oracle.truffle.api.dsl.GenerateUncached;
5246
import com.oracle.truffle.api.dsl.Specialization;
@@ -94,20 +88,10 @@ public static Dynamic getUncached() {
9488

9589
@Specialization
9690
Object lookup(VirtualFrame frame, Object type, String name, Object receiver,
97-
@Cached LookupAttributeInMRONode.Dynamic lookupAttr,
98-
@Cached LookupInheritedAttributeNode.Dynamic lookupGet,
99-
@Cached CallNode callGet) {
91+
@Cached MaybeBindDescriptorNode bind,
92+
@Cached LookupAttributeInMRONode.Dynamic lookupAttr) {
10093
Object descriptor = lookupAttr.execute(type, name);
101-
if (descriptor == PNone.NO_VALUE || descriptor instanceof PBuiltinFunction || descriptor instanceof PFunction) {
102-
// Return unbound to avoid constructing the bound object
103-
return descriptor;
104-
}
105-
Object getMethod = lookupGet.execute(descriptor, SpecialMethodNames.__GET__);
106-
if (getMethod != PNone.NO_VALUE) {
107-
return new MaybeBindDescriptorNode.BoundDescriptor(callGet.execute(frame, getMethod, descriptor, receiver, type));
108-
}
109-
// CPython considers non-descriptors already bound
110-
return new MaybeBindDescriptorNode.BoundDescriptor(descriptor);
94+
return bind.execute(frame, descriptor, receiver, type);
11195
}
11296
}
11397
}

0 commit comments

Comments
 (0)