Skip to content

Commit 5c288e3

Browse files
author
Franziska Geiger
committed
Add baseClass support to IsBuiltinClassProfile
Rework IsBuiltinClassProfile
1 parent b57d855 commit 5c288e3

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ protected boolean wrappedString(PString s) {
266266
CompilerDirectives.transferToInterpreterAndInvalidate();
267267
isBuiltinClassProfile = IsBuiltinClassProfile.create();
268268
}
269-
return isBuiltinClassProfile.profileClass(getClass(s), PythonBuiltinClassType.PString);
269+
return isBuiltinClassProfile.profileClassWithBaseClasses(getClass(s), PythonBuiltinClassType.PString);
270270
}
271271

272272
protected EconomicMapStorage switchToEconomicMap(HashingStorage storage) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/object/IsBuiltinClassProfile.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.oracle.graal.python.builtins.objects.type.LazyPythonClass;
4646
import com.oracle.graal.python.builtins.objects.type.PythonAbstractClass;
4747
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
48+
import com.oracle.graal.python.builtins.objects.type.PythonClass;
4849
import com.oracle.graal.python.runtime.exception.PException;
4950
import com.oracle.truffle.api.CompilerDirectives;
5051
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
@@ -205,6 +206,20 @@ public boolean profileClass(LazyPythonClass clazz, PythonBuiltinClassType type)
205206
}
206207
}
207208

209+
public boolean profileClassWithBaseClasses(LazyPythonClass clazz, PythonBuiltinClassType type){
210+
if (!profileClass(clazz,type)) {
211+
PythonAbstractClass [] baseClasses = ((PythonClass) clazz).getBaseClasses();
212+
for (PythonAbstractClass baseClazz : baseClasses) {
213+
if (profileClass(baseClazz, type)) {
214+
return true;
215+
}
216+
}
217+
return false;
218+
} else {
219+
return true;
220+
}
221+
}
222+
208223
public boolean profileClass(PythonAbstractClass clazz, PythonBuiltinClassType type) {
209224
if (clazz instanceof PythonBuiltinClass) {
210225
if (!isBuiltinClass) {

0 commit comments

Comments
 (0)