Skip to content

Commit e132fe0

Browse files
committed
TypeNodes: getSolidBase use uncached version of GetInternalObjectArrayNode (behind truffle boundary)
1 parent 66a02cd commit e132fe0

File tree

2 files changed

+15
-12
lines changed

2 files changed

+15
-12
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3624,6 +3624,10 @@ private static Object[] materializeGeneric(SequenceStorage s, int len, GetItemSc
36243624
}
36253625
return barr;
36263626
}
3627+
3628+
public static GetInternalObjectArrayNode getUncached() {
3629+
return SequenceStorageNodesFactory.GetInternalObjectArrayNodeGen.getUncached();
3630+
}
36273631
}
36283632

36293633
@GenerateUncached

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

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1101,30 +1101,29 @@ static GetSolidBaseNode getUncached() {
11011101
protected Object getSolid(Object type,
11021102
@Cached GetBaseClassNode getBaseClassNode,
11031103
@Cached("createForceType()") ReadAttributeFromObjectNode readAttr,
1104-
@Cached GetInternalObjectArrayNode getArrayNode,
11051104
@Cached BranchProfile typeIsNotBase,
11061105
@Cached BranchProfile hasBase,
11071106
@Cached BranchProfile hasNoBase) {
1108-
return solidBase(type, getBaseClassNode, PythonContext.get(this), readAttr, getArrayNode, typeIsNotBase, hasBase,
1107+
return solidBase(type, getBaseClassNode, PythonContext.get(this), readAttr, typeIsNotBase, hasBase,
11091108
hasNoBase, 0);
11101109
}
11111110

11121111
@TruffleBoundary
1113-
protected Object solidBaseTB(Object type, GetBaseClassNode getBaseClassNode, PythonContext context, GetInternalObjectArrayNode getArrayNode, int depth) {
1114-
return solidBase(type, getBaseClassNode, context, ReadAttributeFromObjectNode.getUncachedForceType(), getArrayNode, BranchProfile.getUncached(),
1112+
protected Object solidBaseTB(Object type, GetBaseClassNode getBaseClassNode, PythonContext context, int depth) {
1113+
return solidBase(type, getBaseClassNode, context, ReadAttributeFromObjectNode.getUncachedForceType(), BranchProfile.getUncached(),
11151114
BranchProfile.getUncached(), BranchProfile.getUncached(), depth);
11161115
}
11171116

11181117
protected Object solidBase(Object type, GetBaseClassNode getBaseClassNode, PythonContext context, ReadAttributeFromObjectNode readAttr,
1119-
GetInternalObjectArrayNode getArrayNode, BranchProfile typeIsNotBase, BranchProfile hasBase, BranchProfile hasNoBase, int depth) {
1118+
BranchProfile typeIsNotBase, BranchProfile hasBase, BranchProfile hasNoBase, int depth) {
11201119
CompilerAsserts.partialEvaluationConstant(depth);
11211120
Object base = getBaseClassNode.execute(type);
11221121
if (base != null) {
11231122
hasBase.enter();
11241123
if (depth > 3) {
1125-
base = solidBaseTB(base, getBaseClassNode, context, getArrayNode, depth);
1124+
base = solidBaseTB(base, getBaseClassNode, context, depth);
11261125
} else {
1127-
base = solidBase(base, getBaseClassNode, context, readAttr, getArrayNode, typeIsNotBase, hasBase,
1126+
base = solidBase(base, getBaseClassNode, context, readAttr, typeIsNotBase, hasBase,
11281127
hasNoBase, depth + 1);
11291128
}
11301129
} else {
@@ -1138,16 +1137,16 @@ protected Object solidBase(Object type, GetBaseClassNode getBaseClassNode, Pytho
11381137
typeIsNotBase.enter();
11391138

11401139
Object typeSlots = getSlotsFromType(type, readAttr);
1141-
if (extraivars(type, base, typeSlots, getArrayNode)) {
1140+
if (extraivars(type, base, typeSlots)) {
11421141
return type;
11431142
} else {
11441143
return base;
11451144
}
11461145
}
11471146

11481147
@TruffleBoundary
1149-
private static boolean extraivars(Object type, Object base, Object typeSlots, GetInternalObjectArrayNode getArrayNode) {
1150-
if (typeSlots != null && length(typeSlots, getArrayNode) != 0) {
1148+
private static boolean extraivars(Object type, Object base, Object typeSlots) {
1149+
if (typeSlots != null && length(typeSlots) != 0) {
11511150
return true;
11521151
}
11531152
Object typeNewMethod = LookupAttributeInMRONode.lookup(type, __NEW__, GetMroStorageNode.getUncached(), ReadAttributeFromObjectNode.getUncached(), true);
@@ -1156,7 +1155,7 @@ private static boolean extraivars(Object type, Object base, Object typeSlots, Ge
11561155
}
11571156

11581157
@TruffleBoundary
1159-
private static int length(Object slotsObject, GetInternalObjectArrayNode getArrayNode) {
1158+
private static int length(Object slotsObject) {
11601159
assert PGuards.isString(slotsObject) || PGuards.isPSequence(slotsObject) : "slotsObject must be either a String or a PSequence";
11611160

11621161
if (PGuards.isString(slotsObject)) {
@@ -1166,7 +1165,7 @@ private static int length(Object slotsObject, GetInternalObjectArrayNode getArra
11661165

11671166
int count = 0;
11681167
int length = storage.length();
1169-
Object[] slots = getArrayNode.execute(storage);
1168+
Object[] slots = GetInternalObjectArrayNode.getUncached().execute(storage);
11701169
for (int i = 0; i < length; i++) {
11711170
// omit __DICT__ and __WEAKREF__, they cause no class layout conflict
11721171
// see also test_slts.py#test_no_bases_have_class_layout_conflict

0 commit comments

Comments
 (0)