prism 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -1
- data/README.md +2 -1
- data/config.yml +188 -55
- data/docs/building.md +9 -2
- data/docs/configuration.md +10 -9
- data/docs/encoding.md +24 -56
- data/docs/local_variable_depth.md +229 -0
- data/docs/ruby_api.md +2 -0
- data/docs/serialization.md +18 -13
- data/ext/prism/api_node.c +337 -195
- data/ext/prism/extconf.rb +13 -7
- data/ext/prism/extension.c +96 -32
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +340 -137
- data/include/prism/defines.h +17 -0
- data/include/prism/diagnostic.h +11 -5
- data/include/prism/encoding.h +248 -0
- data/include/prism/options.h +2 -2
- data/include/prism/parser.h +62 -42
- data/include/prism/regexp.h +2 -2
- data/include/prism/util/pm_buffer.h +9 -1
- data/include/prism/util/pm_memchr.h +2 -2
- data/include/prism/util/pm_strpbrk.h +3 -3
- data/include/prism/version.h +2 -2
- data/include/prism.h +13 -15
- data/lib/prism/compiler.rb +12 -0
- data/lib/prism/debug.rb +9 -4
- data/lib/prism/desugar_compiler.rb +3 -3
- data/lib/prism/dispatcher.rb +56 -0
- data/lib/prism/dot_visitor.rb +476 -198
- data/lib/prism/dsl.rb +66 -46
- data/lib/prism/ffi.rb +16 -3
- data/lib/prism/lex_compat.rb +19 -9
- data/lib/prism/mutation_compiler.rb +20 -0
- data/lib/prism/node.rb +1173 -450
- data/lib/prism/node_ext.rb +41 -16
- data/lib/prism/parse_result.rb +12 -15
- data/lib/prism/ripper_compat.rb +49 -34
- data/lib/prism/serialize.rb +242 -212
- data/lib/prism/visitor.rb +12 -0
- data/lib/prism.rb +20 -4
- data/prism.gemspec +4 -10
- data/rbi/prism.rbi +605 -230
- data/rbi/prism_static.rbi +3 -0
- data/sig/prism.rbs +379 -124
- data/sig/prism_static.rbs +1 -0
- data/src/diagnostic.c +228 -222
- data/src/encoding.c +5137 -0
- data/src/node.c +66 -0
- data/src/options.c +21 -2
- data/src/prettyprint.c +806 -406
- data/src/prism.c +1092 -700
- data/src/regexp.c +3 -3
- data/src/serialize.c +227 -157
- data/src/util/pm_buffer.c +10 -1
- data/src/util/pm_memchr.c +1 -1
- data/src/util/pm_strpbrk.c +4 -4
- metadata +5 -11
- data/include/prism/enc/pm_encoding.h +0 -227
- data/src/enc/pm_big5.c +0 -116
- data/src/enc/pm_cp51932.c +0 -57
- data/src/enc/pm_euc_jp.c +0 -69
- data/src/enc/pm_gbk.c +0 -65
- data/src/enc/pm_shift_jis.c +0 -57
- data/src/enc/pm_tables.c +0 -2073
- data/src/enc/pm_unicode.c +0 -2369
- data/src/enc/pm_windows_31j.c +0 -57
data/lib/prism/dot_visitor.rb
CHANGED
@@ -216,17 +216,21 @@ module Prism
|
|
216
216
|
table = Table.new("ArgumentsNode")
|
217
217
|
id = node_id(node)
|
218
218
|
|
219
|
-
#
|
220
|
-
table.field("
|
219
|
+
# flags
|
220
|
+
table.field("flags", arguments_node_flags_inspect(node))
|
221
221
|
|
222
|
-
|
223
|
-
|
222
|
+
# arguments
|
223
|
+
if node.arguments.any?
|
224
|
+
table.field("arguments", port: true)
|
224
225
|
|
225
|
-
|
226
|
-
|
226
|
+
waypoint = "#{id}_arguments"
|
227
|
+
digraph.waypoint("#{waypoint};")
|
227
228
|
|
228
|
-
|
229
|
-
|
229
|
+
digraph.edge("#{id}:arguments -> #{waypoint};")
|
230
|
+
node.arguments.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
231
|
+
else
|
232
|
+
table.field("arguments", "[]")
|
233
|
+
end
|
230
234
|
|
231
235
|
digraph.nodes << <<~DOT
|
232
236
|
#{id} [
|
@@ -242,14 +246,21 @@ module Prism
|
|
242
246
|
table = Table.new("ArrayNode")
|
243
247
|
id = node_id(node)
|
244
248
|
|
249
|
+
# flags
|
250
|
+
table.field("flags", array_node_flags_inspect(node))
|
251
|
+
|
245
252
|
# elements
|
246
|
-
|
253
|
+
if node.elements.any?
|
254
|
+
table.field("elements", port: true)
|
247
255
|
|
248
|
-
|
249
|
-
|
256
|
+
waypoint = "#{id}_elements"
|
257
|
+
digraph.waypoint("#{waypoint};")
|
250
258
|
|
251
|
-
|
252
|
-
|
259
|
+
digraph.edge("#{id}:elements -> #{waypoint};")
|
260
|
+
node.elements.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
261
|
+
else
|
262
|
+
table.field("elements", "[]")
|
263
|
+
end
|
253
264
|
|
254
265
|
# opening_loc
|
255
266
|
unless (opening_loc = node.opening_loc).nil?
|
@@ -282,13 +293,17 @@ module Prism
|
|
282
293
|
end
|
283
294
|
|
284
295
|
# requireds
|
285
|
-
|
296
|
+
if node.requireds.any?
|
297
|
+
table.field("requireds", port: true)
|
286
298
|
|
287
|
-
|
288
|
-
|
299
|
+
waypoint = "#{id}_requireds"
|
300
|
+
digraph.waypoint("#{waypoint};")
|
289
301
|
|
290
|
-
|
291
|
-
|
302
|
+
digraph.edge("#{id}:requireds -> #{waypoint};")
|
303
|
+
node.requireds.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
304
|
+
else
|
305
|
+
table.field("requireds", "[]")
|
306
|
+
end
|
292
307
|
|
293
308
|
# rest
|
294
309
|
unless (rest = node.rest).nil?
|
@@ -297,13 +312,17 @@ module Prism
|
|
297
312
|
end
|
298
313
|
|
299
314
|
# posts
|
300
|
-
|
315
|
+
if node.posts.any?
|
316
|
+
table.field("posts", port: true)
|
301
317
|
|
302
|
-
|
303
|
-
|
318
|
+
waypoint = "#{id}_posts"
|
319
|
+
digraph.waypoint("#{waypoint};")
|
304
320
|
|
305
|
-
|
306
|
-
|
321
|
+
digraph.edge("#{id}:posts -> #{waypoint};")
|
322
|
+
node.posts.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
323
|
+
else
|
324
|
+
table.field("posts", "[]")
|
325
|
+
end
|
307
326
|
|
308
327
|
# opening_loc
|
309
328
|
unless (opening_loc = node.opening_loc).nil?
|
@@ -489,6 +508,9 @@ module Prism
|
|
489
508
|
# locals
|
490
509
|
table.field("locals", node.locals.inspect)
|
491
510
|
|
511
|
+
# locals_body_index
|
512
|
+
table.field("locals_body_index", node.locals_body_index.inspect)
|
513
|
+
|
492
514
|
# parameters
|
493
515
|
unless (parameters = node.parameters).nil?
|
494
516
|
table.field("parameters", port: true)
|
@@ -553,13 +575,17 @@ module Prism
|
|
553
575
|
end
|
554
576
|
|
555
577
|
# locals
|
556
|
-
|
578
|
+
if node.locals.any?
|
579
|
+
table.field("locals", port: true)
|
557
580
|
|
558
|
-
|
559
|
-
|
581
|
+
waypoint = "#{id}_locals"
|
582
|
+
digraph.waypoint("#{waypoint};")
|
560
583
|
|
561
|
-
|
562
|
-
|
584
|
+
digraph.edge("#{id}:locals -> #{waypoint};")
|
585
|
+
node.locals.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
586
|
+
else
|
587
|
+
table.field("locals", "[]")
|
588
|
+
end
|
563
589
|
|
564
590
|
# opening_loc
|
565
591
|
unless (opening_loc = node.opening_loc).nil?
|
@@ -608,6 +634,9 @@ module Prism
|
|
608
634
|
table = Table.new("CallAndWriteNode")
|
609
635
|
id = node_id(node)
|
610
636
|
|
637
|
+
# flags
|
638
|
+
table.field("flags", call_node_flags_inspect(node))
|
639
|
+
|
611
640
|
# receiver
|
612
641
|
unless (receiver = node.receiver).nil?
|
613
642
|
table.field("receiver", port: true)
|
@@ -624,9 +653,6 @@ module Prism
|
|
624
653
|
table.field("message_loc", location_inspect(message_loc))
|
625
654
|
end
|
626
655
|
|
627
|
-
# flags
|
628
|
-
table.field("flags", call_node_flags_inspect(node))
|
629
|
-
|
630
656
|
# read_name
|
631
657
|
table.field("read_name", node.read_name.inspect)
|
632
658
|
|
@@ -654,6 +680,9 @@ module Prism
|
|
654
680
|
table = Table.new("CallNode")
|
655
681
|
id = node_id(node)
|
656
682
|
|
683
|
+
# flags
|
684
|
+
table.field("flags", call_node_flags_inspect(node))
|
685
|
+
|
657
686
|
# receiver
|
658
687
|
unless (receiver = node.receiver).nil?
|
659
688
|
table.field("receiver", port: true)
|
@@ -665,6 +694,9 @@ module Prism
|
|
665
694
|
table.field("call_operator_loc", location_inspect(call_operator_loc))
|
666
695
|
end
|
667
696
|
|
697
|
+
# name
|
698
|
+
table.field("name", node.name.inspect)
|
699
|
+
|
668
700
|
# message_loc
|
669
701
|
unless (message_loc = node.message_loc).nil?
|
670
702
|
table.field("message_loc", location_inspect(message_loc))
|
@@ -692,12 +724,6 @@ module Prism
|
|
692
724
|
digraph.edge("#{id}:block -> #{node_id(block)};")
|
693
725
|
end
|
694
726
|
|
695
|
-
# flags
|
696
|
-
table.field("flags", call_node_flags_inspect(node))
|
697
|
-
|
698
|
-
# name
|
699
|
-
table.field("name", node.name.inspect)
|
700
|
-
|
701
727
|
digraph.nodes << <<~DOT
|
702
728
|
#{id} [
|
703
729
|
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
@@ -712,6 +738,9 @@ module Prism
|
|
712
738
|
table = Table.new("CallOperatorWriteNode")
|
713
739
|
id = node_id(node)
|
714
740
|
|
741
|
+
# flags
|
742
|
+
table.field("flags", call_node_flags_inspect(node))
|
743
|
+
|
715
744
|
# receiver
|
716
745
|
unless (receiver = node.receiver).nil?
|
717
746
|
table.field("receiver", port: true)
|
@@ -728,9 +757,6 @@ module Prism
|
|
728
757
|
table.field("message_loc", location_inspect(message_loc))
|
729
758
|
end
|
730
759
|
|
731
|
-
# flags
|
732
|
-
table.field("flags", call_node_flags_inspect(node))
|
733
|
-
|
734
760
|
# read_name
|
735
761
|
table.field("read_name", node.read_name.inspect)
|
736
762
|
|
@@ -761,6 +787,9 @@ module Prism
|
|
761
787
|
table = Table.new("CallOrWriteNode")
|
762
788
|
id = node_id(node)
|
763
789
|
|
790
|
+
# flags
|
791
|
+
table.field("flags", call_node_flags_inspect(node))
|
792
|
+
|
764
793
|
# receiver
|
765
794
|
unless (receiver = node.receiver).nil?
|
766
795
|
table.field("receiver", port: true)
|
@@ -777,9 +806,6 @@ module Prism
|
|
777
806
|
table.field("message_loc", location_inspect(message_loc))
|
778
807
|
end
|
779
808
|
|
780
|
-
# flags
|
781
|
-
table.field("flags", call_node_flags_inspect(node))
|
782
|
-
|
783
809
|
# read_name
|
784
810
|
table.field("read_name", node.read_name.inspect)
|
785
811
|
|
@@ -802,6 +828,36 @@ module Prism
|
|
802
828
|
super
|
803
829
|
end
|
804
830
|
|
831
|
+
# Visit a CallTargetNode node.
|
832
|
+
def visit_call_target_node(node)
|
833
|
+
table = Table.new("CallTargetNode")
|
834
|
+
id = node_id(node)
|
835
|
+
|
836
|
+
# flags
|
837
|
+
table.field("flags", call_node_flags_inspect(node))
|
838
|
+
|
839
|
+
# receiver
|
840
|
+
table.field("receiver", port: true)
|
841
|
+
digraph.edge("#{id}:receiver -> #{node_id(node.receiver)};")
|
842
|
+
|
843
|
+
# call_operator_loc
|
844
|
+
table.field("call_operator_loc", location_inspect(node.call_operator_loc))
|
845
|
+
|
846
|
+
# name
|
847
|
+
table.field("name", node.name.inspect)
|
848
|
+
|
849
|
+
# message_loc
|
850
|
+
table.field("message_loc", location_inspect(node.message_loc))
|
851
|
+
|
852
|
+
digraph.nodes << <<~DOT
|
853
|
+
#{id} [
|
854
|
+
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
855
|
+
];
|
856
|
+
DOT
|
857
|
+
|
858
|
+
super
|
859
|
+
end
|
860
|
+
|
805
861
|
# Visit a CapturePatternNode node.
|
806
862
|
def visit_capture_pattern_node(node)
|
807
863
|
table = Table.new("CapturePatternNode")
|
@@ -839,13 +895,17 @@ module Prism
|
|
839
895
|
end
|
840
896
|
|
841
897
|
# conditions
|
842
|
-
|
898
|
+
if node.conditions.any?
|
899
|
+
table.field("conditions", port: true)
|
843
900
|
|
844
|
-
|
845
|
-
|
901
|
+
waypoint = "#{id}_conditions"
|
902
|
+
digraph.waypoint("#{waypoint};")
|
846
903
|
|
847
|
-
|
848
|
-
|
904
|
+
digraph.edge("#{id}:conditions -> #{waypoint};")
|
905
|
+
node.conditions.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
906
|
+
else
|
907
|
+
table.field("conditions", "[]")
|
908
|
+
end
|
849
909
|
|
850
910
|
# consequent
|
851
911
|
unless (consequent = node.consequent).nil?
|
@@ -880,13 +940,17 @@ module Prism
|
|
880
940
|
end
|
881
941
|
|
882
942
|
# conditions
|
883
|
-
|
943
|
+
if node.conditions.any?
|
944
|
+
table.field("conditions", port: true)
|
884
945
|
|
885
|
-
|
886
|
-
|
946
|
+
waypoint = "#{id}_conditions"
|
947
|
+
digraph.waypoint("#{waypoint};")
|
887
948
|
|
888
|
-
|
889
|
-
|
949
|
+
digraph.edge("#{id}:conditions -> #{waypoint};")
|
950
|
+
node.conditions.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
951
|
+
else
|
952
|
+
table.field("conditions", "[]")
|
953
|
+
end
|
890
954
|
|
891
955
|
# consequent
|
892
956
|
unless (consequent = node.consequent).nil?
|
@@ -1437,6 +1501,9 @@ module Prism
|
|
1437
1501
|
# locals
|
1438
1502
|
table.field("locals", node.locals.inspect)
|
1439
1503
|
|
1504
|
+
# locals_body_index
|
1505
|
+
table.field("locals_body_index", node.locals_body_index.inspect)
|
1506
|
+
|
1440
1507
|
# def_keyword_loc
|
1441
1508
|
table.field("def_keyword_loc", location_inspect(node.def_keyword_loc))
|
1442
1509
|
|
@@ -1636,13 +1703,17 @@ module Prism
|
|
1636
1703
|
digraph.edge("#{id}:left -> #{node_id(node.left)};")
|
1637
1704
|
|
1638
1705
|
# requireds
|
1639
|
-
|
1706
|
+
if node.requireds.any?
|
1707
|
+
table.field("requireds", port: true)
|
1640
1708
|
|
1641
|
-
|
1642
|
-
|
1709
|
+
waypoint = "#{id}_requireds"
|
1710
|
+
digraph.waypoint("#{waypoint};")
|
1643
1711
|
|
1644
|
-
|
1645
|
-
|
1712
|
+
digraph.edge("#{id}:requireds -> #{waypoint};")
|
1713
|
+
node.requireds.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
1714
|
+
else
|
1715
|
+
table.field("requireds", "[]")
|
1716
|
+
end
|
1646
1717
|
|
1647
1718
|
# right
|
1648
1719
|
table.field("right", port: true)
|
@@ -1672,6 +1743,9 @@ module Prism
|
|
1672
1743
|
table = Table.new("FlipFlopNode")
|
1673
1744
|
id = node_id(node)
|
1674
1745
|
|
1746
|
+
# flags
|
1747
|
+
table.field("flags", range_flags_inspect(node))
|
1748
|
+
|
1675
1749
|
# left
|
1676
1750
|
unless (left = node.left).nil?
|
1677
1751
|
table.field("left", port: true)
|
@@ -1687,9 +1761,6 @@ module Prism
|
|
1687
1761
|
# operator_loc
|
1688
1762
|
table.field("operator_loc", location_inspect(node.operator_loc))
|
1689
1763
|
|
1690
|
-
# flags
|
1691
|
-
table.field("flags", range_flags_inspect(node))
|
1692
|
-
|
1693
1764
|
digraph.nodes << <<~DOT
|
1694
1765
|
#{id} [
|
1695
1766
|
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
@@ -1957,13 +2028,17 @@ module Prism
|
|
1957
2028
|
table.field("opening_loc", location_inspect(node.opening_loc))
|
1958
2029
|
|
1959
2030
|
# elements
|
1960
|
-
|
2031
|
+
if node.elements.any?
|
2032
|
+
table.field("elements", port: true)
|
1961
2033
|
|
1962
|
-
|
1963
|
-
|
2034
|
+
waypoint = "#{id}_elements"
|
2035
|
+
digraph.waypoint("#{waypoint};")
|
1964
2036
|
|
1965
|
-
|
1966
|
-
|
2037
|
+
digraph.edge("#{id}:elements -> #{waypoint};")
|
2038
|
+
node.elements.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
2039
|
+
else
|
2040
|
+
table.field("elements", "[]")
|
2041
|
+
end
|
1967
2042
|
|
1968
2043
|
# closing_loc
|
1969
2044
|
table.field("closing_loc", location_inspect(node.closing_loc))
|
@@ -1989,13 +2064,17 @@ module Prism
|
|
1989
2064
|
end
|
1990
2065
|
|
1991
2066
|
# elements
|
1992
|
-
|
2067
|
+
if node.elements.any?
|
2068
|
+
table.field("elements", port: true)
|
1993
2069
|
|
1994
|
-
|
1995
|
-
|
2070
|
+
waypoint = "#{id}_elements"
|
2071
|
+
digraph.waypoint("#{waypoint};")
|
1996
2072
|
|
1997
|
-
|
1998
|
-
|
2073
|
+
digraph.edge("#{id}:elements -> #{waypoint};")
|
2074
|
+
node.elements.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
2075
|
+
else
|
2076
|
+
table.field("elements", "[]")
|
2077
|
+
end
|
1999
2078
|
|
2000
2079
|
# rest
|
2001
2080
|
unless (rest = node.rest).nil?
|
@@ -2103,6 +2182,20 @@ module Prism
|
|
2103
2182
|
super
|
2104
2183
|
end
|
2105
2184
|
|
2185
|
+
# Visit a ImplicitRestNode node.
|
2186
|
+
def visit_implicit_rest_node(node)
|
2187
|
+
table = Table.new("ImplicitRestNode")
|
2188
|
+
id = node_id(node)
|
2189
|
+
|
2190
|
+
digraph.nodes << <<~DOT
|
2191
|
+
#{id} [
|
2192
|
+
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
2193
|
+
];
|
2194
|
+
DOT
|
2195
|
+
|
2196
|
+
super
|
2197
|
+
end
|
2198
|
+
|
2106
2199
|
# Visit a InNode node.
|
2107
2200
|
def visit_in_node(node)
|
2108
2201
|
table = Table.new("InNode")
|
@@ -2140,6 +2233,9 @@ module Prism
|
|
2140
2233
|
table = Table.new("IndexAndWriteNode")
|
2141
2234
|
id = node_id(node)
|
2142
2235
|
|
2236
|
+
# flags
|
2237
|
+
table.field("flags", call_node_flags_inspect(node))
|
2238
|
+
|
2143
2239
|
# receiver
|
2144
2240
|
unless (receiver = node.receiver).nil?
|
2145
2241
|
table.field("receiver", port: true)
|
@@ -2169,9 +2265,6 @@ module Prism
|
|
2169
2265
|
digraph.edge("#{id}:block -> #{node_id(block)};")
|
2170
2266
|
end
|
2171
2267
|
|
2172
|
-
# flags
|
2173
|
-
table.field("flags", call_node_flags_inspect(node))
|
2174
|
-
|
2175
2268
|
# operator_loc
|
2176
2269
|
table.field("operator_loc", location_inspect(node.operator_loc))
|
2177
2270
|
|
@@ -2193,6 +2286,9 @@ module Prism
|
|
2193
2286
|
table = Table.new("IndexOperatorWriteNode")
|
2194
2287
|
id = node_id(node)
|
2195
2288
|
|
2289
|
+
# flags
|
2290
|
+
table.field("flags", call_node_flags_inspect(node))
|
2291
|
+
|
2196
2292
|
# receiver
|
2197
2293
|
unless (receiver = node.receiver).nil?
|
2198
2294
|
table.field("receiver", port: true)
|
@@ -2222,9 +2318,6 @@ module Prism
|
|
2222
2318
|
digraph.edge("#{id}:block -> #{node_id(block)};")
|
2223
2319
|
end
|
2224
2320
|
|
2225
|
-
# flags
|
2226
|
-
table.field("flags", call_node_flags_inspect(node))
|
2227
|
-
|
2228
2321
|
# operator
|
2229
2322
|
table.field("operator", node.operator.inspect)
|
2230
2323
|
|
@@ -2249,6 +2342,9 @@ module Prism
|
|
2249
2342
|
table = Table.new("IndexOrWriteNode")
|
2250
2343
|
id = node_id(node)
|
2251
2344
|
|
2345
|
+
# flags
|
2346
|
+
table.field("flags", call_node_flags_inspect(node))
|
2347
|
+
|
2252
2348
|
# receiver
|
2253
2349
|
unless (receiver = node.receiver).nil?
|
2254
2350
|
table.field("receiver", port: true)
|
@@ -2278,9 +2374,6 @@ module Prism
|
|
2278
2374
|
digraph.edge("#{id}:block -> #{node_id(block)};")
|
2279
2375
|
end
|
2280
2376
|
|
2281
|
-
# flags
|
2282
|
-
table.field("flags", call_node_flags_inspect(node))
|
2283
|
-
|
2284
2377
|
# operator_loc
|
2285
2378
|
table.field("operator_loc", location_inspect(node.operator_loc))
|
2286
2379
|
|
@@ -2297,6 +2390,45 @@ module Prism
|
|
2297
2390
|
super
|
2298
2391
|
end
|
2299
2392
|
|
2393
|
+
# Visit a IndexTargetNode node.
|
2394
|
+
def visit_index_target_node(node)
|
2395
|
+
table = Table.new("IndexTargetNode")
|
2396
|
+
id = node_id(node)
|
2397
|
+
|
2398
|
+
# flags
|
2399
|
+
table.field("flags", call_node_flags_inspect(node))
|
2400
|
+
|
2401
|
+
# receiver
|
2402
|
+
table.field("receiver", port: true)
|
2403
|
+
digraph.edge("#{id}:receiver -> #{node_id(node.receiver)};")
|
2404
|
+
|
2405
|
+
# opening_loc
|
2406
|
+
table.field("opening_loc", location_inspect(node.opening_loc))
|
2407
|
+
|
2408
|
+
# arguments
|
2409
|
+
unless (arguments = node.arguments).nil?
|
2410
|
+
table.field("arguments", port: true)
|
2411
|
+
digraph.edge("#{id}:arguments -> #{node_id(arguments)};")
|
2412
|
+
end
|
2413
|
+
|
2414
|
+
# closing_loc
|
2415
|
+
table.field("closing_loc", location_inspect(node.closing_loc))
|
2416
|
+
|
2417
|
+
# block
|
2418
|
+
unless (block = node.block).nil?
|
2419
|
+
table.field("block", port: true)
|
2420
|
+
digraph.edge("#{id}:block -> #{node_id(block)};")
|
2421
|
+
end
|
2422
|
+
|
2423
|
+
digraph.nodes << <<~DOT
|
2424
|
+
#{id} [
|
2425
|
+
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
2426
|
+
];
|
2427
|
+
DOT
|
2428
|
+
|
2429
|
+
super
|
2430
|
+
end
|
2431
|
+
|
2300
2432
|
# Visit a InstanceVariableAndWriteNode node.
|
2301
2433
|
def visit_instance_variable_and_write_node(node)
|
2302
2434
|
table = Table.new("InstanceVariableAndWriteNode")
|
@@ -2464,24 +2596,28 @@ module Prism
|
|
2464
2596
|
table = Table.new("InterpolatedMatchLastLineNode")
|
2465
2597
|
id = node_id(node)
|
2466
2598
|
|
2599
|
+
# flags
|
2600
|
+
table.field("flags", regular_expression_flags_inspect(node))
|
2601
|
+
|
2467
2602
|
# opening_loc
|
2468
2603
|
table.field("opening_loc", location_inspect(node.opening_loc))
|
2469
2604
|
|
2470
2605
|
# parts
|
2471
|
-
|
2606
|
+
if node.parts.any?
|
2607
|
+
table.field("parts", port: true)
|
2472
2608
|
|
2473
|
-
|
2474
|
-
|
2609
|
+
waypoint = "#{id}_parts"
|
2610
|
+
digraph.waypoint("#{waypoint};")
|
2475
2611
|
|
2476
|
-
|
2477
|
-
|
2612
|
+
digraph.edge("#{id}:parts -> #{waypoint};")
|
2613
|
+
node.parts.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
2614
|
+
else
|
2615
|
+
table.field("parts", "[]")
|
2616
|
+
end
|
2478
2617
|
|
2479
2618
|
# closing_loc
|
2480
2619
|
table.field("closing_loc", location_inspect(node.closing_loc))
|
2481
2620
|
|
2482
|
-
# flags
|
2483
|
-
table.field("flags", regular_expression_flags_inspect(node))
|
2484
|
-
|
2485
2621
|
digraph.nodes << <<~DOT
|
2486
2622
|
#{id} [
|
2487
2623
|
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
@@ -2496,24 +2632,28 @@ module Prism
|
|
2496
2632
|
table = Table.new("InterpolatedRegularExpressionNode")
|
2497
2633
|
id = node_id(node)
|
2498
2634
|
|
2635
|
+
# flags
|
2636
|
+
table.field("flags", regular_expression_flags_inspect(node))
|
2637
|
+
|
2499
2638
|
# opening_loc
|
2500
2639
|
table.field("opening_loc", location_inspect(node.opening_loc))
|
2501
2640
|
|
2502
2641
|
# parts
|
2503
|
-
|
2642
|
+
if node.parts.any?
|
2643
|
+
table.field("parts", port: true)
|
2504
2644
|
|
2505
|
-
|
2506
|
-
|
2645
|
+
waypoint = "#{id}_parts"
|
2646
|
+
digraph.waypoint("#{waypoint};")
|
2507
2647
|
|
2508
|
-
|
2509
|
-
|
2648
|
+
digraph.edge("#{id}:parts -> #{waypoint};")
|
2649
|
+
node.parts.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
2650
|
+
else
|
2651
|
+
table.field("parts", "[]")
|
2652
|
+
end
|
2510
2653
|
|
2511
2654
|
# closing_loc
|
2512
2655
|
table.field("closing_loc", location_inspect(node.closing_loc))
|
2513
2656
|
|
2514
|
-
# flags
|
2515
|
-
table.field("flags", regular_expression_flags_inspect(node))
|
2516
|
-
|
2517
2657
|
digraph.nodes << <<~DOT
|
2518
2658
|
#{id} [
|
2519
2659
|
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
@@ -2534,13 +2674,17 @@ module Prism
|
|
2534
2674
|
end
|
2535
2675
|
|
2536
2676
|
# parts
|
2537
|
-
|
2677
|
+
if node.parts.any?
|
2678
|
+
table.field("parts", port: true)
|
2538
2679
|
|
2539
|
-
|
2540
|
-
|
2680
|
+
waypoint = "#{id}_parts"
|
2681
|
+
digraph.waypoint("#{waypoint};")
|
2541
2682
|
|
2542
|
-
|
2543
|
-
|
2683
|
+
digraph.edge("#{id}:parts -> #{waypoint};")
|
2684
|
+
node.parts.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
2685
|
+
else
|
2686
|
+
table.field("parts", "[]")
|
2687
|
+
end
|
2544
2688
|
|
2545
2689
|
# closing_loc
|
2546
2690
|
unless (closing_loc = node.closing_loc).nil?
|
@@ -2567,13 +2711,17 @@ module Prism
|
|
2567
2711
|
end
|
2568
2712
|
|
2569
2713
|
# parts
|
2570
|
-
|
2714
|
+
if node.parts.any?
|
2715
|
+
table.field("parts", port: true)
|
2571
2716
|
|
2572
|
-
|
2573
|
-
|
2717
|
+
waypoint = "#{id}_parts"
|
2718
|
+
digraph.waypoint("#{waypoint};")
|
2574
2719
|
|
2575
|
-
|
2576
|
-
|
2720
|
+
digraph.edge("#{id}:parts -> #{waypoint};")
|
2721
|
+
node.parts.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
2722
|
+
else
|
2723
|
+
table.field("parts", "[]")
|
2724
|
+
end
|
2577
2725
|
|
2578
2726
|
# closing_loc
|
2579
2727
|
unless (closing_loc = node.closing_loc).nil?
|
@@ -2598,13 +2746,17 @@ module Prism
|
|
2598
2746
|
table.field("opening_loc", location_inspect(node.opening_loc))
|
2599
2747
|
|
2600
2748
|
# parts
|
2601
|
-
|
2749
|
+
if node.parts.any?
|
2750
|
+
table.field("parts", port: true)
|
2602
2751
|
|
2603
|
-
|
2604
|
-
|
2752
|
+
waypoint = "#{id}_parts"
|
2753
|
+
digraph.waypoint("#{waypoint};")
|
2605
2754
|
|
2606
|
-
|
2607
|
-
|
2755
|
+
digraph.edge("#{id}:parts -> #{waypoint};")
|
2756
|
+
node.parts.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
2757
|
+
else
|
2758
|
+
table.field("parts", "[]")
|
2759
|
+
end
|
2608
2760
|
|
2609
2761
|
# closing_loc
|
2610
2762
|
table.field("closing_loc", location_inspect(node.closing_loc))
|
@@ -2623,14 +2775,21 @@ module Prism
|
|
2623
2775
|
table = Table.new("KeywordHashNode")
|
2624
2776
|
id = node_id(node)
|
2625
2777
|
|
2778
|
+
# flags
|
2779
|
+
table.field("flags", keyword_hash_node_flags_inspect(node))
|
2780
|
+
|
2626
2781
|
# elements
|
2627
|
-
|
2782
|
+
if node.elements.any?
|
2783
|
+
table.field("elements", port: true)
|
2628
2784
|
|
2629
|
-
|
2630
|
-
|
2785
|
+
waypoint = "#{id}_elements"
|
2786
|
+
digraph.waypoint("#{waypoint};")
|
2631
2787
|
|
2632
|
-
|
2633
|
-
|
2788
|
+
digraph.edge("#{id}:elements -> #{waypoint};")
|
2789
|
+
node.elements.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
2790
|
+
else
|
2791
|
+
table.field("elements", "[]")
|
2792
|
+
end
|
2634
2793
|
|
2635
2794
|
digraph.nodes << <<~DOT
|
2636
2795
|
#{id} [
|
@@ -2674,6 +2833,9 @@ module Prism
|
|
2674
2833
|
# locals
|
2675
2834
|
table.field("locals", node.locals.inspect)
|
2676
2835
|
|
2836
|
+
# locals_body_index
|
2837
|
+
table.field("locals_body_index", node.locals_body_index.inspect)
|
2838
|
+
|
2677
2839
|
# operator_loc
|
2678
2840
|
table.field("operator_loc", location_inspect(node.operator_loc))
|
2679
2841
|
|
@@ -2872,6 +3034,9 @@ module Prism
|
|
2872
3034
|
table = Table.new("MatchLastLineNode")
|
2873
3035
|
id = node_id(node)
|
2874
3036
|
|
3037
|
+
# flags
|
3038
|
+
table.field("flags", regular_expression_flags_inspect(node))
|
3039
|
+
|
2875
3040
|
# opening_loc
|
2876
3041
|
table.field("opening_loc", location_inspect(node.opening_loc))
|
2877
3042
|
|
@@ -2884,9 +3049,6 @@ module Prism
|
|
2884
3049
|
# unescaped
|
2885
3050
|
table.field("unescaped", node.unescaped.inspect)
|
2886
3051
|
|
2887
|
-
# flags
|
2888
|
-
table.field("flags", regular_expression_flags_inspect(node))
|
2889
|
-
|
2890
3052
|
digraph.nodes << <<~DOT
|
2891
3053
|
#{id} [
|
2892
3054
|
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
@@ -2956,13 +3118,17 @@ module Prism
|
|
2956
3118
|
digraph.edge("#{id}:call -> #{node_id(node.call)};")
|
2957
3119
|
|
2958
3120
|
# targets
|
2959
|
-
|
3121
|
+
if node.targets.any?
|
3122
|
+
table.field("targets", port: true)
|
2960
3123
|
|
2961
|
-
|
2962
|
-
|
3124
|
+
waypoint = "#{id}_targets"
|
3125
|
+
digraph.waypoint("#{waypoint};")
|
2963
3126
|
|
2964
|
-
|
2965
|
-
|
3127
|
+
digraph.edge("#{id}:targets -> #{waypoint};")
|
3128
|
+
node.targets.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
3129
|
+
else
|
3130
|
+
table.field("targets", "[]")
|
3131
|
+
end
|
2966
3132
|
|
2967
3133
|
digraph.nodes << <<~DOT
|
2968
3134
|
#{id} [
|
@@ -3029,13 +3195,17 @@ module Prism
|
|
3029
3195
|
id = node_id(node)
|
3030
3196
|
|
3031
3197
|
# lefts
|
3032
|
-
|
3198
|
+
if node.lefts.any?
|
3199
|
+
table.field("lefts", port: true)
|
3033
3200
|
|
3034
|
-
|
3035
|
-
|
3201
|
+
waypoint = "#{id}_lefts"
|
3202
|
+
digraph.waypoint("#{waypoint};")
|
3036
3203
|
|
3037
|
-
|
3038
|
-
|
3204
|
+
digraph.edge("#{id}:lefts -> #{waypoint};")
|
3205
|
+
node.lefts.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
3206
|
+
else
|
3207
|
+
table.field("lefts", "[]")
|
3208
|
+
end
|
3039
3209
|
|
3040
3210
|
# rest
|
3041
3211
|
unless (rest = node.rest).nil?
|
@@ -3044,13 +3214,17 @@ module Prism
|
|
3044
3214
|
end
|
3045
3215
|
|
3046
3216
|
# rights
|
3047
|
-
|
3217
|
+
if node.rights.any?
|
3218
|
+
table.field("rights", port: true)
|
3048
3219
|
|
3049
|
-
|
3050
|
-
|
3220
|
+
waypoint = "#{id}_rights"
|
3221
|
+
digraph.waypoint("#{waypoint};")
|
3051
3222
|
|
3052
|
-
|
3053
|
-
|
3223
|
+
digraph.edge("#{id}:rights -> #{waypoint};")
|
3224
|
+
node.rights.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
3225
|
+
else
|
3226
|
+
table.field("rights", "[]")
|
3227
|
+
end
|
3054
3228
|
|
3055
3229
|
# lparen_loc
|
3056
3230
|
unless (lparen_loc = node.lparen_loc).nil?
|
@@ -3077,13 +3251,17 @@ module Prism
|
|
3077
3251
|
id = node_id(node)
|
3078
3252
|
|
3079
3253
|
# lefts
|
3080
|
-
|
3254
|
+
if node.lefts.any?
|
3255
|
+
table.field("lefts", port: true)
|
3081
3256
|
|
3082
|
-
|
3083
|
-
|
3257
|
+
waypoint = "#{id}_lefts"
|
3258
|
+
digraph.waypoint("#{waypoint};")
|
3084
3259
|
|
3085
|
-
|
3086
|
-
|
3260
|
+
digraph.edge("#{id}:lefts -> #{waypoint};")
|
3261
|
+
node.lefts.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
3262
|
+
else
|
3263
|
+
table.field("lefts", "[]")
|
3264
|
+
end
|
3087
3265
|
|
3088
3266
|
# rest
|
3089
3267
|
unless (rest = node.rest).nil?
|
@@ -3092,13 +3270,17 @@ module Prism
|
|
3092
3270
|
end
|
3093
3271
|
|
3094
3272
|
# rights
|
3095
|
-
|
3273
|
+
if node.rights.any?
|
3274
|
+
table.field("rights", port: true)
|
3096
3275
|
|
3097
|
-
|
3098
|
-
|
3276
|
+
waypoint = "#{id}_rights"
|
3277
|
+
digraph.waypoint("#{waypoint};")
|
3099
3278
|
|
3100
|
-
|
3101
|
-
|
3279
|
+
digraph.edge("#{id}:rights -> #{waypoint};")
|
3280
|
+
node.rights.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
3281
|
+
else
|
3282
|
+
table.field("rights", "[]")
|
3283
|
+
end
|
3102
3284
|
|
3103
3285
|
# lparen_loc
|
3104
3286
|
unless (lparen_loc = node.lparen_loc).nil?
|
@@ -3183,6 +3365,23 @@ module Prism
|
|
3183
3365
|
super
|
3184
3366
|
end
|
3185
3367
|
|
3368
|
+
# Visit a NumberedParametersNode node.
|
3369
|
+
def visit_numbered_parameters_node(node)
|
3370
|
+
table = Table.new("NumberedParametersNode")
|
3371
|
+
id = node_id(node)
|
3372
|
+
|
3373
|
+
# maximum
|
3374
|
+
table.field("maximum", node.maximum.inspect)
|
3375
|
+
|
3376
|
+
digraph.nodes << <<~DOT
|
3377
|
+
#{id} [
|
3378
|
+
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
3379
|
+
];
|
3380
|
+
DOT
|
3381
|
+
|
3382
|
+
super
|
3383
|
+
end
|
3384
|
+
|
3186
3385
|
# Visit a NumberedReferenceReadNode node.
|
3187
3386
|
def visit_numbered_reference_read_node(node)
|
3188
3387
|
table = Table.new("NumberedReferenceReadNode")
|
@@ -3282,22 +3481,30 @@ module Prism
|
|
3282
3481
|
id = node_id(node)
|
3283
3482
|
|
3284
3483
|
# requireds
|
3285
|
-
|
3484
|
+
if node.requireds.any?
|
3485
|
+
table.field("requireds", port: true)
|
3286
3486
|
|
3287
|
-
|
3288
|
-
|
3487
|
+
waypoint = "#{id}_requireds"
|
3488
|
+
digraph.waypoint("#{waypoint};")
|
3289
3489
|
|
3290
|
-
|
3291
|
-
|
3490
|
+
digraph.edge("#{id}:requireds -> #{waypoint};")
|
3491
|
+
node.requireds.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
3492
|
+
else
|
3493
|
+
table.field("requireds", "[]")
|
3494
|
+
end
|
3292
3495
|
|
3293
3496
|
# optionals
|
3294
|
-
|
3497
|
+
if node.optionals.any?
|
3498
|
+
table.field("optionals", port: true)
|
3295
3499
|
|
3296
|
-
|
3297
|
-
|
3500
|
+
waypoint = "#{id}_optionals"
|
3501
|
+
digraph.waypoint("#{waypoint};")
|
3298
3502
|
|
3299
|
-
|
3300
|
-
|
3503
|
+
digraph.edge("#{id}:optionals -> #{waypoint};")
|
3504
|
+
node.optionals.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
3505
|
+
else
|
3506
|
+
table.field("optionals", "[]")
|
3507
|
+
end
|
3301
3508
|
|
3302
3509
|
# rest
|
3303
3510
|
unless (rest = node.rest).nil?
|
@@ -3306,22 +3513,30 @@ module Prism
|
|
3306
3513
|
end
|
3307
3514
|
|
3308
3515
|
# posts
|
3309
|
-
|
3516
|
+
if node.posts.any?
|
3517
|
+
table.field("posts", port: true)
|
3310
3518
|
|
3311
|
-
|
3312
|
-
|
3519
|
+
waypoint = "#{id}_posts"
|
3520
|
+
digraph.waypoint("#{waypoint};")
|
3313
3521
|
|
3314
|
-
|
3315
|
-
|
3522
|
+
digraph.edge("#{id}:posts -> #{waypoint};")
|
3523
|
+
node.posts.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
3524
|
+
else
|
3525
|
+
table.field("posts", "[]")
|
3526
|
+
end
|
3316
3527
|
|
3317
3528
|
# keywords
|
3318
|
-
|
3529
|
+
if node.keywords.any?
|
3530
|
+
table.field("keywords", port: true)
|
3319
3531
|
|
3320
|
-
|
3321
|
-
|
3532
|
+
waypoint = "#{id}_keywords"
|
3533
|
+
digraph.waypoint("#{waypoint};")
|
3322
3534
|
|
3323
|
-
|
3324
|
-
|
3535
|
+
digraph.edge("#{id}:keywords -> #{waypoint};")
|
3536
|
+
node.keywords.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
3537
|
+
else
|
3538
|
+
table.field("keywords", "[]")
|
3539
|
+
end
|
3325
3540
|
|
3326
3541
|
# keyword_rest
|
3327
3542
|
unless (keyword_rest = node.keyword_rest).nil?
|
@@ -3502,6 +3717,9 @@ module Prism
|
|
3502
3717
|
table = Table.new("RangeNode")
|
3503
3718
|
id = node_id(node)
|
3504
3719
|
|
3720
|
+
# flags
|
3721
|
+
table.field("flags", range_flags_inspect(node))
|
3722
|
+
|
3505
3723
|
# left
|
3506
3724
|
unless (left = node.left).nil?
|
3507
3725
|
table.field("left", port: true)
|
@@ -3517,9 +3735,6 @@ module Prism
|
|
3517
3735
|
# operator_loc
|
3518
3736
|
table.field("operator_loc", location_inspect(node.operator_loc))
|
3519
3737
|
|
3520
|
-
# flags
|
3521
|
-
table.field("flags", range_flags_inspect(node))
|
3522
|
-
|
3523
3738
|
digraph.nodes << <<~DOT
|
3524
3739
|
#{id} [
|
3525
3740
|
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
@@ -3566,6 +3781,9 @@ module Prism
|
|
3566
3781
|
table = Table.new("RegularExpressionNode")
|
3567
3782
|
id = node_id(node)
|
3568
3783
|
|
3784
|
+
# flags
|
3785
|
+
table.field("flags", regular_expression_flags_inspect(node))
|
3786
|
+
|
3569
3787
|
# opening_loc
|
3570
3788
|
table.field("opening_loc", location_inspect(node.opening_loc))
|
3571
3789
|
|
@@ -3578,9 +3796,6 @@ module Prism
|
|
3578
3796
|
# unescaped
|
3579
3797
|
table.field("unescaped", node.unescaped.inspect)
|
3580
3798
|
|
3581
|
-
# flags
|
3582
|
-
table.field("flags", regular_expression_flags_inspect(node))
|
3583
|
-
|
3584
3799
|
digraph.nodes << <<~DOT
|
3585
3800
|
#{id} [
|
3586
3801
|
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
@@ -3661,13 +3876,17 @@ module Prism
|
|
3661
3876
|
table.field("keyword_loc", location_inspect(node.keyword_loc))
|
3662
3877
|
|
3663
3878
|
# exceptions
|
3664
|
-
|
3879
|
+
if node.exceptions.any?
|
3880
|
+
table.field("exceptions", port: true)
|
3665
3881
|
|
3666
|
-
|
3667
|
-
|
3882
|
+
waypoint = "#{id}_exceptions"
|
3883
|
+
digraph.waypoint("#{waypoint};")
|
3668
3884
|
|
3669
|
-
|
3670
|
-
|
3885
|
+
digraph.edge("#{id}:exceptions -> #{waypoint};")
|
3886
|
+
node.exceptions.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
3887
|
+
else
|
3888
|
+
table.field("exceptions", "[]")
|
3889
|
+
end
|
3671
3890
|
|
3672
3891
|
# operator_loc
|
3673
3892
|
unless (operator_loc = node.operator_loc).nil?
|
@@ -3887,13 +4106,17 @@ module Prism
|
|
3887
4106
|
id = node_id(node)
|
3888
4107
|
|
3889
4108
|
# body
|
3890
|
-
|
4109
|
+
if node.body.any?
|
4110
|
+
table.field("body", port: true)
|
3891
4111
|
|
3892
|
-
|
3893
|
-
|
4112
|
+
waypoint = "#{id}_body"
|
4113
|
+
digraph.waypoint("#{waypoint};")
|
3894
4114
|
|
3895
|
-
|
3896
|
-
|
4115
|
+
digraph.edge("#{id}:body -> #{waypoint};")
|
4116
|
+
node.body.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
4117
|
+
else
|
4118
|
+
table.field("body", "[]")
|
4119
|
+
end
|
3897
4120
|
|
3898
4121
|
digraph.nodes << <<~DOT
|
3899
4122
|
#{id} [
|
@@ -3981,6 +4204,9 @@ module Prism
|
|
3981
4204
|
table = Table.new("SymbolNode")
|
3982
4205
|
id = node_id(node)
|
3983
4206
|
|
4207
|
+
# flags
|
4208
|
+
table.field("flags", symbol_flags_inspect(node))
|
4209
|
+
|
3984
4210
|
# opening_loc
|
3985
4211
|
unless (opening_loc = node.opening_loc).nil?
|
3986
4212
|
table.field("opening_loc", location_inspect(opening_loc))
|
@@ -4028,13 +4254,17 @@ module Prism
|
|
4028
4254
|
id = node_id(node)
|
4029
4255
|
|
4030
4256
|
# names
|
4031
|
-
|
4257
|
+
if node.names.any?
|
4258
|
+
table.field("names", port: true)
|
4032
4259
|
|
4033
|
-
|
4034
|
-
|
4260
|
+
waypoint = "#{id}_names"
|
4261
|
+
digraph.waypoint("#{waypoint};")
|
4035
4262
|
|
4036
|
-
|
4037
|
-
|
4263
|
+
digraph.edge("#{id}:names -> #{waypoint};")
|
4264
|
+
node.names.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
4265
|
+
else
|
4266
|
+
table.field("names", "[]")
|
4267
|
+
end
|
4038
4268
|
|
4039
4269
|
# keyword_loc
|
4040
4270
|
table.field("keyword_loc", location_inspect(node.keyword_loc))
|
@@ -4096,6 +4326,9 @@ module Prism
|
|
4096
4326
|
table = Table.new("UntilNode")
|
4097
4327
|
id = node_id(node)
|
4098
4328
|
|
4329
|
+
# flags
|
4330
|
+
table.field("flags", loop_flags_inspect(node))
|
4331
|
+
|
4099
4332
|
# keyword_loc
|
4100
4333
|
table.field("keyword_loc", location_inspect(node.keyword_loc))
|
4101
4334
|
|
@@ -4114,9 +4347,6 @@ module Prism
|
|
4114
4347
|
digraph.edge("#{id}:statements -> #{node_id(statements)};")
|
4115
4348
|
end
|
4116
4349
|
|
4117
|
-
# flags
|
4118
|
-
table.field("flags", loop_flags_inspect(node))
|
4119
|
-
|
4120
4350
|
digraph.nodes << <<~DOT
|
4121
4351
|
#{id} [
|
4122
4352
|
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
@@ -4135,13 +4365,17 @@ module Prism
|
|
4135
4365
|
table.field("keyword_loc", location_inspect(node.keyword_loc))
|
4136
4366
|
|
4137
4367
|
# conditions
|
4138
|
-
|
4368
|
+
if node.conditions.any?
|
4369
|
+
table.field("conditions", port: true)
|
4139
4370
|
|
4140
|
-
|
4141
|
-
|
4371
|
+
waypoint = "#{id}_conditions"
|
4372
|
+
digraph.waypoint("#{waypoint};")
|
4142
4373
|
|
4143
|
-
|
4144
|
-
|
4374
|
+
digraph.edge("#{id}:conditions -> #{waypoint};")
|
4375
|
+
node.conditions.each { |child| digraph.edge("#{waypoint} -> #{node_id(child)};") }
|
4376
|
+
else
|
4377
|
+
table.field("conditions", "[]")
|
4378
|
+
end
|
4145
4379
|
|
4146
4380
|
# statements
|
4147
4381
|
unless (statements = node.statements).nil?
|
@@ -4163,6 +4397,9 @@ module Prism
|
|
4163
4397
|
table = Table.new("WhileNode")
|
4164
4398
|
id = node_id(node)
|
4165
4399
|
|
4400
|
+
# flags
|
4401
|
+
table.field("flags", loop_flags_inspect(node))
|
4402
|
+
|
4166
4403
|
# keyword_loc
|
4167
4404
|
table.field("keyword_loc", location_inspect(node.keyword_loc))
|
4168
4405
|
|
@@ -4181,9 +4418,6 @@ module Prism
|
|
4181
4418
|
digraph.edge("#{id}:statements -> #{node_id(statements)};")
|
4182
4419
|
end
|
4183
4420
|
|
4184
|
-
# flags
|
4185
|
-
table.field("flags", loop_flags_inspect(node))
|
4186
|
-
|
4187
4421
|
digraph.nodes << <<~DOT
|
4188
4422
|
#{id} [
|
4189
4423
|
label=<#{table.to_dot.gsub(/\n/, "\n ")}>
|
@@ -4198,6 +4432,9 @@ module Prism
|
|
4198
4432
|
table = Table.new("XStringNode")
|
4199
4433
|
id = node_id(node)
|
4200
4434
|
|
4435
|
+
# flags
|
4436
|
+
table.field("flags", encoding_flags_inspect(node))
|
4437
|
+
|
4201
4438
|
# opening_loc
|
4202
4439
|
table.field("opening_loc", location_inspect(node.opening_loc))
|
4203
4440
|
|
@@ -4268,7 +4505,15 @@ module Prism
|
|
4268
4505
|
# comma-separated list.
|
4269
4506
|
def arguments_node_flags_inspect(node)
|
4270
4507
|
flags = []
|
4271
|
-
flags << "
|
4508
|
+
flags << "contains_keyword_splat" if node.contains_keyword_splat?
|
4509
|
+
flags.join(", ")
|
4510
|
+
end
|
4511
|
+
|
4512
|
+
# Inspect a node that has array_node_flags flags to display the flags as a
|
4513
|
+
# comma-separated list.
|
4514
|
+
def array_node_flags_inspect(node)
|
4515
|
+
flags = []
|
4516
|
+
flags << "contains_splat" if node.contains_splat?
|
4272
4517
|
flags.join(", ")
|
4273
4518
|
end
|
4274
4519
|
|
@@ -4278,6 +4523,16 @@ module Prism
|
|
4278
4523
|
flags = []
|
4279
4524
|
flags << "safe_navigation" if node.safe_navigation?
|
4280
4525
|
flags << "variable_call" if node.variable_call?
|
4526
|
+
flags << "attribute_write" if node.attribute_write?
|
4527
|
+
flags.join(", ")
|
4528
|
+
end
|
4529
|
+
|
4530
|
+
# Inspect a node that has encoding_flags flags to display the flags as a
|
4531
|
+
# comma-separated list.
|
4532
|
+
def encoding_flags_inspect(node)
|
4533
|
+
flags = []
|
4534
|
+
flags << "forced_utf8_encoding" if node.forced_utf8_encoding?
|
4535
|
+
flags << "forced_binary_encoding" if node.forced_binary_encoding?
|
4281
4536
|
flags.join(", ")
|
4282
4537
|
end
|
4283
4538
|
|
@@ -4286,12 +4541,20 @@ module Prism
|
|
4286
4541
|
def integer_base_flags_inspect(node)
|
4287
4542
|
flags = []
|
4288
4543
|
flags << "binary" if node.binary?
|
4289
|
-
flags << "octal" if node.octal?
|
4290
4544
|
flags << "decimal" if node.decimal?
|
4545
|
+
flags << "octal" if node.octal?
|
4291
4546
|
flags << "hexadecimal" if node.hexadecimal?
|
4292
4547
|
flags.join(", ")
|
4293
4548
|
end
|
4294
4549
|
|
4550
|
+
# Inspect a node that has keyword_hash_node_flags flags to display the flags as a
|
4551
|
+
# comma-separated list.
|
4552
|
+
def keyword_hash_node_flags_inspect(node)
|
4553
|
+
flags = []
|
4554
|
+
flags << "static_keys" if node.static_keys?
|
4555
|
+
flags.join(", ")
|
4556
|
+
end
|
4557
|
+
|
4295
4558
|
# Inspect a node that has loop_flags flags to display the flags as a
|
4296
4559
|
# comma-separated list.
|
4297
4560
|
def loop_flags_inspect(node)
|
@@ -4320,6 +4583,9 @@ module Prism
|
|
4320
4583
|
flags << "ascii_8bit" if node.ascii_8bit?
|
4321
4584
|
flags << "windows_31j" if node.windows_31j?
|
4322
4585
|
flags << "utf_8" if node.utf_8?
|
4586
|
+
flags << "forced_utf8_encoding" if node.forced_utf8_encoding?
|
4587
|
+
flags << "forced_binary_encoding" if node.forced_binary_encoding?
|
4588
|
+
flags << "forced_us_ascii_encoding" if node.forced_us_ascii_encoding?
|
4323
4589
|
flags.join(", ")
|
4324
4590
|
end
|
4325
4591
|
|
@@ -4327,8 +4593,20 @@ module Prism
|
|
4327
4593
|
# comma-separated list.
|
4328
4594
|
def string_flags_inspect(node)
|
4329
4595
|
flags = []
|
4596
|
+
flags << "forced_utf8_encoding" if node.forced_utf8_encoding?
|
4597
|
+
flags << "forced_binary_encoding" if node.forced_binary_encoding?
|
4330
4598
|
flags << "frozen" if node.frozen?
|
4331
4599
|
flags.join(", ")
|
4332
4600
|
end
|
4601
|
+
|
4602
|
+
# Inspect a node that has symbol_flags flags to display the flags as a
|
4603
|
+
# comma-separated list.
|
4604
|
+
def symbol_flags_inspect(node)
|
4605
|
+
flags = []
|
4606
|
+
flags << "forced_utf8_encoding" if node.forced_utf8_encoding?
|
4607
|
+
flags << "forced_binary_encoding" if node.forced_binary_encoding?
|
4608
|
+
flags << "forced_us_ascii_encoding" if node.forced_us_ascii_encoding?
|
4609
|
+
flags.join(", ")
|
4610
|
+
end
|
4333
4611
|
end
|
4334
4612
|
end
|