4343import com .oracle .graal .python .builtins .objects .PNone ;
4444import com .oracle .graal .python .builtins .objects .type .PythonClass ;
4545import com .oracle .graal .python .nodes .PBaseNode ;
46+ import com .oracle .graal .python .runtime .PythonOptions ;
4647import com .oracle .truffle .api .Assumption ;
4748import com .oracle .truffle .api .dsl .Cached ;
4849import com .oracle .truffle .api .dsl .Fallback ;
50+ import com .oracle .truffle .api .dsl .ImportStatic ;
4951import com .oracle .truffle .api .dsl .Specialization ;
5052import com .oracle .truffle .api .nodes .ExplodeLoop ;
5153
54+ @ ImportStatic (PythonOptions .class )
5255public abstract class LookupAttributeInMRONode extends PBaseNode {
5356
5457 public abstract static class Dynamic extends PBaseNode {
@@ -132,7 +135,7 @@ protected PythonClassAssumptionPair findAttrClassAndAssumptionInMRO(PythonClass
132135 return new PythonClassAssumptionPair (attrAssumption , PNone .NO_VALUE );
133136 }
134137
135- @ Specialization (guards = {"klass == cachedKlass" }, limit = "5 " , assumptions = {"cachedClassInMROInfo.assumption" })
138+ @ Specialization (guards = {"klass == cachedKlass" }, limit = "getIntOption(getContext(), AttributeAccessInlineCacheMaxDepth) " , assumptions = {"cachedClassInMROInfo.assumption" })
136139 protected Object lookupConstantMROCached (@ SuppressWarnings ("unused" ) PythonClass klass ,
137140 @ Cached ("klass" ) @ SuppressWarnings ("unused" ) PythonClass cachedKlass ,
138141 @ Cached ("findAttrClassAndAssumptionInMRO(cachedKlass)" ) PythonClassAssumptionPair cachedClassInMROInfo ) {
@@ -147,7 +150,7 @@ protected ReadAttributeFromObjectNode[] create(int size) {
147150 return nodes ;
148151 }
149152
150- @ Specialization (guards = {"klass == cachedKlass" , "mroLength < 32" }, limit = "5 " , assumptions = "lookupStable" )
153+ @ Specialization (guards = {"klass == cachedKlass" , "mroLength < 32" }, limit = "getIntOption(getContext(), AttributeAccessInlineCacheMaxDepth) " , assumptions = "lookupStable" )
151154 @ ExplodeLoop (kind = ExplodeLoop .LoopExplosionKind .FULL_EXPLODE_UNTIL_RETURN )
152155 protected Object lookupConstantMRO (@ SuppressWarnings ("unused" ) PythonClass klass ,
153156 @ Cached ("klass" ) @ SuppressWarnings ("unused" ) PythonClass cachedKlass ,
@@ -165,7 +168,7 @@ protected Object lookupConstantMRO(@SuppressWarnings("unused") PythonClass klass
165168 return PNone .NO_VALUE ;
166169 }
167170
168- @ Specialization
171+ @ Specialization ( replaces = { "lookupConstantMROCached" , "lookupConstantMRO" })
169172 protected Object lookup (PythonClass klass ,
170173 @ Cached ("create()" ) ReadAttributeFromObjectNode readAttrNode ) {
171174 return lookupSlow (klass , key , readAttrNode );
0 commit comments