Skip to content

Commit e224de3

Browse files
committed
[GR-21175] Pass __class__ cell via a temporary __classcell__ attribute
PullRequest: graalpython/818
2 parents b111cda + 2ed2c58 commit e224de3

File tree

88 files changed

+68917
-69426
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+68917
-69426
lines changed

graalpython/com.oracle.graal.python.test/testData/goldenFiles/ClassDefTests/classDef01.scope

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Scope: []
22
Kind: Module
3-
FrameDescriptor: [<>temp0]
3+
FrameDescriptor: Empty
44
CellVars: Empty
55
FreeVars: Empty
66
Scope: foo

graalpython/com.oracle.graal.python.test/testData/goldenFiles/ClassDefTests/classDef01.tast

Lines changed: 49 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ ModuleRootNode Name: <module 'classDef01'> SourceSection: [0,16]`class foo():pas
22
Signature: varArgs=False, varKeywordArgs=False, noArguments=True, positionalOnly=True, requiresKeywordArgs=False
33
FreeVars: None
44
NeedsCellFrame: False
5-
FrameDescriptor: 1 slots [<>temp0]
5+
FrameDescriptor: Empty
66
Documentation: None
77
InnerRootNode SourceSection: [0,16]`class foo():pass`
88
ExpressionWithSideEffect SourceSection: [0,16]`class foo():pass`
@@ -11,55 +11,51 @@ ModuleRootNode Name: <module 'classDef01'> SourceSection: [0,16]`class foo():pas
1111
SideEffect:
1212
WriteNameNodeGen SourceSection: [0,16]`class foo():pass`
1313
Identifier: foo
14-
ExpressionWithSideEffects SourceSection: None
15-
WriteLocalVariableNodeGen SourceSection: None
16-
Identifier: <>temp0
17-
WriteLocalFrameSlotNodeGen SourceSection: None
18-
Frame: [0,<>temp0,Illegal]
19-
PythonCallNodeGen SourceSection: [0,16]`class foo():pass`
20-
CallNodeGen SourceSection: None
21-
FunctionDefinitionNode Name: foo SourceSection: None
22-
Arguments: None
23-
KwArguments: None
24-
Documentation: None
25-
FreeVarSlots: None
26-
ExecutionSlots:
27-
FreeVarsSlots: None
28-
CellVarsSlots: __class__,
29-
ClassBodyRootNode SourceSection: [0,16]`class foo():pass`
30-
Name: foo
31-
Signature: varArgs=False, varKeywordArgs=False, noArguments=False, positionalOnly=True, requiresKeywordArgs=False
32-
Param Names: namespace
33-
CelVars: __class__
34-
FreeVars: None
35-
NeedsCellFrame: False
36-
FrameDescriptor: 1 slots [__class__]
37-
ExecutionSlots:
38-
FreeVarsSlots: None
39-
CellVarsSlots: __class__,
40-
InnerRootNode SourceSection: [0,16]`class foo():pass`
41-
ReturnTargetNode SourceSection: [0,16]`class foo():pass`
42-
Body: BlockNode SourceSection: None
43-
ClassDefinitionPrologueNode SourceSection: None
44-
QualName: foo
45-
ReadGlobalOrBuiltinNodeGen SourceSection: None
46-
Identifier: __name__
47-
ReadAttributeFromObjectNotTypeNodeGen SourceSection: None
48-
ReadIndexedArgumentNodeGen SourceSection: None
49-
Index: 0
50-
SetItemIfNotPresentNodeGen SourceSection: None
51-
SetItemNodeGen SourceSection: None
52-
FunctionBodyNode SourceSection: [12,16]`pass`
53-
ExpressionStatementNode SourceSection: [12,16]`pass`
54-
EmptyNode SourceSection: [12,16]`pass`
55-
Return Expresssion: ObjectLiteralNode SourceSection: None
56-
StringLiteralNode SourceSection: None
57-
GetCallAttributeNodeGen SourceSection: None
58-
BuiltinsLiteralNode SourceSection: None
59-
WriteCellVarNodeGen SourceSection: None
60-
ReadLocalVariableNode SourceSection: None
61-
Frame: [0,<>temp0,Illegal]
62-
ReadVariableFromFrameNodeGen SourceSection: None
63-
ReadLocalVariableNode SourceSection: None
64-
Frame: [0,<>temp0,Illegal]
65-
ReadVariableFromFrameNodeGen SourceSection: None
14+
PythonCallNodeGen SourceSection: [0,16]`class foo():pass`
15+
CallNodeGen SourceSection: None
16+
FunctionDefinitionNode Name: foo SourceSection: None
17+
Arguments: None
18+
KwArguments: None
19+
Documentation: None
20+
FreeVarSlots: None
21+
ExecutionSlots:
22+
FreeVarsSlots: None
23+
CellVarsSlots: __class__,
24+
ClassBodyRootNode SourceSection: [0,16]`class foo():pass`
25+
Name: foo
26+
Signature: varArgs=False, varKeywordArgs=False, noArguments=False, positionalOnly=True, requiresKeywordArgs=False
27+
Param Names: namespace
28+
CelVars: __class__
29+
FreeVars: None
30+
NeedsCellFrame: False
31+
FrameDescriptor: 1 slots [__class__]
32+
ExecutionSlots:
33+
FreeVarsSlots: None
34+
CellVarsSlots: __class__,
35+
InnerRootNode SourceSection: [0,16]`class foo():pass`
36+
ReturnTargetNode SourceSection: [0,16]`class foo():pass`
37+
Body: BlockNode SourceSection: None
38+
ClassDefinitionPrologueNode SourceSection: None
39+
QualName: foo
40+
ReadGlobalOrBuiltinNodeGen SourceSection: None
41+
Identifier: __name__
42+
ReadAttributeFromObjectNotTypeNodeGen SourceSection: None
43+
ReadIndexedArgumentNodeGen SourceSection: None
44+
Index: 0
45+
SetItemIfNotPresentNodeGen SourceSection: None
46+
SetItemNodeGen SourceSection: None
47+
FunctionBodyNode SourceSection: [12,16]`pass`
48+
ExpressionStatementNode SourceSection: [12,16]`pass`
49+
EmptyNode SourceSection: [12,16]`pass`
50+
SetItemNodeGen SourceSection: None
51+
ArgumentExpressionNode SourceSection: None
52+
ReadIndexedArgumentNodeGen SourceSection: None
53+
Index: 0
54+
StringLiteralNode SourceSection: None
55+
ReadLocalVariableNode SourceSection: None
56+
Frame: [0,__class__,Illegal]
57+
ReadVariableFromFrameNodeGen SourceSection: None
58+
Return Expresssion: ObjectLiteralNode SourceSection: None
59+
StringLiteralNode SourceSection: None
60+
GetCallAttributeNodeGen SourceSection: None
61+
BuiltinsLiteralNode SourceSection: None

