40
40
*/
41
41
package com .oracle .graal .python .pegparser .sst ;
42
42
43
- import java .math .BigInteger ;
44
-
45
- import com .oracle .graal .python .pegparser .ExprContext ;
46
-
47
43
public class SSTTreePrinterVisitor implements SSTreeVisitor <String > {
48
44
49
45
private static final String INDENTATION = " " ;
@@ -254,32 +250,41 @@ public String visit(ExprTy.Compare node) {
254
250
@ Override
255
251
public String visit (ExprTy .Constant node ) {
256
252
StringBuilder sb = new StringBuilder ();
257
- sb .append (node .kind ).append ("[" ).append (node .getSourceRange ().startOffset );
253
+ sb .append (node .value . kind ).append ("[" ).append (node .getSourceRange ().startOffset );
258
254
sb .append (", " ).append (node .getSourceRange ().endOffset ).append ("]" );
259
255
sb .append (" Value: " );
260
- switch (node .kind ) {
256
+ appendConstantValue (sb , node .value );
257
+ return sb .toString ();
258
+ }
259
+
260
+ private static void appendConstantValue (StringBuilder sb , ConstantValue value ) {
261
+ switch (value .kind ) {
262
+ case BIGINTEGER :
263
+ sb .append (value .getBigInteger ());
264
+ break ;
265
+ case BOOLEAN :
266
+ sb .append (value .getBoolean ());
267
+ break ;
261
268
case LONG :
262
- sb .append (( long ) node . value );
269
+ sb .append (value . getLong () );
263
270
break ;
264
271
case DOUBLE :
265
- sb .append (( double ) node . value );
272
+ sb .append (value . getDouble () );
266
273
break ;
267
274
case COMPLEX :
268
- double [] val = ( double []) node . value ;
275
+ double [] val = value . getComplex () ;
269
276
sb .append (String .format ("%g%+gj" , val [0 ], val [1 ]));
270
277
break ;
271
278
case RAW :
272
- String s = (String ) node .value ;
273
- appendEscapedString (sb , s );
279
+ appendEscapedString (sb , value .getRaw (String .class ));
280
+ break ;
281
+ case ELLIPSIS :
282
+ case NONE :
283
+ sb .append ((Object ) null );
274
284
break ;
275
285
default :
276
- if (node .value == null || node .value instanceof Boolean || node .value instanceof BigInteger || node .value instanceof String ) {
277
- sb .append (node .value );
278
- } else {
279
- sb .append ("<unprintable value>" );
280
- }
286
+ sb .append ("<unprintable value>" );
281
287
}
282
- return sb .toString ();
283
288
}
284
289
285
290
@ Override
@@ -381,7 +386,7 @@ public String visit(ExprTy.Lambda node) {
381
386
public String visit (ExprTy .List node ) {
382
387
StringBuilder sb = new StringBuilder ();
383
388
sb .append (addHeader (node ));
384
- if (node .context != null && node .context != ExprContext .Load ) {
389
+ if (node .context != null && node .context != ExprContextTy .Load ) {
385
390
sb .append (" Context: " ).append (node .context );
386
391
}
387
392
if (node .elements != null ) {
@@ -415,7 +420,7 @@ public String visit(ExprTy.ListComp node) {
415
420
public String visit (ExprTy .Name node ) {
416
421
StringBuilder sb = new StringBuilder ();
417
422
sb .append (addHeader (node )).append (" Value: \" " ).append (node .id ).append ('"' );
418
- if (node .context != ExprContext .Load ) {
423
+ if (node .context != ExprContextTy .Load ) {
419
424
sb .append (' ' ).append (node .context );
420
425
}
421
426
return sb .toString ();
@@ -504,7 +509,7 @@ public String visit(ExprTy.Starred node) {
504
509
public String visit (ExprTy .Subscript node ) {
505
510
StringBuilder sb = new StringBuilder ();
506
511
sb .append (addHeader (node ));
507
- if (node .context != null && node .context != ExprContext .Load ) {
512
+ if (node .context != null && node .context != ExprContextTy .Load ) {
508
513
sb .append (" Context: " ).append (node .context );
509
514
}
510
515
level ++;
@@ -518,7 +523,7 @@ public String visit(ExprTy.Subscript node) {
518
523
public String visit (ExprTy .Tuple node ) {
519
524
StringBuilder sb = new StringBuilder ();
520
525
sb .append (addHeader (node ));
521
- if (node .context != null && node .context != ExprContext .Load ) {
526
+ if (node .context != null && node .context != ExprContextTy .Load ) {
522
527
sb .append (" Context: " ).append (node .context );
523
528
}
524
529
if (node .elements != null ) {
@@ -629,7 +634,7 @@ public String visit(ModTy.Module node) {
629
634
}
630
635
631
636
@ Override
632
- public String visit (ModTy .TypeIgnore node ) {
637
+ public String visit (TypeIgnoreTy .TypeIgnore node ) {
633
638
StringBuilder sb = new StringBuilder ();
634
639
sb .append (addHeader (node ));
635
640
return sb .toString ();
@@ -689,17 +694,34 @@ public String visit(StmtTy.Assign node) {
689
694
690
695
@ Override
691
696
public String visit (StmtTy .AsyncFor node ) {
692
- return visit ((StmtTy .For ) node );
697
+ StringBuilder sb = new StringBuilder ();
698
+ sb .append (addHeader (node ));
699
+ level ++;
700
+ appendNode (sb , "Target" , node .target );
701
+ appendNode (sb , "Iter" , node .iter );
702
+ appendNodes (sb , "Body" , node .body );
703
+ appendNodes (sb , "Else" , node .orElse );
704
+ level --;
705
+ return sb .toString ();
693
706
}
694
707
695
708
@ Override
696
709
public String visit (StmtTy .AsyncFunctionDef node ) {
697
- return visit (( StmtTy . FunctionDef ) node );
710
+ return visitFunctionOrAsyncFunction ( node , node . name , node . args , node . body , node . decoratorList , node . returns , node . typeComment );
698
711
}
699
712
700
713
@ Override
701
714
public String visit (StmtTy .AsyncWith node ) {
702
- return visit ((StmtTy .With ) node );
715
+ StringBuilder sb = new StringBuilder ();
716
+ sb .append (addHeader (node ));
717
+ level ++;
718
+ appendNodes (sb , "Items" , node .items );
719
+ appendNodes (sb , "Body" , node .body );
720
+ if (node .typeComment != null ) {
721
+ appendString (sb , "TypeComment" , node .typeComment );
722
+ }
723
+ level --;
724
+ return sb .toString ();
703
725
}
704
726
705
727
@ Override
@@ -770,33 +792,37 @@ public String visit(StmtTy.For node) {
770
792
771
793
@ Override
772
794
public String visit (StmtTy .FunctionDef node ) {
795
+ return visitFunctionOrAsyncFunction (node , node .name , node .args , node .body , node .decoratorList , node .returns , node .typeComment );
796
+ }
797
+
798
+ private String visitFunctionOrAsyncFunction (SSTNode node , String name , ArgumentsTy args , StmtTy [] body , ExprTy [] decoratorList , ExprTy returns , String typeComment ) {
773
799
StringBuilder sb = new StringBuilder ();
774
800
sb .append (addHeader (node ));
775
801
level ++;
776
- appendNewLineIndented (sb , "Name:" ).append (node . name );
777
- if (node . decoratorList != null ) {
802
+ appendNewLineIndented (sb , "Name:" ).append (name );
803
+ if (decoratorList != null ) {
778
804
appendNewLineIndented (sb , "Decorators:" );
779
- for (SSTNode n : node . decoratorList ) {
805
+ for (SSTNode n : decoratorList ) {
780
806
appendNewLineIndented (sb , n .accept (this ));
781
807
}
782
808
}
783
- if (node . args != null ) {
784
- appendNewLineIndented (sb , node . args .accept (this ));
809
+ if (args != null ) {
810
+ appendNewLineIndented (sb , args .accept (this ));
785
811
}
786
- if (node . returns != null ) {
787
- appendNode (sb , "Result Annotation" , node . returns );
812
+ if (returns != null ) {
813
+ appendNode (sb , "Result Annotation" , returns );
788
814
}
789
- if (node . typeComment != null ) {
790
- appendNewLineIndented (sb , "Type Comment: " ).append (node . typeComment );
815
+ if (typeComment != null ) {
816
+ appendNewLineIndented (sb , "Type Comment: " ).append (typeComment );
791
817
}
792
- appendNewLineIndented (sb , "---- Function body of " ).append (node . name ).append (" ----" );
793
- for (SSTNode stm : node . body ) {
818
+ appendNewLineIndented (sb , "---- Function body of " ).append (name ).append (" ----" );
819
+ for (SSTNode stm : body ) {
794
820
appendNewLineIndented (sb , stm .accept (this ));
795
821
}
796
822
if (sb .lastIndexOf ("\n " ) != sb .length () - 1 ) {
797
823
sb .append ('\n' );
798
824
}
799
- sb .append (indent ()).append ("---- End of " ).append (node . name ).append (" function ----" );
825
+ sb .append (indent ()).append ("---- End of " ).append (name ).append (" function ----" );
800
826
level --;
801
827
802
828
return sb .toString ();
@@ -859,79 +885,79 @@ public String visit(StmtTy.Match node) {
859
885
}
860
886
861
887
@ Override
862
- public String visit (StmtTy . Match . Case node ) {
888
+ public String visit (MatchCaseTy node ) {
863
889
StringBuilder sb = new StringBuilder ();
864
890
sb .append (addHeader (node ));
865
891
return sb .toString ();
866
892
867
893
}
868
894
869
895
@ Override
870
- public String visit (StmtTy . Match . Pattern .MatchAs node ) {
896
+ public String visit (PatternTy .MatchAs node ) {
871
897
StringBuilder sb = new StringBuilder ();
872
898
sb .append (addHeader (node ));
873
899
return sb .toString ();
874
900
875
901
}
876
902
877
903
@ Override
878
- public String visit (StmtTy . Match . Pattern .MatchClass node ) {
904
+ public String visit (PatternTy .MatchClass node ) {
879
905
StringBuilder sb = new StringBuilder ();
880
906
sb .append (addHeader (node ));
881
907
return sb .toString ();
882
908
883
909
}
884
910
885
911
@ Override
886
- public String visit (StmtTy . Match . Pattern .MatchMapping node ) {
912
+ public String visit (PatternTy .MatchMapping node ) {
887
913
StringBuilder sb = new StringBuilder ();
888
914
sb .append (addHeader (node ));
889
915
return sb .toString ();
890
916
891
917
}
892
918
893
919
@ Override
894
- public String visit (StmtTy . Match . Pattern .MatchOr node ) {
920
+ public String visit (PatternTy .MatchOr node ) {
895
921
StringBuilder sb = new StringBuilder ();
896
922
sb .append (addHeader (node ));
897
923
return sb .toString ();
898
924
899
925
}
900
926
901
927
@ Override
902
- public String visit (StmtTy . Match . Pattern .MatchSequence node ) {
928
+ public String visit (PatternTy .MatchSequence node ) {
903
929
StringBuilder sb = new StringBuilder ();
904
930
sb .append (addHeader (node ));
905
931
return sb .toString ();
906
932
907
933
}
908
934
909
935
@ Override
910
- public String visit (StmtTy . Match . Pattern .MatchSingleton node ) {
936
+ public String visit (PatternTy .MatchSingleton node ) {
911
937
StringBuilder sb = new StringBuilder ();
912
938
sb .append (addHeader (node ));
913
939
return sb .toString ();
914
940
915
941
}
916
942
917
943
@ Override
918
- public String visit (StmtTy . Match . Pattern .MatchStar node ) {
944
+ public String visit (PatternTy .MatchStar node ) {
919
945
StringBuilder sb = new StringBuilder ();
920
946
sb .append (addHeader (node ));
921
947
return sb .toString ();
922
948
923
949
}
924
950
925
951
@ Override
926
- public String visit (StmtTy . Match . Pattern .MatchValue node ) {
952
+ public String visit (PatternTy .MatchValue node ) {
927
953
StringBuilder sb = new StringBuilder ();
928
954
sb .append (addHeader (node ));
929
955
return sb .toString ();
930
956
931
957
}
932
958
933
959
@ Override
934
- public String visit (StmtTy .NonLocal node ) {
960
+ public String visit (StmtTy .Nonlocal node ) {
935
961
StringBuilder sb = new StringBuilder ();
936
962
sb .append (addHeader (node )).append (": " );
937
963
for (String id : node .names ) {
@@ -978,7 +1004,7 @@ public String visit(StmtTy.Try node) {
978
1004
}
979
1005
980
1006
@ Override
981
- public String visit (StmtTy . Try .ExceptHandler node ) {
1007
+ public String visit (ExceptHandlerTy .ExceptHandler node ) {
982
1008
StringBuilder sb = new StringBuilder ();
983
1009
sb .append (addHeader (node ));
984
1010
level ++;
@@ -1014,11 +1040,10 @@ public String visit(StmtTy.With node) {
1014
1040
}
1015
1041
level --;
1016
1042
return sb .toString ();
1017
-
1018
1043
}
1019
1044
1020
1045
@ Override
1021
- public String visit (StmtTy . With . Item node ) {
1046
+ public String visit (WithItemTy node ) {
1022
1047
StringBuilder sb = new StringBuilder ();
1023
1048
sb .append (addHeader (node ));
1024
1049
level ++;
0 commit comments