4242
4343import static com .oracle .graal .python .runtime .exception .PythonErrorType .AttributeError ;
4444
45- import com .oracle .graal .python .PythonLanguage ;
4645import com .oracle .graal .python .builtins .PythonBuiltinClassType ;
4746import com .oracle .graal .python .builtins .objects .PNone ;
4847import com .oracle .graal .python .builtins .objects .function .BuiltinMethodDescriptor ;
5251import com .oracle .graal .python .builtins .objects .type .PythonManagedClass ;
5352import com .oracle .graal .python .builtins .objects .type .SpecialMethodSlot ;
5453import com .oracle .graal .python .builtins .objects .type .TypeBuiltins ;
54+ import com .oracle .graal .python .nodes .PNodeWithContext ;
5555import com .oracle .graal .python .nodes .attributes .GetAttributeNodeFactory .GetFixedAttributeNodeGen ;
5656import com .oracle .graal .python .nodes .call .special .CallBinaryMethodNode ;
5757import com .oracle .graal .python .nodes .call .special .LookupAndCallBinaryNode ;
6262import com .oracle .graal .python .nodes .object .IsBuiltinClassProfile ;
6363import com .oracle .graal .python .nodes .statement .StatementNode ;
6464import com .oracle .graal .python .runtime .exception .PException ;
65- import com .oracle .truffle .api .Assumption ;
6665import com .oracle .truffle .api .CompilerDirectives ;
6766import com .oracle .truffle .api .CompilerDirectives .CompilationFinal ;
6867import com .oracle .truffle .api .dsl .Cached ;
6968import com .oracle .truffle .api .dsl .Specialization ;
7069import com .oracle .truffle .api .frame .VirtualFrame ;
71- import com .oracle .truffle .api .nodes .Node ;
7270import com .oracle .truffle .api .profiles .ConditionProfile ;
7371
7472public final class GetAttributeNode extends ExpressionNode implements ReadNode {
@@ -111,7 +109,7 @@ public ExpressionNode getObject() {
111109 return objectExpression ;
112110 }
113111
114- abstract static class GetAttributeBaseNode extends Node {
112+ abstract static class GetAttributeBaseNode extends PNodeWithContext {
115113
116114 @ Child protected LookupAndCallBinaryNode dispatchNode = LookupAndCallBinaryNode .create (SpecialMethodSlot .GetAttribute );
117115 @ Child private IsBuiltinClassProfile isBuiltinClassProfile ;
@@ -175,10 +173,6 @@ protected Object getPythonClass(Object object) {
175173 return getClassNode .execute (object );
176174 }
177175
178- Assumption singleContextAssumption () {
179- return PythonLanguage .get (this ).singleContextAssumption ;
180- }
181-
182176 protected IsBuiltinClassProfile getErrorProfile () {
183177 if (isBuiltinClassProfile == null ) {
184178 CompilerDirectives .transferToInterpreterAndInvalidate ();
@@ -235,7 +229,7 @@ protected static boolean isTypeGetAttribute(Object lazyClass) {
235229 * it in single context mode.
236230 */
237231
238- @ Specialization (assumptions = "singleContextAssumption ()" )
232+ @ Specialization (guards = "isSingleContext ()" )
239233 final Object doSingleContext (VirtualFrame frame , Object object ) {
240234 try {
241235 return dispatchNode .executeObject (frame , object , key );
@@ -245,7 +239,7 @@ final Object doSingleContext(VirtualFrame frame, Object object) {
245239 }
246240 }
247241
248- @ Specialization (replaces = "doSingleContext " , guards = "isObjectGetAttribute(getPythonClass(object))" )
242+ @ Specialization (guards = { "!isSingleContext() " , "isObjectGetAttribute(getPythonClass(object))" } )
249243 final Object doBuiltinObject (VirtualFrame frame , Object object ,
250244 @ Cached ObjectBuiltins .GetAttributeNode getAttributeNode ) {
251245 try {
@@ -256,7 +250,7 @@ final Object doBuiltinObject(VirtualFrame frame, Object object,
256250 }
257251 }
258252
259- @ Specialization (replaces = "doSingleContext " , guards = "isTypeGetAttribute(getPythonClass(object))" )
253+ @ Specialization (guards = { "!isSingleContext() " , "isTypeGetAttribute(getPythonClass(object))" } )
260254 final Object doBuiltinType (VirtualFrame frame , Object object ,
261255 @ Cached TypeBuiltins .GetattributeNode getAttributeNode ) {
262256 try {
@@ -267,7 +261,7 @@ final Object doBuiltinType(VirtualFrame frame, Object object,
267261 }
268262 }
269263
270- @ Specialization (replaces = "doSingleContext " , guards = "isModuleGetAttribute(getPythonClass(object))" )
264+ @ Specialization (guards = { "!isSingleContext() " , "isModuleGetAttribute(getPythonClass(object))" } )
271265 final Object doBuiltinModule (VirtualFrame frame , Object object ,
272266 @ Cached ModuleBuiltins .ModuleGetattritbuteNode getAttributeNode ) {
273267 try {
@@ -278,7 +272,7 @@ final Object doBuiltinModule(VirtualFrame frame, Object object,
278272 }
279273 }
280274
281- @ Specialization (replaces = {"doBuiltinObject" , "doBuiltinType" , "doBuiltinModule" })
275+ @ Specialization (guards = "!isSingleContext()" , replaces = {"doBuiltinObject" , "doBuiltinType" , "doBuiltinModule" })
282276 final Object doGeneric (VirtualFrame frame , Object object ) {
283277 try {
284278 return dispatchNode .executeObject (frame , object , key );
0 commit comments