41
41
42
42
package com .oracle .graal .python .test .parser ;
43
43
44
- import java .util .Set ;
44
+ import java .util .Collection ;
45
+ import java .util .TreeSet ;
45
46
46
47
import com .oracle .graal .python .builtins .objects .function .Signature ;
47
48
import com .oracle .graal .python .nodes .ModuleRootNode ;
59
60
import com .oracle .graal .python .nodes .frame .AccessNameNode ;
60
61
import com .oracle .graal .python .nodes .frame .FrameSlotIDs ;
61
62
import com .oracle .graal .python .nodes .frame .FrameSlotNode ;
63
+ import com .oracle .graal .python .nodes .frame .PythonFrame ;
62
64
import com .oracle .graal .python .nodes .frame .ReadGlobalOrBuiltinNode ;
63
65
import com .oracle .graal .python .nodes .frame .WriteGlobalNode ;
64
66
import com .oracle .graal .python .nodes .frame .WriteIdentifierNode ;
@@ -106,7 +108,7 @@ public boolean visit(ModuleRootNode module) {
106
108
nodeHeader (module , module .getName ());
107
109
level ++;
108
110
addSignature (module .getSignature ());
109
- addInfoPCloserRootNode (module );
111
+ addInfoPClosureRootNode (module );
110
112
indent (level );
111
113
sb .append ("Documentation: " );
112
114
add (module .getDoc ());
@@ -121,10 +123,10 @@ private void addInfoPClosureFunctionRootNode(PClosureFunctionRootNode node) {
121
123
sb .append ("CelVars: " );
122
124
add (node .getCellVars ());
123
125
newLine ();
124
- addInfoPCloserRootNode (node );
126
+ addInfoPClosureRootNode (node );
125
127
}
126
128
127
- private void addInfoPCloserRootNode (PClosureRootNode node ) {
129
+ private void addInfoPClosureRootNode (PClosureRootNode node ) {
128
130
indent (level );
129
131
sb .append ("FreeVars: " );
130
132
add (node .getFreeVars ());
@@ -141,7 +143,7 @@ private void addInfoPRootNode(PRootNode node) {
141
143
}
142
144
143
145
private void addInfoRootNode (RootNode node ) {
144
- addFrameDescriptor ( node .getFrameDescriptor ());
146
+ addIdentifiers ( PythonFrame . getIdentifiersAsString ( node .getFrameDescriptor () ));
145
147
}
146
148
147
149
private void addFunctionDefinitionNode (FunctionDefinitionNode node ) {
@@ -188,16 +190,16 @@ private void addFunctionDefinitionNode(FunctionDefinitionNode node) {
188
190
}
189
191
indent (level );
190
192
sb .append ("FreeVarSlots: " );
191
- add (node .getFreeVarDefinitionSlots ());
193
+ add (node .getFreeVarDefinitions ());
192
194
newLine ();
193
- add (node .getExecutionCellSlots ());
195
+ add (node .getExecutionCellSlots (), node . getCallTarget (). getRootNode (). getFrameDescriptor () );
194
196
visit (node .getFunctionRoot ());
195
197
}
196
198
197
199
public boolean visit (GeneratorFunctionDefinitionNode node ) {
198
200
nodeHeader (node , node .getFunctionName ());
199
201
level ++;
200
- addFrameDescriptor ( node .getFrameDescriptor ());
202
+ addIdentifiers ( PythonFrame . getIdentifiersAsString ( node .getFrameDescriptor () ));
201
203
indent (level );
202
204
GeneratorInfo generatorInfo = node .getGeneratorInfo ();
203
205
sb .append ("Active Flags: " ).append (generatorInfo .getNumOfActiveFlags ());
@@ -228,7 +230,7 @@ public boolean visit(FunctionRootNode node) {
228
230
sb .append ("Name: " ).append (node .getName ());
229
231
newLine ();
230
232
addInfoPClosureFunctionRootNode (node );
231
- add (node .getExecutionCellSlots ());
233
+ add (node .getExecutionCellSlots (), node . getFrameDescriptor () );
232
234
level --;
233
235
return true ;
234
236
}
@@ -347,12 +349,12 @@ public boolean visit(GeneratorExpressionNode node) {
347
349
indent (level );
348
350
sb .append ("Name: " ).append (node .getName ());
349
351
newLine ();
350
- addFrameDescriptor ( node .getFrameDescriptor ());
352
+ addIdentifiers ( PythonFrame . getIdentifiersAsString ( node .getFrameDescriptor () ));
351
353
indent (level );
352
354
sb .append ("Enclosing" );
353
355
newLine ();
354
356
level ++;
355
- addFrameDescriptor (node .getEnclosingFrameDescriptor ());
357
+ addIdentifiers (node .getEnclosingFrameDescriptor ());
356
358
level --;
357
359
indent (level );
358
360
GeneratorInfo generatorInfo = node .getGeneratorInfo ();
@@ -482,24 +484,20 @@ private void addSignature(Signature signature) {
482
484
level --;
483
485
}
484
486
485
- @ SuppressWarnings ("deprecation" ) // new Frame API
486
- private void addFrameDescriptor (FrameDescriptor fd ) {
487
+ private void addIdentifiers (Collection <? extends Object > identifiers ) {
487
488
indent (level );
488
489
sb .append ("FrameDescriptor: " );
489
- if (fd . getSlots (). size () == 0 ) {
490
+ if (identifiers . isEmpty () ) {
490
491
sb .append (" Empty" );
491
492
newLine ();
492
493
return ;
493
494
}
494
- sb .append (fd .getSlots ().size ()).append (" slots [" );
495
- Set <Object > identifiers = fd .getIdentifiers ();
496
- String [] names = new String [identifiers .size ()];
497
- int i = 0 ;
498
- String name ;
495
+ sb .append (identifiers .size ()).append (" slots [" );
496
+ TreeSet <String > names = new TreeSet <>();
499
497
for (Object identifier : identifiers ) {
500
- name = identifier .toString ();
498
+ String name = identifier .toString ();
501
499
if (printTmpSlots || (!printTmpSlots && !name .startsWith ("<>temp" ))) {
502
- names [ i ++] = name ;
500
+ names . add ( name ) ;
503
501
}
504
502
}
505
503
add (names );
@@ -535,55 +533,55 @@ private void add(String[] array) {
535
533
}
536
534
}
537
535
538
- @ SuppressWarnings ("deprecation" ) // new Frame API
539
- private void add (com .oracle .truffle .api .frame .FrameSlot [] slots ) {
540
- if (slots == null || slots .length == 0 ) {
536
+ private void add (Collection <String > array ) {
537
+ if (array == null || array .isEmpty ()) {
541
538
sb .append ("None" );
542
539
} else {
543
540
boolean first = true ;
544
- for (com . oracle . truffle . api . frame . FrameSlot slot : slots ) {
541
+ for (String text : array ) {
545
542
if (!first ) {
546
543
sb .append (", " );
547
544
} else {
548
545
first = false ;
549
546
}
550
- sb .append (slot . getIdentifier ()). append ( ", " );
547
+ sb .append (text );
551
548
}
552
549
}
553
550
}
554
551
555
- @ SuppressWarnings ("deprecation" ) // new Frame API
556
- private void add (com .oracle .truffle .api .frame .FrameSlot slot ) {
552
+ private void add (FrameSlotNode slot ) {
553
+ FrameDescriptor descriptor = ((Node ) slot ).getRootNode ().getFrameDescriptor ();
554
+ String full = "[" + slot .getSlotIndex () + "," + slot .getSlotIdentifier (descriptor ) + "," + slot .getSlotKind (descriptor ) + "]" ;
557
555
if (printTmpSlots ) {
558
- sb .append (slot . toString () );
556
+ sb .append (full );
559
557
} else {
560
- Object identifier = slot .getIdentifier ( );
558
+ Object identifier = slot .getSlotIdentifier ( descriptor );
561
559
if (identifier instanceof String ) {
562
- sb .append (slot . toString () );
560
+ sb .append (full );
563
561
} else if (identifier == FrameSlotIDs .RETURN_SLOT_ID ) {
564
562
sb .append ("<return_val>" );
565
563
} else if (identifier == FrameSlotIDs .FREEVAR__CLASS__ ) {
566
564
sb .append ("<>freevar__class__" );
567
565
} else if (identifier .toString ().startsWith ("<>temp" )) {
568
566
sb .append ("<>temp" );
569
567
} else {
570
- sb .append (slot . toString () );
568
+ sb .append (full );
571
569
}
572
570
}
573
571
}
574
572
575
- private void add (ExecutionCellSlots executionCellSlots ) {
573
+ private void add (ExecutionCellSlots executionCellSlots , FrameDescriptor descriptor ) {
576
574
indent (level );
577
575
sb .append ("ExecutionSlots:" );
578
576
newLine ();
579
577
level ++;
580
578
indent (level );
581
579
sb .append ("FreeVarsSlots: " );
582
- add (executionCellSlots .getFreeVarSlots ());
580
+ add (PythonFrame . extractSlotNames ( descriptor , executionCellSlots .getFreeVarSlots () ));
583
581
newLine ();
584
582
indent (level );
585
583
sb .append ("CellVarsSlots: " );
586
- add (executionCellSlots .getCellVarSlots ());
584
+ add (PythonFrame . extractSlotNames ( descriptor , executionCellSlots .getCellVarSlots () ));
587
585
newLine ();
588
586
level --;
589
587
}
@@ -694,7 +692,7 @@ public boolean visit(Node node) {
694
692
if (node instanceof FrameSlotNode ) {
695
693
indent (level );
696
694
sb .append ("Frame: " );
697
- add ((( FrameSlotNode ) node ). getSlot () );
695
+ add ((FrameSlotNode ) node );
698
696
newLine ();
699
697
}
700
698
if (node instanceof WriteGlobalNode ) {
0 commit comments