Skip to content

Commit 637ea62

Browse files
committed
Do not cache type of native objects
1 parent 53d02ba commit 637ea62

File tree

1 file changed

+3
-35
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi

1 file changed

+3
-35
lines changed

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

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -993,32 +993,10 @@ public static Object run(Object object,
993993

994994
@GenerateUncached
995995
public abstract static class GetNativeClassNode extends PNodeWithContext {
996-
public abstract Object execute(PythonAbstractNativeObject object);
997-
998-
@Specialization(guards = {"isSingleContext()", "object == cachedObject"}, limit = "1")
999-
@SuppressWarnings("unused")
1000-
static Object getNativeClassCachedIdentity(PythonAbstractNativeObject object,
1001-
@Cached(value = "object", weak = true) PythonAbstractNativeObject cachedObject,
1002-
@Cached("getNativeClassUncached(object)") Object cachedClass) {
1003-
// TODO: (tfel) is this really something we can do? It's so rare for this class to
1004-
// change that it shouldn't be worth the effort, but in native code, anything can
1005-
// happen. OTOH, CPython also has caches that can become invalid when someone just
1006-
// goes and changes the ob_type of an object.
1007-
return cachedClass;
1008-
}
1009996

1010-
@Specialization(guards = {"isSingleContext()", "isSame(lib, cachedObject, object)"})
1011-
@SuppressWarnings("unused")
1012-
static Object getNativeClassCached(PythonAbstractNativeObject object,
1013-
@Cached(value = "object", weak = true) PythonAbstractNativeObject cachedObject,
1014-
@Cached("getNativeClassUncached(object)") Object cachedClass,
1015-
@CachedLibrary(limit = "3") @SuppressWarnings("unused") InteropLibrary lib) {
1016-
// TODO same as for 'getNativeClassCachedIdentity'
1017-
return cachedClass;
1018-
}
997+
public abstract Object execute(PythonAbstractNativeObject object);
1019998

1020999
@Specialization(guards = {"lib.hasMembers(object.getPtr())"}, //
1021-
replaces = {"getNativeClassCached", "getNativeClassCachedIdentity"}, //
10221000
limit = "1", //
10231001
rewriteOn = {UnknownIdentifierException.class, UnsupportedMessageException.class})
10241002
static Object getNativeClassByMember(PythonAbstractNativeObject object,
@@ -1030,7 +1008,7 @@ static Object getNativeClassByMember(PythonAbstractNativeObject object,
10301008
}
10311009

10321010
@Specialization(guards = {"!lib.hasMembers(object.getPtr())"}, //
1033-
replaces = {"getNativeClassCached", "getNativeClassCachedIdentity", "getNativeClassByMember"}, //
1011+
replaces = {"getNativeClassByMember"}, //
10341012
limit = "1", //
10351013
rewriteOn = {UnknownIdentifierException.class, UnsupportedMessageException.class})
10361014
static Object getNativeClassByMemberAttachType(PythonAbstractNativeObject object,
@@ -1043,24 +1021,14 @@ static Object getNativeClassByMemberAttachType(PythonAbstractNativeObject object
10431021
return classProfile.profile(toJavaNode.execute(lib.readMember(typedPtr, NativeMember.OB_TYPE.getMemberNameJavaString())));
10441022
}
10451023

1046-
@Specialization(replaces = {"getNativeClassCached", "getNativeClassCachedIdentity", "getNativeClassByMember", "getNativeClassByMemberAttachType"})
1024+
@Specialization(replaces = {"getNativeClassByMember", "getNativeClassByMemberAttachType"})
10471025
static Object getNativeClass(PythonAbstractNativeObject object,
10481026
@Cached PCallCapiFunction callGetObTypeNode,
10491027
@Cached AsPythonObjectNode toJavaNode,
10501028
@Cached ProfileClassNode classProfile) {
10511029
// do not convert wrap 'object.object' since that is really the native pointer object
10521030
return classProfile.profile(toJavaNode.execute(callGetObTypeNode.call(FUN_GET_OB_TYPE, object.getPtr())));
10531031
}
1054-
1055-
static boolean isSame(InteropLibrary lib, PythonAbstractNativeObject cachedObject, PythonAbstractNativeObject object) {
1056-
return lib.isIdentical(cachedObject, object, lib);
1057-
}
1058-
1059-
public static Object getNativeClassUncached(PythonAbstractNativeObject object) {
1060-
// do not wrap 'object.object' since that is really the native pointer object
1061-
return getNativeClass(object, PCallCapiFunction.getUncached(), AsPythonObjectNodeGen.getUncached(), ProfileClassNode.getUncached());
1062-
}
1063-
10641032
}
10651033

10661034
// -----------------------------------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)