prism 0.29.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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, ',');