prism 0.29.0 → 1.3.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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +115 -1
  3. data/CONTRIBUTING.md +0 -4
  4. data/Makefile +1 -1
  5. data/README.md +4 -0
  6. data/config.yml +920 -148
  7. data/docs/build_system.md +8 -11
  8. data/docs/fuzzing.md +1 -1
  9. data/docs/parsing_rules.md +4 -1
  10. data/docs/relocation.md +34 -0
  11. data/docs/ripper_translation.md +22 -0
  12. data/docs/serialization.md +3 -0
  13. data/ext/prism/api_node.c +2863 -2079
  14. data/ext/prism/extconf.rb +14 -37
  15. data/ext/prism/extension.c +241 -391
  16. data/ext/prism/extension.h +2 -2
  17. data/include/prism/ast.h +2156 -453
  18. data/include/prism/defines.h +58 -7
  19. data/include/prism/diagnostic.h +24 -6
  20. data/include/prism/node.h +0 -21
  21. data/include/prism/options.h +94 -3
  22. data/include/prism/parser.h +82 -40
  23. data/include/prism/regexp.h +18 -8
  24. data/include/prism/static_literals.h +3 -2
  25. data/include/prism/util/pm_char.h +1 -2
  26. data/include/prism/util/pm_constant_pool.h +0 -8
  27. data/include/prism/util/pm_integer.h +22 -15
  28. data/include/prism/util/pm_newline_list.h +11 -0
  29. data/include/prism/util/pm_string.h +28 -12
  30. data/include/prism/version.h +3 -3
  31. data/include/prism.h +47 -11
  32. data/lib/prism/compiler.rb +3 -0
  33. data/lib/prism/desugar_compiler.rb +111 -74
  34. data/lib/prism/dispatcher.rb +16 -1
  35. data/lib/prism/dot_visitor.rb +55 -34
  36. data/lib/prism/dsl.rb +660 -468
  37. data/lib/prism/ffi.rb +113 -8
  38. data/lib/prism/inspect_visitor.rb +296 -64
  39. data/lib/prism/lex_compat.rb +1 -1
  40. data/lib/prism/mutation_compiler.rb +11 -6
  41. data/lib/prism/node.rb +4262 -5023
  42. data/lib/prism/node_ext.rb +91 -14
  43. data/lib/prism/parse_result/comments.rb +0 -7
  44. data/lib/prism/parse_result/errors.rb +65 -0
  45. data/lib/prism/parse_result/newlines.rb +101 -11
  46. data/lib/prism/parse_result.rb +183 -6
  47. data/lib/prism/reflection.rb +12 -10
  48. data/lib/prism/relocation.rb +504 -0
  49. data/lib/prism/serialize.rb +496 -609
  50. data/lib/prism/string_query.rb +30 -0
  51. data/lib/prism/translation/parser/compiler.rb +185 -155
  52. data/lib/prism/translation/parser/lexer.rb +26 -4
  53. data/lib/prism/translation/parser.rb +9 -4
  54. data/lib/prism/translation/ripper.rb +23 -25
  55. data/lib/prism/translation/ruby_parser.rb +86 -17
  56. data/lib/prism/visitor.rb +3 -0
  57. data/lib/prism.rb +6 -8
  58. data/prism.gemspec +9 -5
  59. data/rbi/prism/dsl.rbi +521 -0
  60. data/rbi/prism/node.rbi +1115 -1120
  61. data/rbi/prism/parse_result.rbi +29 -0
  62. data/rbi/prism/string_query.rbi +12 -0
  63. data/rbi/prism/visitor.rbi +3 -0
  64. data/rbi/prism.rbi +36 -30
  65. data/sig/prism/dsl.rbs +190 -303
  66. data/sig/prism/mutation_compiler.rbs +1 -0
  67. data/sig/prism/node.rbs +678 -632
  68. data/sig/prism/parse_result.rbs +22 -0
  69. data/sig/prism/relocation.rbs +185 -0
  70. data/sig/prism/string_query.rbs +11 -0
  71. data/sig/prism/visitor.rbs +1 -0
  72. data/sig/prism.rbs +103 -64
  73. data/src/diagnostic.c +64 -28
  74. data/src/node.c +502 -1739
  75. data/src/options.c +76 -27
  76. data/src/prettyprint.c +188 -112
  77. data/src/prism.c +3376 -2293
  78. data/src/regexp.c +208 -71
  79. data/src/serialize.c +182 -50
  80. data/src/static_literals.c +64 -85
  81. data/src/token_type.c +4 -4
  82. data/src/util/pm_char.c +1 -1
  83. data/src/util/pm_constant_pool.c +0 -8
  84. data/src/util/pm_integer.c +53 -25
  85. data/src/util/pm_newline_list.c +29 -0
  86. data/src/util/pm_string.c +131 -80
  87. data/src/util/pm_strpbrk.c +32 -6
  88. metadata +11 -7
  89. data/include/prism/util/pm_string_list.h +0 -44
  90. data/lib/prism/debug.rb +0 -249
  91. data/lib/prism/translation/parser/rubocop.rb +0 -73
  92. data/src/util/pm_string_list.c +0 -28
data/src/prettyprint.c CHANGED
@@ -1,10 +1,10 @@
1
- /******************************************************************************/
1
+ /*----------------------------------------------------------------------------*/
2
2
  /* This file is generated by the templates/template.rb script and should not */
