Skip to content

Commit 04b86a7

Browse files
committed
Avoid using interop in PGuars.isClass
1 parent 66695a7 commit 04b86a7

File tree

9 files changed

+24
-34
lines changed

9 files changed

+24
-34
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CExtNodes.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@
136136
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
137137
import com.oracle.graal.python.builtins.objects.type.TypeNodes.GetMroStorageNode;
138138
import com.oracle.graal.python.builtins.objects.type.TypeNodes.GetNameNode;
139+
import com.oracle.graal.python.builtins.objects.type.TypeNodes.IsTypeNode;
139140
import com.oracle.graal.python.builtins.objects.type.TypeNodes.ProfileClassNode;
140141
import com.oracle.graal.python.lib.PyFloatAsDoubleNode;
141142
import com.oracle.graal.python.lib.PyObjectLookupAttr;
@@ -517,10 +518,10 @@ static Object doPythonTypeUncached(PythonBuiltinClassType object,
517518
return PythonClassNativeWrapper.wrap(PythonContext.get(getNameNode).lookupType(object), getNameNode.execute(object));
518519
}
519520

520-
@Specialization(guards = {"!isClass(object, lib)", "!isNativeObject(object)", "!isSpecialSingleton(object)"})
521+
@Specialization(guards = {"!isClass(object, isTypeNode)", "!isNativeObject(object)", "!isSpecialSingleton(object)"})
521522
static Object runAbstractObject(PythonAbstractObject object,
522523
@Cached ConditionProfile noWrapperProfile,
523-
@SuppressWarnings("unused") @CachedLibrary(limit = "3") InteropLibrary lib) {
524+
@SuppressWarnings("unused") @Cached IsTypeNode isTypeNode) {
524525
assert object != PNone.NO_VALUE;
525526
return PythonObjectNativeWrapper.wrap(object, noWrapperProfile);
526527
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/transitions/GetNativeWrapperNode.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import com.oracle.graal.python.builtins.objects.ints.PInt;
5656
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
5757
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
58+
import com.oracle.graal.python.builtins.objects.type.TypeNodes.IsTypeNode;
5859
import com.oracle.graal.python.nodes.PGuards;
5960
import com.oracle.graal.python.nodes.PNodeWithContext;
6061
import com.oracle.graal.python.nodes.object.IsForeignObjectNode;
@@ -66,8 +67,6 @@
6667
import com.oracle.truffle.api.dsl.GenerateUncached;
6768
import com.oracle.truffle.api.dsl.ImportStatic;
6869
import com.oracle.truffle.api.dsl.Specialization;
69-
import com.oracle.truffle.api.interop.InteropLibrary;
70-
import com.oracle.truffle.api.library.CachedLibrary;
7170
import com.oracle.truffle.api.profiles.ConditionProfile;
7271
import com.oracle.truffle.api.strings.TruffleString;
7372

@@ -180,10 +179,10 @@ static PythonNativeWrapper doPythonTypeUncached(PythonBuiltinClassType object,
180179
return PythonClassNativeWrapper.wrap(PythonContext.get(getNameNode).lookupType(object), getNameNode.execute(object));
181180
}
182181

183-
@Specialization(guards = {"!isClass(object, lib)", "!isNativeObject(object)", "!isSpecialSingleton(object)"})
182+
@Specialization(guards = {"!isClass(object, isTypeNode)", "!isNativeObject(object)", "!isSpecialSingleton(object)"}, limit = "1")
184183
static PythonNativeWrapper runAbstractObject(PythonAbstractObject object,
185184
@Exclusive @Cached ConditionProfile noWrapperProfile,
186-
@SuppressWarnings("unused") @CachedLibrary(limit = "3") InteropLibrary lib) {
185+
@SuppressWarnings("unused") @Cached IsTypeNode isTypeNode) {
187186
assert object != PNone.NO_VALUE;
188187
return PythonObjectNativeWrapper.wrap(object, noWrapperProfile);
189188
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/common/CExtParseArgumentsNode.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
import com.oracle.graal.python.builtins.objects.str.PString;
7676
import com.oracle.graal.python.builtins.objects.str.StringNodes.StringLenNode;
7777
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
78+
import com.oracle.graal.python.builtins.objects.type.TypeNodes.IsTypeNode;
7879
import com.oracle.graal.python.lib.PyObjectIsTrueNode;
7980
import com.oracle.graal.python.lib.PyObjectSizeNode;
8081
import com.oracle.graal.python.lib.PySequenceCheckNode;
@@ -684,7 +685,6 @@ static void doObject(@SuppressWarnings("unused") int c, int la, Object arg, Obje
684685
@Cached ExecuteConverterNode executeConverterNode,
685686
@Cached GetClassNode getClassNode,
686687
@Cached IsSubtypeNode isSubtypeNode,
687-
@CachedLibrary(limit = "2") InteropLibrary lib,
688688
@Cached NativeToPythonNode typeToJavaNode,
689689
@Cached ToSulongNode toNativeNode,
690690
@Shared("writeOutVarNode") @Cached WriteNextVaArgNode writeOutVarNode,
@@ -693,7 +693,7 @@ static void doObject(@SuppressWarnings("unused") int c, int la, Object arg, Obje
693693
/* formatIdx++; */
694694
Object argValue = getVaArgNode.getPyObjectPtr(varargs);
695695
Object typeObject = typeToJavaNode.execute(argValue);
696-
assert PGuards.isClass(typeObject, lib);
696+
assert PGuards.isClass(typeObject, IsTypeNode.getUncached());
697697
if (!isSubtypeNode.execute(getClassNode.execute(arg), typeObject)) {
698698
raiseNode.raiseIntWithoutFrame(0, TypeError, ErrorMessages.EXPECTED_OBJ_TYPE_P_GOT_P, typeObject, arg);
699699
throw ParseArgumentsException.raise();

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/GraalHPyContextFunctions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1696,7 +1696,7 @@ Object execute(Object[] arguments,
16961696

16971697
try {
16981698
Object newType = createTypeFromSpecNode.execute(context, typeSpec, typeSpecParamArray);
1699-
assert PGuards.isClass(newType, InteropLibrary.getUncached()) : "Object created from type spec is not a type";
1699+
assert PGuards.isClass(newType, IsTypeNode.getUncached()) : "Object created from type spec is not a type";
17001700
return asHandleNode.execute(newType);
17011701
} catch (PException e) {
17021702
transformExceptionToNativeNode.execute(context, e);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/GraalHPyNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2142,7 +2142,7 @@ private static PTuple extractBases(GraalHPyContext context, Object typeSpecParam
21422142
case GraalHPyDef.HPyType_SPEC_PARAM_BASE:
21432143
// In this case, the 'specParamObject' is a single handle. We add it to
21442144
// the list of bases.
2145-
assert PGuards.isClass(specParamObject, InteropLibrary.getUncached()) : "base object is not a Python class";
2145+
assert PGuards.isClass(specParamObject, IsTypeNode.getUncached()) : "base object is not a Python class";
21462146
basesList.add(specParamObject);
21472147
break;
21482148
case GraalHPyDef.HPyType_SPEC_PARAM_BASES_TUPLE:

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/TypeBuiltins.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
import com.oracle.graal.python.builtins.objects.type.TypeNodes.GetTypeFlagsNode;
130130
import com.oracle.graal.python.builtins.objects.type.TypeNodes.InlinedIsSameTypeNode;
131131
import com.oracle.graal.python.builtins.objects.type.TypeNodes.IsSameTypeNode;
132+
import com.oracle.graal.python.builtins.objects.type.TypeNodes.IsTypeNode;
132133
import com.oracle.graal.python.builtins.objects.type.TypeNodesFactory.IsSameTypeNodeGen;
133134
import com.oracle.graal.python.builtins.objects.types.GenericTypeNodes;
134135
import com.oracle.graal.python.lib.PyObjectIsTrueNode;
@@ -186,8 +187,6 @@
186187
import com.oracle.truffle.api.dsl.Specialization;
187188
import com.oracle.truffle.api.dsl.TypeSystemReference;
188189
import com.oracle.truffle.api.frame.VirtualFrame;
189-
import com.oracle.truffle.api.interop.InteropLibrary;
190-
import com.oracle.truffle.api.library.CachedLibrary;
191190
import com.oracle.truffle.api.nodes.Node;
192191
import com.oracle.truffle.api.object.HiddenKey;
193192
import com.oracle.truffle.api.profiles.InlinedBranchProfile;
@@ -1379,11 +1378,11 @@ Object setNative(@SuppressWarnings("unused") PythonAbstractNativeObject cls, @Su
13791378
@Builtin(name = J___FLAGS__, minNumOfPositionalArgs = 1, isGetter = true)
13801379
@GenerateNodeFactory
13811380
abstract static class FlagsNode extends PythonUnaryBuiltinNode {
1382-
@Specialization(limit = "3")
1381+
@Specialization
13831382
Object doGeneric(Object self,
1384-
@CachedLibrary("self") InteropLibrary lib,
1383+
@Cached IsTypeNode isTypeNode,
13851384
@Cached GetTypeFlagsNode getTypeFlagsNode) {
1386-
if (PGuards.isClass(self, lib)) {
1385+
if (PGuards.isClass(self, isTypeNode)) {
13871386
return getTypeFlagsNode.execute(self);
13881387
}
13891388
throw raise(PythonErrorType.TypeError, ErrorMessages.DESC_FLAG_FOR_TYPE_DOESNT_APPLY_TO_OBJ, self);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/TypeNodes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -949,11 +949,11 @@ static PythonAbstractClass doNative(PythonNativeClass obj,
949949
@Cached PRaiseNode raise,
950950
@Cached GetTypeMemberNode getTpBaseNode,
951951
@Cached InlinedExactClassProfile resultTypeProfile,
952-
@SuppressWarnings("unused") @CachedLibrary(limit = "3") InteropLibrary lib) {
952+
@Cached IsTypeNode isTypeNode) {
953953
Object result = resultTypeProfile.profile(inliningTarget, getTpBaseNode.execute(obj, NativeMember.TP_BASE));
954954
if (PGuards.isPNone(result)) {
955955
return null;
956-
} else if (PGuards.isClass(result, lib)) {
956+
} else if (PGuards.isClass(result, isTypeNode)) {
957957
return (PythonAbstractClass) result;
958958
}
959959
CompilerDirectives.transferToInterpreter();

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/PGuards.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import static com.oracle.graal.python.nodes.truffle.TruffleStringMigrationHelpers.isJavaString;
4444
import static com.oracle.graal.python.util.PythonUtils.TS_ENCODING;
4545

46-
import com.oracle.graal.python.PythonLanguage;
4746
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4847
import com.oracle.graal.python.builtins.modules.ctypes.CDataObject;
4948
import com.oracle.graal.python.builtins.modules.ctypes.PyCArgObject;
@@ -97,6 +96,7 @@
9796
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
9897
import com.oracle.graal.python.builtins.objects.type.PythonClass;
9998
import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
99+
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
100100
import com.oracle.graal.python.lib.PyIndexCheckNode;
101101
import com.oracle.graal.python.nodes.object.BuiltinClassProfiles.IsBuiltinObjectProfile;
102102
import com.oracle.graal.python.nodes.object.GetClassNode;
@@ -111,12 +111,9 @@
111111
import com.oracle.graal.python.runtime.sequence.storage.LongSequenceStorage;
112112
import com.oracle.graal.python.runtime.sequence.storage.ObjectSequenceStorage;
113113
import com.oracle.graal.python.util.OverflowException;
114-
import com.oracle.truffle.api.CompilerDirectives;
115114
import com.oracle.truffle.api.HostCompilerDirectives.InliningCutoff;
116115
import com.oracle.truffle.api.dsl.Idempotent;
117116
import com.oracle.truffle.api.frame.VirtualFrame;
118-
import com.oracle.truffle.api.interop.InteropLibrary;
119-
import com.oracle.truffle.api.interop.UnsupportedMessageException;
120117
import com.oracle.truffle.api.nodes.Node;
121118
import com.oracle.truffle.api.nodes.UnexpectedResultException;
122119
import com.oracle.truffle.api.profiles.ConditionProfile;
@@ -237,14 +234,8 @@ public static boolean isBuiltinDescriptor(Object value) {
237234
return BuiltinMethodDescriptor.isInstance(value);
238235
}
239236

240-
public static boolean isClass(Object obj, InteropLibrary lib) {
241-
try {
242-
return lib.isMetaObject(obj) && lib.hasLanguage(obj) && lib.getLanguage(obj) == PythonLanguage.class;
243-
} catch (UnsupportedMessageException e) {
244-
// cannot happen due to check
245-
CompilerDirectives.transferToInterpreterAndInvalidate();
246-
throw new IllegalStateException(e);
247-
}
237+
public static boolean isClass(Object obj, TypeNodes.IsTypeNode isTypeNode) {
238+
return isTypeNode.execute(obj);
248239
}
249240

250241
public static boolean isEmptyStorage(PSequence sequence) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/exception/ExceptMatchNode.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -40,10 +40,9 @@
4040
*/
4141
package com.oracle.graal.python.nodes.exception;
4242

43-
import com.oracle.truffle.api.dsl.NeverDefault;
44-
4543
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
4644
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
45+
import com.oracle.graal.python.builtins.objects.type.TypeNodes.IsTypeNode;
4746
import com.oracle.graal.python.nodes.ErrorMessages;
4847
import com.oracle.graal.python.nodes.PGuards;
4948
import com.oracle.graal.python.nodes.PRaiseNode;
@@ -57,6 +56,7 @@
5756
import com.oracle.truffle.api.dsl.Fallback;
5857
import com.oracle.truffle.api.dsl.GenerateUncached;
5958
import com.oracle.truffle.api.dsl.ImportStatic;
59+
import com.oracle.truffle.api.dsl.NeverDefault;
6060
import com.oracle.truffle.api.dsl.Specialization;
6161
import com.oracle.truffle.api.exception.AbstractTruffleException;
6262
import com.oracle.truffle.api.frame.Frame;
@@ -81,9 +81,9 @@ private static void raiseNoException(PRaiseNode raiseNode) {
8181
throw raiseNode.raise(PythonErrorType.TypeError, ErrorMessages.CATCHING_CLS_NOT_ALLOWED);
8282
}
8383

84-
@Specialization(guards = "isClass(clause, lib)", limit = "3")
84+
@Specialization(guards = "isClass(clause, isTypeNode)", limit = "1")
8585
static boolean matchPythonSingle(VirtualFrame frame, PException e, Object clause,
86-
@SuppressWarnings("unused") @CachedLibrary("clause") InteropLibrary lib,
86+
@SuppressWarnings("unused") @Cached IsTypeNode isTypeNode,
8787
@Cached ValidExceptionNode isValidException,
8888
@Cached GetClassNode getClassNode,
8989
@Cached IsSubtypeNode isSubtype,

0 commit comments

Comments
 (0)