Skip to content

Commit 21127cc

Browse files
committed
Use new slot lookup
1 parent db0f8fc commit 21127cc

File tree

2 files changed

+26
-12
lines changed

2 files changed

+26
-12
lines changed

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

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,21 @@
4545

4646
import com.oracle.graal.python.builtins.objects.PNone;
4747
import com.oracle.graal.python.builtins.objects.object.ObjectNodes;
48-
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
4948
import com.oracle.graal.python.builtins.objects.str.PString;
49+
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
5050
import com.oracle.graal.python.nodes.ErrorMessages;
5151
import com.oracle.graal.python.nodes.PNodeWithContext;
5252
import com.oracle.graal.python.nodes.PRaiseNode;
53+
import com.oracle.graal.python.nodes.call.special.CallUnaryMethodNode;
54+
import com.oracle.graal.python.nodes.call.special.LookupSpecialMethodSlotNode;
55+
import com.oracle.graal.python.nodes.object.GetClassNode;
56+
import com.oracle.graal.python.runtime.exception.PException;
5357
import com.oracle.truffle.api.dsl.Cached;
5458
import com.oracle.truffle.api.dsl.GenerateUncached;
59+
import com.oracle.truffle.api.dsl.ImportStatic;
5560
import com.oracle.truffle.api.dsl.Specialization;
5661
import com.oracle.truffle.api.frame.Frame;
5762
import com.oracle.truffle.api.frame.VirtualFrame;
58-
import com.oracle.truffle.api.library.CachedLibrary;
5963
import com.oracle.truffle.api.profiles.ConditionProfile;
6064

6165
/**
@@ -67,21 +71,28 @@
6771
* @see PyObjectReprAsJavaStringNode
6872
*/
6973
@GenerateUncached
74+
@ImportStatic(SpecialMethodSlot.class)
7075
public abstract class PyObjectReprAsObjectNode extends PNodeWithContext {
7176
public abstract Object execute(Frame frame, Object object);
7277

73-
@Specialization(limit = "3")
78+
@Specialization
7479
static Object repr(VirtualFrame frame, Object obj,
75-
@CachedLibrary("obj") PythonObjectLibrary objLib,
76-
@CachedLibrary(limit = "2") PythonObjectLibrary methodLib,
80+
@Cached GetClassNode getClassNode,
81+
@Cached(parameters = "Repr") LookupSpecialMethodSlotNode lookupRepr,
82+
@Cached CallUnaryMethodNode callRepr,
7783
@Cached ObjectNodes.DefaultObjectReprNode defaultRepr,
78-
@Cached ConditionProfile hasRepr,
7984
@Cached ConditionProfile isString,
8085
@Cached ConditionProfile isPString,
8186
@Cached PRaiseNode raiseNode) {
82-
Object reprMethod = objLib.lookupAttributeOnType(obj, __REPR__);
83-
if (hasRepr.profile(reprMethod != PNone.NO_VALUE)) {
84-
Object result = methodLib.callUnboundMethodIgnoreGetException(reprMethod, frame, obj);
87+
Object type = getClassNode.execute(obj);
88+
Object reprMethod;
89+
try {
90+
reprMethod = lookupRepr.execute(frame, type, obj);
91+
} catch (PException e) {
92+
return defaultRepr.execute(frame, obj);
93+
}
94+
if (reprMethod != PNone.NO_VALUE) {
95+
Object result = callRepr.executeObject(frame, reprMethod, obj);
8596
if (isString.profile(result instanceof String) || isPString.profile(result instanceof PString)) {
8697
return result;
8798
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,18 @@
4646
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4747
import com.oracle.graal.python.builtins.objects.PNone;
4848
import com.oracle.graal.python.builtins.objects.str.PString;
49+
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
4950
import com.oracle.graal.python.nodes.ErrorMessages;
5051
import com.oracle.graal.python.nodes.PNodeWithContext;
5152
import com.oracle.graal.python.nodes.PRaiseNode;
5253
import com.oracle.graal.python.nodes.call.special.CallUnaryMethodNode;
53-
import com.oracle.graal.python.nodes.call.special.LookupSpecialMethodNode;
54+
import com.oracle.graal.python.nodes.call.special.LookupSpecialMethodSlotNode;
5455
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
5556
import com.oracle.graal.python.nodes.object.GetClassNode;
5657
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
5758
import com.oracle.truffle.api.dsl.Cached;
5859
import com.oracle.truffle.api.dsl.GenerateUncached;
60+
import com.oracle.truffle.api.dsl.ImportStatic;
5961
import com.oracle.truffle.api.dsl.Specialization;
6062
import com.oracle.truffle.api.frame.Frame;
6163
import com.oracle.truffle.api.frame.VirtualFrame;
@@ -69,6 +71,7 @@
6971
* @see PyObjectStrAsJavaStringNode
7072
*/
7173
@GenerateUncached
74+
@ImportStatic(SpecialMethodSlot.class)
7275
public abstract class PyObjectStrAsObjectNode extends PNodeWithContext {
7376
public abstract Object execute(Frame frame, Object object);
7477

@@ -97,13 +100,13 @@ static String str(long object) {
97100
@Specialization(guards = "!isJavaString(obj)")
98101
static Object str(VirtualFrame frame, Object obj,
99102
@Cached GetClassNode getClassNode,
100-
@Cached LookupSpecialMethodNode.Dynamic lookupStr,
103+
@Cached(parameters = "Str") LookupSpecialMethodSlotNode lookupStr,
101104
@Cached CallUnaryMethodNode callStr,
102105
@Cached GetClassNode getResultClassNode,
103106
@Cached IsSubtypeNode isSubtypeNode,
104107
@Cached PRaiseNode raiseNode) {
105108
Object type = getClassNode.execute(obj);
106-
Object strDescr = lookupStr.execute(frame, type, __STR__, obj, false);
109+
Object strDescr = lookupStr.execute(frame, type, obj);
107110
// All our objects should have __str__
108111
assert strDescr != PNone.NONE;
109112
Object result = callStr.executeObject(frame, strDescr, obj);

0 commit comments

Comments
 (0)