3
3
  /* be modified manually. See */
4
4
  /* templates/src/prettyprint.c.erb */
5
5
  /* if you are looking to modify the */
6
6
  /* template */
7
- /******************************************************************************/
7
+ /*----------------------------------------------------------------------------*/
8
8
 
9
9
  #include "prism/prettyprint.h"
10
10
 
@@ -226,11 +226,16 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
226
226
  prettyprint_location(output_buffer, parser, &node->location);
227
227
  pm_buffer_append_string(output_buffer, ")\n", 2);
228
228
 
229
- // flags
229
+ // ArgumentsNodeFlags
230
230
  {
231
231
  pm_buffer_concat(output_buffer, prefix_buffer);
232
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
232
+ pm_buffer_append_string(output_buffer, "+-- ArgumentsNodeFlags:", 23);
233
233
  bool found = false;
234
+ if (cast->base.flags & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING) {
235
+ if (found) pm_buffer_append_byte(output_buffer, ',');
236
+ pm_buffer_append_string(output_buffer, " contains_forwarding", 20);
237
+ found = true;
238
+ }
234
239
  if (cast->base.flags & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS) {
235
240
  if (found) pm_buffer_append_byte(output_buffer, ',');
236
241
  pm_buffer_append_string(output_buffer, " contains_keywords", 18);
@@ -241,6 +246,16 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
241
246
  pm_buffer_append_string(output_buffer, " contains_keyword_splat", 23);
242
247
  found = true;
243
248
  }
249
+ if (cast->base.flags & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT) {
250
+ if (found) pm_buffer_append_byte(output_buffer, ',');
251
+ pm_buffer_append_string(output_buffer, " contains_splat", 15);
252
+ found = true;
253
+ }
254
+ if (cast->base.flags & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS) {
255
+ if (found) pm_buffer_append_byte(output_buffer, ',');
256
+ pm_buffer_append_string(output_buffer, " contains_multiple_splats", 25);
257
+ found = true;
258
+ }
244
259
  if (!found) pm_buffer_append_string(output_buffer, " nil", 4);
245
260
  pm_buffer_append_byte(output_buffer, '\n');
246
261
  }
@@ -271,10 +286,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
271
286
  prettyprint_location(output_buffer, parser, &node->location);
272
287
  pm_buffer_append_string(output_buffer, ")\n", 2);
273
288
 