graalpython/com.oracle.graal.python.test/testData/goldenFiles/ClassDefTests/classDef02.scope

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Scope: []
22
Kind: Module
3-
FrameDescriptor: [<>temp0]
3+
FrameDescriptor: Empty
44
CellVars: Empty
55
FreeVars: Empty
66
Scope: foo

graalpython/com.oracle.graal.python.test/testData/goldenFiles/ClassDefTests/classDef02.tast

Lines changed: 51 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ ModuleRootNode Name: <module 'classDef02'> SourceSection: [0,22]`class foo(objec
22
Signature: varArgs=False, varKeywordArgs=False, noArguments=True, positionalOnly=True, requiresKeywordArgs=False
33
FreeVars: None
44
NeedsCellFrame: False
5-
FrameDescriptor: 1 slots [<>temp0]
5+
FrameDescriptor: Empty
66
Documentation: None
77
InnerRootNode SourceSection: [0,22]`class foo(object):pa...`
88
ExpressionWithSideEffect SourceSection: [0,22]`class foo(object):pa...`
@@ -11,57 +11,53 @@ ModuleRootNode Name: <module 'classDef02'> SourceSection: [0,22]`class foo(objec
1111
SideEffect:
1212
WriteNameNodeGen SourceSection: [0,22]`class foo(object):pa...`
1313
Identifier: foo
14-
ExpressionWithSideEffects SourceSection: None
15-
WriteLocalVariableNodeGen SourceSection: None
16-
Identifier: <>temp0
17-
WriteLocalFrameSlotNodeGen SourceSection: None
18-
Frame: [0,<>temp0,Illegal]
19-
PythonCallNodeGen SourceSection: [0,22]`class foo(object):pa...`
20-
CallNodeGen SourceSection: None
21-
FunctionDefinitionNode Name: foo SourceSection: None
22-
Arguments: None
23-
KwArguments: None
24-
Documentation: None
25-
FreeVarSlots: None
26-
ExecutionSlots:
27-
FreeVarsSlots: None
28-
CellVarsSlots: __class__,
29-
ClassBodyRootNode SourceSection: [0,22]`class foo(object):pa...`
30-
Name: foo
31-
Signature: varArgs=False, varKeywordArgs=False, noArguments=False, positionalOnly=True, requiresKeywordArgs=False
32-
Param Names: namespace
33-
CelVars: __class__
34-
FreeVars: None
35-
NeedsCellFrame: False
36-
FrameDescriptor: 1 slots [__class__]
37-
ExecutionSlots:
38-
FreeVarsSlots: None
39-
CellVarsSlots: __class__,
40-
InnerRootNode SourceSection: [0,22]`class foo(object):pa...`
41-
ReturnTargetNode SourceSection: [0,22]`class foo(object):pa...`
42-
Body: BlockNode SourceSection: None
43-
ClassDefinitionPrologueNode SourceSection: None
44-
QualName: foo
45-
ReadGlobalOrBuiltinNodeGen SourceSection: None
46-
Identifier: __name__
47-
ReadAttributeFromObjectNotTypeNodeGen SourceSection: None
48-
ReadIndexedArgumentNodeGen SourceSection: None
49-
Index: 0
50-
SetItemIfNotPresentNodeGen SourceSection: None
51-
SetItemNodeGen SourceSection: None
52-
FunctionBodyNode SourceSection: [18,22]`pass`
53-
ExpressionStatementNode SourceSection: [18,22]`pass`
54-
EmptyNode SourceSection: [18,22]`pass`
55-
Return Expresssion: ObjectLiteralNode SourceSection: None
56-
StringLiteralNode SourceSection: None
57-
ReadNameNodeGen SourceSection: [10,16]`object`
58-
Identifier: object
59-
GetCallAttributeNodeGen SourceSection: None
60-
BuiltinsLiteralNode SourceSection: None
61-
WriteCellVarNodeGen SourceSection: None
62-
ReadLocalVariableNode SourceSection: None
63-
Frame: [0,<>temp0,Illegal]
64-
ReadVariableFromFrameNodeGen SourceSection: None
65-
ReadLocalVariableNode SourceSection: None
66-
Frame: [0,<>temp0,Illegal]
67-
ReadVariableFromFrameNodeGen SourceSection: None
14+
PythonCallNodeGen SourceSection: [0,22]`class foo(object):pa...`
15+
CallNodeGen SourceSection: None
16+
FunctionDefinitionNode Name: foo SourceSection: None
17+
Arguments: None
18+
KwArguments: None
19+
Documentation: None
20+
FreeVarSlots: None
21+
ExecutionSlots:
22+
FreeVarsSlots: None
23+
CellVarsSlots: __class__,
24+
ClassBodyRootNode SourceSection: [0,22]`class foo(object):pa...`
25+
Name: foo
26+
Signature: varArgs=False, varKeywordArgs=False, noArguments=False, positionalOnly=True, requiresKeywordArgs=False
27+
Param Names: namespace
28+
CelVars: __class__
29+
FreeVars: None
30+
NeedsCellFrame: False
31+
FrameDescriptor: 1 slots [__class__]
32+
ExecutionSlots:
33+
FreeVarsSlots: None
34+
CellVarsSlots: __class__,
35+
InnerRootNode SourceSection: [0,22]`class foo(object):pa...`
36+
ReturnTargetNode SourceSection: [0,22]`class foo(object):pa...`
37+
Body: BlockNode SourceSection: None
38+
ClassDefinitionPrologueNode SourceSection: None
39+
QualName: foo
40+
ReadGlobalOrBuiltinNodeGen SourceSection: None
41+
Identifier: __name__
42+
ReadAttributeFromObjectNotTypeNodeGen SourceSection: None
43+
ReadIndexedArgumentNodeGen SourceSection: None
44+
Index: 0
45+
SetItemIfNotPresentNodeGen SourceSection: None
46+
SetItemNodeGen SourceSection: None
47+
FunctionBodyNode SourceSection: [18,22]`pass`
48+
ExpressionStatementNode SourceSection: [18,22]`pass`
49+
EmptyNode SourceSection: [18,22]`pass`
50+
SetItemNodeGen SourceSection: None
51+
ArgumentExpressionNode SourceSection: None
52+
ReadIndexedArgumentNodeGen SourceSection: None
53+
Index: 0
54+
StringLiteralNode SourceSection: None
55+
ReadLocalVariableNode SourceSection: None
56+
Frame: [0,__class__,Illegal]
57+
ReadVariableFromFrameNodeGen SourceSection: None
58+
Return Expresssion: ObjectLiteralNode SourceSection: None
59+
StringLiteralNode SourceSection: None
60+
ReadNameNodeGen SourceSection: [10,16]`object`
61+
Identifier: object
62+
GetCallAttributeNodeGen SourceSection: None
63+
BuiltinsLiteralNode SourceSection: None

graalpython/com.oracle.graal.python.test/testData/goldenFiles/ClassDefTests/classDef05.scope

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Scope: []
55
FreeVars: Empty
66
Scope: fn
77
Kind: Function
8-
FrameDescriptor: [<return_val>, DerivedClassName, <>temp1]
8+
FrameDescriptor: [<return_val>, DerivedClassName]
99
CellVars: Empty
1010
FreeVars: Empty
1111
Scope: DerivedClassName

0 commit comments

Comments
 (0)