274
- // flags
289
+ // ArrayNodeFlags
275
290
  {
276
291
  pm_buffer_concat(output_buffer, prefix_buffer);
277
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
292
+ pm_buffer_append_string(output_buffer, "+-- ArrayNodeFlags:", 19);
278
293
  bool found = false;
279
294
  if (cast->base.flags & PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT) {
280
295
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -702,10 +717,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
702
717
  prettyprint_location(output_buffer, parser, &node->location);
703
718
  pm_buffer_append_string(output_buffer, ")\n", 2);
704
719
 
705
- // flags
720
+ // ParameterFlags
706
721
  {
707
722
  pm_buffer_concat(output_buffer, prefix_buffer);
708
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
723
+ pm_buffer_append_string(output_buffer, "+-- ParameterFlags:", 19);
709
724
  bool found = false;
710
725
  if (cast->base.flags & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) {
711
726
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -811,10 +826,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
811
826
  prettyprint_location(output_buffer, parser, &node->location);
812
827
  pm_buffer_append_string(output_buffer, ")\n", 2);
813
828
 
814
- // flags
829
+ // ParameterFlags
815
830
  {
816
831
  pm_buffer_concat(output_buffer, prefix_buffer);
817
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
832
+ pm_buffer_append_string(output_buffer, "+-- ParameterFlags:", 19);
818
833
  bool found = false;
819
834
  if (cast->base.flags & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) {
820
835
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -986,10 +1001,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
986
1001
  prettyprint_location(output_buffer, parser, &node->location);
987
1002
  pm_buffer_append_string(output_buffer, ")\n", 2);
988
1003
 
989
- // flags
1004
+ // CallNodeFlags
990
1005
  {
991
1006
  pm_buffer_concat(output_buffer, prefix_buffer);
992
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
1007
+ pm_buffer_append_string(output_buffer, "+-- CallNodeFlags:", 18);
993
1008
  bool found = false;
994
1009
  if (cast->base.flags & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) {
995
1010
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -1115,10 +1130,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
1115
1130
  prettyprint_location(output_buffer, parser, &node->location);
1116
1131
  pm_buffer_append_string(output_buffer, ")\n", 2);
1117
1132
 
1118
- // flags
1133
+ // CallNodeFlags
1119
1134
  {
1120
1135
  pm_buffer_concat(output_buffer, prefix_buffer);
1121
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
1136
+ pm_buffer_append_string(output_buffer, "+-- CallNodeFlags:", 18);
1122
1137
  bool found = false;
1123
1138
  if (cast->base.flags & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) {
1124
1139
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -1276,10 +1291,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
1276
1291
  prettyprint_location(output_buffer, parser, &node->location);
1277
1292
  pm_buffer_append_string(output_buffer, ")\n", 2);
1278
1293
 
1279
- // flags
1294
+ // CallNodeFlags
1280
1295
  {
1281
1296
  pm_buffer_concat(output_buffer, prefix_buffer);
1282
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
1297
+ pm_buffer_append_string(output_buffer, "+-- CallNodeFlags:", 18);
1283
1298
  bool found = false;
1284
1299
  if (cast->base.flags & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) {
1285
1300
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -1414,10 +1429,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
1414
1429
  prettyprint_location(output_buffer, parser, &node->location);
1415
1430
  pm_buffer_append_string(output_buffer, ")\n", 2);
1416
1431
 
1417
- // flags
1432
+ // CallNodeFlags
1418
1433
  {
1419
1434
  pm_buffer_concat(output_buffer, prefix_buffer);
1420
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
1435
+ pm_buffer_append_string(output_buffer, "+-- CallNodeFlags:", 18);
1421
1436
  bool found = false;
1422
1437
  if (cast->base.flags & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) {
1423
1438
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -1543,10 +1558,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
1543
1558
  prettyprint_location(output_buffer, parser, &node->location);
1544
1559
  pm_buffer_append_string(output_buffer, ")\n", 2);
1545
1560
 
1546
- // flags
1561
+ // CallNodeFlags
1547
1562
  {
1548
1563
  pm_buffer_concat(output_buffer, prefix_buffer);
1549
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
1564
+ pm_buffer_append_string(output_buffer, "+-- CallNodeFlags:", 18);
1550
1565
  bool found = false;
1551
1566
  if (cast->base.flags & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) {
1552
1567
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -1707,11 +1722,11 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
1707
1722
  }
1708
1723
  }
1709
1724
 
1710
- // consequent
1725
+ // else_clause
1711
1726
  {
1712
1727
  pm_buffer_concat(output_buffer, prefix_buffer);
1713
- pm_buffer_append_string(output_buffer, "+-- consequent:", 15);
1714
- if (cast->consequent == NULL) {
1728
+ pm_buffer_append_string(output_buffer, "+-- else_clause:", 16);
1729
+ if (cast->else_clause == NULL) {
1715
1730
  pm_buffer_append_string(output_buffer, " nil\n", 5);
1716
1731
  } else {
1717
1732
  pm_buffer_append_byte(output_buffer, '\n');
@@ -1719,7 +1734,7 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
1719
1734
  size_t prefix_length = prefix_buffer->length;
1720
1735
  pm_buffer_append_string(prefix_buffer, "| ", 4);
1721
1736
  pm_buffer_concat(output_buffer, prefix_buffer);
1722
- prettyprint_node(output_buffer, parser, (pm_node_t *) cast->consequent, prefix_buffer);
1737
+ prettyprint_node(output_buffer, parser, (pm_node_t *) cast->else_clause, prefix_buffer);
1723
1738
  prefix_buffer->length = prefix_length;
1724
1739
  }
1725
1740
  }
@@ -1791,11 +1806,11 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
1791
1806
  }
1792
1807
  }
1793
1808
 
1794
- // consequent
1809
+ // else_clause
1795
1810
  {
1796
1811
  pm_buffer_concat(output_buffer, prefix_buffer);
1797
- pm_buffer_append_string(output_buffer, "+-- consequent:", 15);
1798
- if (cast->consequent == NULL) {
1812
+ pm_buffer_append_string(output_buffer, "+-- else_clause:", 16);
1813
+ if (cast->else_clause == NULL) {
1799
1814
  pm_buffer_append_string(output_buffer, " nil\n", 5);
1800
1815
  } else {
1801
1816
  pm_buffer_append_byte(output_buffer, '\n');
@@ -1803,7 +1818,7 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
1803
1818
  size_t prefix_length = prefix_buffer->length;
1804
1819
  pm_buffer_append_string(prefix_buffer, "| ", 4);
1805
1820
  pm_buffer_concat(output_buffer, prefix_buffer);
1806
- prettyprint_node(output_buffer, parser, (pm_node_t *) cast->consequent, prefix_buffer);
1821
+ prettyprint_node(output_buffer, parser, (pm_node_t *) cast->else_clause, prefix_buffer);
1807
1822
  prefix_buffer->length = prefix_length;
1808
1823
  }
1809
1824
  }
@@ -3332,10 +3347,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
3332
3347
  prettyprint_location(output_buffer, parser, &node->location);
3333
3348
  pm_buffer_append_string(output_buffer, ")\n", 2);
3334
3349
 
3335
- // flags
3350
+ // RangeFlags
3336
3351
  {
3337
3352
  pm_buffer_concat(output_buffer, prefix_buffer);
3338
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
3353
+ pm_buffer_append_string(output_buffer, "+-- RangeFlags:", 15);
3339
3354
  bool found = false;
3340
3355
  if (cast->base.flags & PM_RANGE_FLAGS_EXCLUDE_END) {
3341
3356
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -4020,11 +4035,11 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
4020
4035
  }
4021
4036
  }
4022
4037
 
4023
- // consequent
4038
+ // subsequent
4024
4039
  {
4025
4040
  pm_buffer_concat(output_buffer, prefix_buffer);
4026
- pm_buffer_append_string(output_buffer, "+-- consequent:", 15);
4027
- if (cast->consequent == NULL) {
4041
+ pm_buffer_append_string(output_buffer, "+-- subsequent:", 15);
4042
+ if (cast->subsequent == NULL) {
4028
4043
  pm_buffer_append_string(output_buffer, " nil\n", 5);
4029
4044
  } else {
4030
4045
  pm_buffer_append_byte(output_buffer, '\n');
@@ -4032,7 +4047,7 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
4032
4047
  size_t prefix_length = prefix_buffer->length;
4033
4048
  pm_buffer_append_string(prefix_buffer, "| ", 4);
4034
4049
  pm_buffer_concat(output_buffer, prefix_buffer);
4035
- prettyprint_node(output_buffer, parser, (pm_node_t *) cast->consequent, prefix_buffer);
4050
+ prettyprint_node(output_buffer, parser, (pm_node_t *) cast->subsequent, prefix_buffer);
4036
4051
  prefix_buffer->length = prefix_length;
4037
4052
  }
4038
4053
  }
@@ -4176,10 +4191,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
4176
4191
  prettyprint_location(output_buffer, parser, &node->location);
4177
4192
  pm_buffer_append_string(output_buffer, ")\n", 2);
4178
4193
 
4179
- // flags
4194
+ // CallNodeFlags
4180
4195
  {
4181
4196
  pm_buffer_concat(output_buffer, prefix_buffer);
4182
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
4197
+ pm_buffer_append_string(output_buffer, "+-- CallNodeFlags:", 18);
4183
4198
  bool found = false;
4184
4199
  if (cast->base.flags & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) {
4185
4200
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -4329,10 +4344,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
4329
4344
  prettyprint_location(output_buffer, parser, &node->location);
4330
4345
  pm_buffer_append_string(output_buffer, ")\n", 2);
4331
4346
 
4332
- // flags
4347
+ // CallNodeFlags
4333
4348
  {
4334
4349
  pm_buffer_concat(output_buffer, prefix_buffer);
4335
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
4350
+ pm_buffer_append_string(output_buffer, "+-- CallNodeFlags:", 18);
4336
4351
  bool found = false;
4337
4352
  if (cast->base.flags & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) {
4338
4353
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -4491,10 +4506,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
4491
4506
  prettyprint_location(output_buffer, parser, &node->location);
4492
4507
  pm_buffer_append_string(output_buffer, ")\n", 2);
4493
4508
 
4494
- // flags
4509
+ // CallNodeFlags
4495
4510
  {
4496
4511
  pm_buffer_concat(output_buffer, prefix_buffer);
4497
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
4512
+ pm_buffer_append_string(output_buffer, "+-- CallNodeFlags:", 18);
4498
4513
  bool found = false;
4499
4514
  if (cast->base.flags & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) {
4500
4515
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -4644,10 +4659,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
4644
4659
  prettyprint_location(output_buffer, parser, &node->location);
4645
4660
  pm_buffer_append_string(output_buffer, ")\n", 2);
4646
4661
 
4647
- // flags
4662
+ // CallNodeFlags
4648
4663
  {
4649
4664
  pm_buffer_concat(output_buffer, prefix_buffer);
4650
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
4665
+ pm_buffer_append_string(output_buffer, "+-- CallNodeFlags:", 18);
4651
4666
  bool found = false;
4652
4667
  if (cast->base.flags & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) {
4653
4668
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -5011,10 +5026,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
5011
5026
  prettyprint_location(output_buffer, parser, &node->location);
5012
5027
  pm_buffer_append_string(output_buffer, ")\n", 2);
5013
5028
 
5014
- // flags
5029
+ // IntegerBaseFlags
5015
5030
  {
5016
5031
  pm_buffer_concat(output_buffer, prefix_buffer);
5017
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
5032
+ pm_buffer_append_string(output_buffer, "+-- IntegerBaseFlags:", 21);
5018
5033
  bool found = false;
5019
5034
  if (cast->base.flags & PM_INTEGER_BASE_FLAGS_BINARY) {
5020
5035
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -5058,10 +5073,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
5058
5073
  prettyprint_location(output_buffer, parser, &node->location);
5059
5074
  pm_buffer_append_string(output_buffer, ")\n", 2);
5060
5075
 
5061
- // flags
5076
+ // RegularExpressionFlags
5062
5077
  {
5063
5078
  pm_buffer_concat(output_buffer, prefix_buffer);
5064
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
5079
+ pm_buffer_append_string(output_buffer, "+-- RegularExpressionFlags:", 27);
5065
5080
  bool found = false;
5066
5081
  if (cast->base.flags & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) {
5067
5082
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -5172,10 +5187,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
5172
5187
  prettyprint_location(output_buffer, parser, &node->location);
5173
5188
  pm_buffer_append_string(output_buffer, ")\n", 2);
5174
5189
 
5175
- // flags
5190
+ // RegularExpressionFlags
5176
5191
  {
5177
5192
  pm_buffer_concat(output_buffer, prefix_buffer);
5178
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
5193
+ pm_buffer_append_string(output_buffer, "+-- RegularExpressionFlags:", 27);
5179
5194
  bool found = false;
5180
5195
  if (cast->base.flags & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) {
5181
5196
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -5286,10 +5301,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
5286
5301
  prettyprint_location(output_buffer, parser, &node->location);
5287
5302
  pm_buffer_append_string(output_buffer, ")\n", 2);
5288
5303
 
5289
- // flags
5304
+ // InterpolatedStringNodeFlags
5290
5305
  {
5291
5306
  pm_buffer_concat(output_buffer, prefix_buffer);
5292
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
5307
+ pm_buffer_append_string(output_buffer, "+-- InterpolatedStringNodeFlags:", 32);
5293
5308
  bool found = false;
5294
5309
  if (cast->base.flags & PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN) {
5295
5310
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -5465,6 +5480,13 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
5465
5480
 
5466
5481
  break;
5467
5482
  }
5483
+ case PM_IT_LOCAL_VARIABLE_READ_NODE: {
5484
+ pm_buffer_append_string(output_buffer, "@ ItLocalVariableReadNode (location: ", 37);
5485
+ prettyprint_location(output_buffer, parser, &node->location);
5486
+ pm_buffer_append_string(output_buffer, ")\n", 2);
5487
+
5488
+ break;
5489
+ }
5468
5490
  case PM_IT_PARAMETERS_NODE: {
5469
5491
  pm_buffer_append_string(output_buffer, "@ ItParametersNode (location: ", 30);
5470
5492
  prettyprint_location(output_buffer, parser, &node->location);
@@ -5478,10 +5500,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
5478
5500
  prettyprint_location(output_buffer, parser, &node->location);
5479
5501
  pm_buffer_append_string(output_buffer, ")\n", 2);
5480
5502
 
5481
- // flags
5503
+ // KeywordHashNodeFlags
5482
5504
  {
5483
5505
  pm_buffer_concat(output_buffer, prefix_buffer);
5484
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
5506
+ pm_buffer_append_string(output_buffer, "+-- KeywordHashNodeFlags:", 25);
5485
5507
  bool found = false;
5486
5508
  if (cast->base.flags & PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS) {
5487
5509
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -5518,10 +5540,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
5518
5540
  prettyprint_location(output_buffer, parser, &node->location);
5519
5541
  pm_buffer_append_string(output_buffer, ")\n", 2);
5520
5542
 
5521
- // flags
5543
+ // ParameterFlags
5522
5544
  {
5523
5545
  pm_buffer_concat(output_buffer, prefix_buffer);
5524
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
5546
+ pm_buffer_append_string(output_buffer, "+-- ParameterFlags:", 19);
5525
5547
  bool found = false;
5526
5548
  if (cast->base.flags & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) {
5527
5549
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -5972,10 +5994,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
5972
5994
  prettyprint_location(output_buffer, parser, &node->location);
5973
5995
  pm_buffer_append_string(output_buffer, ")\n", 2);
5974
5996
 
5975
- // flags
5997
+ // RegularExpressionFlags
5976
5998
  {
5977
5999
  pm_buffer_concat(output_buffer, prefix_buffer);
5978
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
6000
+ pm_buffer_append_string(output_buffer, "+-- RegularExpressionFlags:", 27);
5979
6001
  bool found = false;
5980
6002
  if (cast->base.flags & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) {
5981
6003
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -6627,10 +6649,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
6627
6649
  prettyprint_location(output_buffer, parser, &node->location);
6628
6650
  pm_buffer_append_string(output_buffer, ")\n", 2);
6629
6651
 
6630
- // flags
6652
+ // ParameterFlags
6631
6653
  {
6632
6654
  pm_buffer_concat(output_buffer, prefix_buffer);
6633
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
6655
+ pm_buffer_append_string(output_buffer, "+-- ParameterFlags:", 19);
6634
6656
  bool found = false;
6635
6657
  if (cast->base.flags & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) {
6636
6658
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -6683,10 +6705,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
6683
6705
  prettyprint_location(output_buffer, parser, &node->location);
6684
6706
  pm_buffer_append_string(output_buffer, ")\n", 2);
6685
6707
 
6686
- // flags
6708
+ // ParameterFlags
6687
6709
  {
6688
6710
  pm_buffer_concat(output_buffer, prefix_buffer);
6689
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
6711
+ pm_buffer_append_string(output_buffer, "+-- ParameterFlags:", 19);
6690
6712
  bool found = false;
6691
6713
  if (cast->base.flags & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) {
6692
6714
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -7222,10 +7244,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7222
7244
  prettyprint_location(output_buffer, parser, &node->location);
7223
7245
  pm_buffer_append_string(output_buffer, ")\n", 2);
7224
7246
 
7225
- // flags
7247
+ // RangeFlags
7226
7248
  {
7227
7249
  pm_buffer_concat(output_buffer, prefix_buffer);
7228
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
7250
+ pm_buffer_append_string(output_buffer, "+-- RangeFlags:", 15);
7229
7251
  bool found = false;
7230
7252
  if (cast->base.flags & PM_RANGE_FLAGS_EXCLUDE_END) {
7231
7253
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -7290,17 +7312,53 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7290
7312
  prettyprint_location(output_buffer, parser, &node->location);
7291
7313
  pm_buffer_append_string(output_buffer, ")\n", 2);
7292
7314
 
7293
- // numeric
7315
+ // IntegerBaseFlags
7294
7316
  {
7295
7317
  pm_buffer_concat(output_buffer, prefix_buffer);
7296
- pm_buffer_append_string(output_buffer, "+-- numeric:", 12);
7318
+ pm_buffer_append_string(output_buffer, "+-- IntegerBaseFlags:", 21);
7319
+ bool found = false;
7320
+ if (cast->base.flags & PM_INTEGER_BASE_FLAGS_BINARY) {
7321
+ if (found) pm_buffer_append_byte(output_buffer, ',');
7322
+ pm_buffer_append_string(output_buffer, " binary", 7);
7323
+ found = true;
7324
+ }
7325
+ if (cast->base.flags & PM_INTEGER_BASE_FLAGS_DECIMAL) {
7326
+ if (found) pm_buffer_append_byte(output_buffer, ',');
7327
+ pm_buffer_append_string(output_buffer, " decimal", 8);
7328
+ found = true;
7329
+ }
7330
+ if (cast->base.flags & PM_INTEGER_BASE_FLAGS_OCTAL) {
7331
+ if (found) pm_buffer_append_byte(output_buffer, ',');
7332
+ pm_buffer_append_string(output_buffer, " octal", 6);
7333
+ found = true;
7334
+ }
7335
+ if (cast->base.flags & PM_INTEGER_BASE_FLAGS_HEXADECIMAL) {
7336
+ if (found) pm_buffer_append_byte(output_buffer, ',');
7337
+ pm_buffer_append_string(output_buffer, " hexadecimal", 12);
7338
+ found = true;
7339
+ }
7340
+ if (!found) pm_buffer_append_string(output_buffer, " nil", 4);
7297
7341
  pm_buffer_append_byte(output_buffer, '\n');
7342
+ }
7298
7343
 
7299
- size_t prefix_length = prefix_buffer->length;
7300
- pm_buffer_append_string(prefix_buffer, " ", 4);
7344
+ // numerator
7345
+ {
7301
7346
  pm_buffer_concat(output_buffer, prefix_buffer);
7302
- prettyprint_node(output_buffer, parser, (pm_node_t *) cast->numeric, prefix_buffer);
7303
- prefix_buffer->length = prefix_length;
7347
+ pm_buffer_append_string(output_buffer, "+-- numerator:", 14);
7348
+ const pm_integer_t *integer = &cast->numerator;
7349
+ pm_buffer_append_byte(output_buffer, ' ');
7350
+ pm_integer_string(output_buffer, integer);
7351
+ pm_buffer_append_byte(output_buffer, '\n');
7352
+ }
7353
+
7354
+ // denominator
7355
+ {
7356
+ pm_buffer_concat(output_buffer, prefix_buffer);
7357
+ pm_buffer_append_string(output_buffer, "+-- denominator:", 16);
7358
+ const pm_integer_t *integer = &cast->denominator;
7359
+ pm_buffer_append_byte(output_buffer, ' ');
7360
+ pm_integer_string(output_buffer, integer);
7361
+ pm_buffer_append_byte(output_buffer, '\n');
7304
7362
  }
7305
7363
 
7306
7364
  break;
@@ -7318,10 +7376,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7318
7376
  prettyprint_location(output_buffer, parser, &node->location);
7319
7377
  pm_buffer_append_string(output_buffer, ")\n", 2);
7320
7378
 
7321
- // flags
7379
+ // RegularExpressionFlags
7322
7380
  {
7323
7381
  pm_buffer_concat(output_buffer, prefix_buffer);
7324
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
7382
+ pm_buffer_append_string(output_buffer, "+-- RegularExpressionFlags:", 27);
7325
7383
  bool found = false;
7326
7384
  if (cast->base.flags & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) {
7327
7385
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -7435,10 +7493,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7435
7493
  prettyprint_location(output_buffer, parser, &node->location);
7436
7494
  pm_buffer_append_string(output_buffer, ")\n", 2);
7437
7495
 
7438
- // flags
7496
+ // ParameterFlags
7439
7497
  {
7440
7498
  pm_buffer_concat(output_buffer, prefix_buffer);
7441
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
7499
+ pm_buffer_append_string(output_buffer, "+-- ParameterFlags:", 19);
7442
7500
  bool found = false;
7443
7501
  if (cast->base.flags & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) {
7444
7502
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -7478,10 +7536,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7478
7536
  prettyprint_location(output_buffer, parser, &node->location);
7479
7537
  pm_buffer_append_string(output_buffer, ")\n", 2);
7480
7538
 
7481
- // flags
7539
+ // ParameterFlags
7482
7540
  {
7483
7541
  pm_buffer_concat(output_buffer, prefix_buffer);
7484
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
7542
+ pm_buffer_append_string(output_buffer, "+-- ParameterFlags:", 19);
7485
7543
  bool found = false;
7486
7544
  if (cast->base.flags & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) {
7487
7545
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -7635,11 +7693,11 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7635
7693
  }
7636
7694
  }
7637
7695
 
7638
- // consequent
7696
+ // subsequent
7639
7697
  {
7640
7698
  pm_buffer_concat(output_buffer, prefix_buffer);
7641
- pm_buffer_append_string(output_buffer, "+-- consequent:", 15);
7642
- if (cast->consequent == NULL) {
7699
+ pm_buffer_append_string(output_buffer, "+-- subsequent:", 15);
7700
+ if (cast->subsequent == NULL) {
7643
7701
  pm_buffer_append_string(output_buffer, " nil\n", 5);
7644
7702
  } else {
7645
7703
  pm_buffer_append_byte(output_buffer, '\n');
@@ -7647,7 +7705,7 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7647
7705
  size_t prefix_length = prefix_buffer->length;
7648
7706
  pm_buffer_append_string(prefix_buffer, " ", 4);
7649
7707
  pm_buffer_concat(output_buffer, prefix_buffer);
7650
- prettyprint_node(output_buffer, parser, (pm_node_t *) cast->consequent, prefix_buffer);
7708
+ prettyprint_node(output_buffer, parser, (pm_node_t *) cast->subsequent, prefix_buffer);
7651
7709
  prefix_buffer->length = prefix_length;
7652
7710
  }
7653
7711
  }
@@ -7660,10 +7718,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7660
7718
  prettyprint_location(output_buffer, parser, &node->location);
7661
7719
  pm_buffer_append_string(output_buffer, ")\n", 2);
7662
7720
 
7663
- // flags
7721
+ // ParameterFlags
7664
7722
  {
7665
7723
  pm_buffer_concat(output_buffer, prefix_buffer);
7666
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
7724
+ pm_buffer_append_string(output_buffer, "+-- ParameterFlags:", 19);
7667
7725
  bool found = false;
7668
7726
  if (cast->base.flags & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) {
7669
7727
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -7730,20 +7788,6 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7730
7788
  prettyprint_location(output_buffer, parser, &node->location);
7731
7789
  pm_buffer_append_string(output_buffer, ")\n", 2);
7732
7790
 
7733
- // flags
7734
- {
7735
- pm_buffer_concat(output_buffer, prefix_buffer);
7736
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
7737
- bool found = false;
7738
- if (cast->base.flags & PM_RETURN_NODE_FLAGS_REDUNDANT) {
7739
- if (found) pm_buffer_append_byte(output_buffer, ',');
7740
- pm_buffer_append_string(output_buffer, " redundant", 10);
7741
- found = true;
7742
- }
7743
- if (!found) pm_buffer_append_string(output_buffer, " nil", 4);
7744
- pm_buffer_append_byte(output_buffer, '\n');
7745
- }
7746
-
7747
7791
  // keyword_loc
7748
7792
  {
7749
7793
  pm_buffer_concat(output_buffer, prefix_buffer);
@@ -7788,10 +7832,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7788
7832
  prettyprint_location(output_buffer, parser, &node->location);
7789
7833
  pm_buffer_append_string(output_buffer, ")\n", 2);
7790
7834
 
7791
- // flags
7835
+ // ShareableConstantNodeFlags
7792
7836
  {
7793
7837
  pm_buffer_concat(output_buffer, prefix_buffer);
7794
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
7838
+ pm_buffer_append_string(output_buffer, "+-- ShareableConstantNodeFlags:", 31);
7795
7839
  bool found = false;
7796
7840
  if (cast->base.flags & PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL) {
7797
7841
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -7926,10 +7970,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
7926
7970
  prettyprint_location(output_buffer, parser, &node->location);
7927
7971
  pm_buffer_append_string(output_buffer, ")\n", 2);
7928
7972
 
7929
- // flags
7973
+ // StringFlags
7930
7974
  {
7931
7975
  pm_buffer_concat(output_buffer, prefix_buffer);
7932
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
7976
+ pm_buffer_append_string(output_buffer, "+-- StringFlags:", 16);
7933
7977
  bool found = false;
7934
7978
  if (cast->base.flags & PM_STRING_FLAGS_FORCED_UTF8_ENCODING) {
7935
7979
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -8042,10 +8086,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
8042
8086
  prettyprint_location(output_buffer, parser, &node->location);
8043
8087
  pm_buffer_append_string(output_buffer, ")\n", 2);
8044
8088
 
8045
- // flags
8089
+ // StringFlags
8046
8090
  {
8047
8091
  pm_buffer_concat(output_buffer, prefix_buffer);
8048
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
8092
+ pm_buffer_append_string(output_buffer, "+-- StringFlags:", 16);
8049
8093
  bool found = false;
8050
8094
  if (cast->base.flags & PM_STRING_FLAGS_FORCED_UTF8_ENCODING) {
8051
8095
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -8218,10 +8262,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
8218
8262
  prettyprint_location(output_buffer, parser, &node->location);
8219
8263
  pm_buffer_append_string(output_buffer, ")\n", 2);
8220
8264
 
8221
- // flags
8265
+ // SymbolFlags
8222
8266
  {
8223
8267
  pm_buffer_concat(output_buffer, prefix_buffer);
8224
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
8268
+ pm_buffer_append_string(output_buffer, "+-- SymbolFlags:", 16);
8225
8269
  bool found = false;
8226
8270
  if (cast->base.flags & PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING) {
8227
8271
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -8410,11 +8454,11 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
8410
8454
  }
8411
8455
  }
8412
8456
 
8413
- // consequent
8457
+ // else_clause
8414
8458
  {
8415
8459
  pm_buffer_concat(output_buffer, prefix_buffer);
8416
- pm_buffer_append_string(output_buffer, "+-- consequent:", 15);
8417
- if (cast->consequent == NULL) {
8460
+ pm_buffer_append_string(output_buffer, "+-- else_clause:", 16);
8461
+ if (cast->else_clause == NULL) {
8418
8462
  pm_buffer_append_string(output_buffer, " nil\n", 5);
8419
8463
  } else {
8420
8464
  pm_buffer_append_byte(output_buffer, '\n');
@@ -8422,7 +8466,7 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
8422
8466
  size_t prefix_length = prefix_buffer->length;
8423
8467
  pm_buffer_append_string(prefix_buffer, "| ", 4);
8424
8468
  pm_buffer_concat(output_buffer, prefix_buffer);
8425
- prettyprint_node(output_buffer, parser, (pm_node_t *) cast->consequent, prefix_buffer);
8469
+ prettyprint_node(output_buffer, parser, (pm_node_t *) cast->else_clause, prefix_buffer);
8426
8470
  prefix_buffer->length = prefix_length;
8427
8471
  }
8428
8472
  }
@@ -8451,10 +8495,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
8451
8495
  prettyprint_location(output_buffer, parser, &node->location);
8452
8496
  pm_buffer_append_string(output_buffer, ")\n", 2);
8453
8497
 
8454
- // flags
8498
+ // LoopFlags
8455
8499
  {
8456
8500
  pm_buffer_concat(output_buffer, prefix_buffer);
8457
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
8501
+ pm_buffer_append_string(output_buffer, "+-- LoopFlags:", 14);
8458
8502
  bool found = false;
8459
8503
  if (cast->base.flags & PM_LOOP_FLAGS_BEGIN_MODIFIER) {
8460
8504
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -8477,6 +8521,22 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
8477
8521
  pm_buffer_append_string(output_buffer, "\"\n", 2);
8478
8522
  }
8479
8523
 
8524
+ // do_keyword_loc
8525
+ {
8526
+ pm_buffer_concat(output_buffer, prefix_buffer);
8527
+ pm_buffer_append_string(output_buffer, "+-- do_keyword_loc:", 19);
8528
+ pm_location_t *location = &cast->do_keyword_loc;
8529
+ if (location->start == NULL) {
8530
+ pm_buffer_append_string(output_buffer, " nil\n", 5);
8531
+ } else {
8532
+ pm_buffer_append_byte(output_buffer, ' ');
8533
+ prettyprint_location(output_buffer, parser, location);
8534
+ pm_buffer_append_string(output_buffer, " = \"", 4);
8535
+ pm_buffer_append_source(output_buffer, location->start, (size_t) (location->end - location->start), PM_BUFFER_ESCAPING_RUBY);
8536
+ pm_buffer_append_string(output_buffer, "\"\n", 2);
8537
+ }
8538
+ }
8539
+
8480
8540
  // closing_loc
8481
8541
  {
8482
8542
  pm_buffer_concat(output_buffer, prefix_buffer);
@@ -8602,10 +8662,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
8602
8662
  prettyprint_location(output_buffer, parser, &node->location);
8603
8663
  pm_buffer_append_string(output_buffer, ")\n", 2);
8604
8664
 
8605
- // flags
8665
+ // LoopFlags
8606
8666
  {
8607
8667
  pm_buffer_concat(output_buffer, prefix_buffer);
8608
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
8668
+ pm_buffer_append_string(output_buffer, "+-- LoopFlags:", 14);
8609
8669
  bool found = false;
8610
8670
  if (cast->base.flags & PM_LOOP_FLAGS_BEGIN_MODIFIER) {
8611
8671
  if (found) pm_buffer_append_byte(output_buffer, ',');
@@ -8628,6 +8688,22 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
8628
8688
  pm_buffer_append_string(output_buffer, "\"\n", 2);
8629
8689
  }
8630
8690
 
8691
+ // do_keyword_loc
8692
+ {
8693
+ pm_buffer_concat(output_buffer, prefix_buffer);
8694
+ pm_buffer_append_string(output_buffer, "+-- do_keyword_loc:", 19);
8695
+ pm_location_t *location = &cast->do_keyword_loc;
8696
+ if (location->start == NULL) {
8697
+ pm_buffer_append_string(output_buffer, " nil\n", 5);
8698
+ } else {
8699
+ pm_buffer_append_byte(output_buffer, ' ');
8700
+ prettyprint_location(output_buffer, parser, location);
8701
+ pm_buffer_append_string(output_buffer, " = \"", 4);
8702
+ pm_buffer_append_source(output_buffer, location->start, (size_t) (location->end - location->start), PM_BUFFER_ESCAPING_RUBY);
8703
+ pm_buffer_append_string(output_buffer, "\"\n", 2);
8704
+ }
8705
+ }
8706
+
8631
8707
  // closing_loc
8632
8708
  {
8633
8709
  pm_buffer_concat(output_buffer, prefix_buffer);
@@ -8682,10 +8758,10 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
8682
8758
  prettyprint_location(output_buffer, parser, &node->location);
8683
8759
  pm_buffer_append_string(output_buffer, ")\n", 2);
8684
8760
 
8685
- // flags
8761
+ // EncodingFlags
8686
8762
  {
8687
8763
  pm_buffer_concat(output_buffer, prefix_buffer);
8688
- pm_buffer_append_string(output_buffer, "+-- flags:", 10);
8764
+ pm_buffer_append_string(output_buffer, "+-- EncodingFlags:", 18);
8689
8765
  bool found = false;
8690
8766
  if (cast->base.flags & PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING) {
8691
8767
  if (found) pm_buffer_append_byte(output_buffer, ',');