yarp 0.8.0 → 0.10.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +48 -1
  3. data/Makefile +5 -1
  4. data/README.md +4 -3
  5. data/config.yml +461 -150
  6. data/docs/configuration.md +1 -0
  7. data/docs/encoding.md +5 -5
  8. data/docs/ruby_api.md +2 -0
  9. data/docs/serialization.md +3 -3
  10. data/docs/testing.md +2 -2
  11. data/ext/yarp/api_node.c +810 -199
  12. data/ext/yarp/extension.c +94 -31
  13. data/ext/yarp/extension.h +2 -2
  14. data/include/yarp/ast.h +653 -150
  15. data/include/yarp/defines.h +2 -1
  16. data/include/yarp/diagnostic.h +3 -3
  17. data/include/yarp/enc/yp_encoding.h +10 -10
  18. data/include/yarp/node.h +10 -0
  19. data/include/yarp/parser.h +19 -19
  20. data/include/yarp/regexp.h +1 -1
  21. data/include/yarp/unescape.h +7 -5
  22. data/include/yarp/util/yp_buffer.h +3 -0
  23. data/include/yarp/util/yp_char.h +16 -16
  24. data/include/yarp/util/yp_constant_pool.h +2 -2
  25. data/include/yarp/util/yp_newline_list.h +7 -4
  26. data/include/yarp/util/yp_string.h +4 -4
  27. data/include/yarp/util/yp_string_list.h +0 -3
  28. data/include/yarp/util/yp_strpbrk.h +1 -1
  29. data/include/yarp/version.h +2 -2
  30. data/include/yarp.h +14 -3
  31. data/lib/yarp/desugar_visitor.rb +204 -0
  32. data/lib/yarp/ffi.rb +27 -1
  33. data/lib/yarp/lex_compat.rb +93 -25
  34. data/lib/yarp/mutation_visitor.rb +683 -0
  35. data/lib/yarp/node.rb +3121 -597
  36. data/lib/yarp/serialize.rb +198 -126
  37. data/lib/yarp.rb +53 -7
  38. data/src/diagnostic.c +1 -1
  39. data/src/enc/yp_big5.c +15 -42
  40. data/src/enc/yp_euc_jp.c +16 -43
  41. data/src/enc/yp_gbk.c +19 -46
  42. data/src/enc/yp_shift_jis.c +16 -43
  43. data/src/enc/yp_tables.c +36 -38
  44. data/src/enc/yp_unicode.c +20 -25
  45. data/src/enc/yp_windows_31j.c +16 -43
  46. data/src/node.c +1444 -836
  47. data/src/prettyprint.c +324 -103
  48. data/src/regexp.c +21 -21
  49. data/src/serialize.c +429 -276
  50. data/src/token_type.c +2 -2
  51. data/src/unescape.c +184 -136
  52. data/src/util/yp_buffer.c +7 -2
  53. data/src/util/yp_char.c +34 -34
  54. data/src/util/yp_constant_pool.c +4 -4
  55. data/src/util/yp_memchr.c +1 -1
  56. data/src/util/yp_newline_list.c +14 -3
  57. data/src/util/yp_string.c +22 -20
  58. data/src/util/yp_string_list.c +0 -6
  59. data/src/util/yp_strncasecmp.c +3 -6
  60. data/src/util/yp_strpbrk.c +8 -8
  61. data/src/yarp.c +1504 -615
  62. data/yarp.gemspec +3 -1
  63. metadata +4 -2
data/include/yarp/ast.h CHANGED
@@ -1,6 +1,6 @@
1
1
  /******************************************************************************/
2
- /* This file is generated by the bin/template script and should not be */
3
- /* modified manually. See */
2
+ /* This file is generated by the templates/template.rb script and should not */
3
+ /* be modified manually. See */
4
4
  /* templates/include/yarp/ast.h.erb */
5
5
  /* if you are looking to modify the */
6
6
  /* template */
@@ -188,15 +188,15 @@ typedef enum yp_token_type {
188
188
  // type and location information.
189
189
  typedef struct {
190
190
  yp_token_type_t type;
191
- const char *start;
192
- const char *end;
191
+ const uint8_t *start;
192
+ const uint8_t *end;
193
193
  } yp_token_t;
194
194
 
195
195
  // This represents a range of bytes in the source string to which a node or
196
196
  // token corresponds.
197
197
  typedef struct {
198
- const char *start;
199
- const char *end;
198
+ const uint8_t *start;
199
+ const uint8_t *end;
200
200
  } yp_location_t;
201
201
 
202
202
  typedef struct {
@@ -217,116 +217,138 @@ enum yp_node_type {
217
217
  YP_NODE_ALIAS_NODE = 1,
218
218
  YP_NODE_ALTERNATION_PATTERN_NODE = 2,
219
219
  YP_NODE_AND_NODE = 3,
220
- YP_NODE_AND_WRITE_NODE = 4,
221
- YP_NODE_ARGUMENTS_NODE = 5,
222
- YP_NODE_ARRAY_NODE = 6,
223
- YP_NODE_ARRAY_PATTERN_NODE = 7,
224
- YP_NODE_ASSOC_NODE = 8,
225
- YP_NODE_ASSOC_SPLAT_NODE = 9,
226
- YP_NODE_BACK_REFERENCE_READ_NODE = 10,
227
- YP_NODE_BEGIN_NODE = 11,
228
- YP_NODE_BLOCK_ARGUMENT_NODE = 12,
229
- YP_NODE_BLOCK_NODE = 13,
230
- YP_NODE_BLOCK_PARAMETER_NODE = 14,
231
- YP_NODE_BLOCK_PARAMETERS_NODE = 15,
232
- YP_NODE_BREAK_NODE = 16,
233
- YP_NODE_CALL_NODE = 17,
234
- YP_NODE_CALL_OPERATOR_AND_WRITE_NODE = 18,
235
- YP_NODE_CALL_OPERATOR_OR_WRITE_NODE = 19,
236
- YP_NODE_CALL_OPERATOR_WRITE_NODE = 20,
237
- YP_NODE_CAPTURE_PATTERN_NODE = 21,
238
- YP_NODE_CASE_NODE = 22,
239
- YP_NODE_CLASS_NODE = 23,
240
- YP_NODE_CLASS_VARIABLE_READ_NODE = 24,
241
- YP_NODE_CLASS_VARIABLE_WRITE_NODE = 25,
242
- YP_NODE_CONSTANT_PATH_NODE = 26,
243
- YP_NODE_CONSTANT_PATH_WRITE_NODE = 27,
244
- YP_NODE_CONSTANT_READ_NODE = 28,
245
- YP_NODE_CONSTANT_WRITE_NODE = 29,
246
- YP_NODE_DEF_NODE = 30,
247
- YP_NODE_DEFINED_NODE = 31,
248
- YP_NODE_ELSE_NODE = 32,
249
- YP_NODE_EMBEDDED_STATEMENTS_NODE = 33,
250
- YP_NODE_EMBEDDED_VARIABLE_NODE = 34,
251
- YP_NODE_ENSURE_NODE = 35,
252
- YP_NODE_FALSE_NODE = 36,
253
- YP_NODE_FIND_PATTERN_NODE = 37,
254
- YP_NODE_FLIP_FLOP_NODE = 38,
255
- YP_NODE_FLOAT_NODE = 39,
256
- YP_NODE_FOR_NODE = 40,
257
- YP_NODE_FORWARDING_ARGUMENTS_NODE = 41,
258
- YP_NODE_FORWARDING_PARAMETER_NODE = 42,
259
- YP_NODE_FORWARDING_SUPER_NODE = 43,
260
- YP_NODE_GLOBAL_VARIABLE_READ_NODE = 44,
261
- YP_NODE_GLOBAL_VARIABLE_WRITE_NODE = 45,
262
- YP_NODE_HASH_NODE = 46,
263
- YP_NODE_HASH_PATTERN_NODE = 47,
264
- YP_NODE_IF_NODE = 48,
265
- YP_NODE_IMAGINARY_NODE = 49,
266
- YP_NODE_IN_NODE = 50,
267
- YP_NODE_INSTANCE_VARIABLE_READ_NODE = 51,
268
- YP_NODE_INSTANCE_VARIABLE_WRITE_NODE = 52,
269
- YP_NODE_INTEGER_NODE = 53,
270
- YP_NODE_INTERPOLATED_REGULAR_EXPRESSION_NODE = 54,
271
- YP_NODE_INTERPOLATED_STRING_NODE = 55,
272
- YP_NODE_INTERPOLATED_SYMBOL_NODE = 56,
273
- YP_NODE_INTERPOLATED_X_STRING_NODE = 57,
274
- YP_NODE_KEYWORD_HASH_NODE = 58,
275
- YP_NODE_KEYWORD_PARAMETER_NODE = 59,
276
- YP_NODE_KEYWORD_REST_PARAMETER_NODE = 60,
277
- YP_NODE_LAMBDA_NODE = 61,
278
- YP_NODE_LOCAL_VARIABLE_READ_NODE = 62,
279
- YP_NODE_LOCAL_VARIABLE_WRITE_NODE = 63,
280
- YP_NODE_MATCH_PREDICATE_NODE = 64,
281
- YP_NODE_MATCH_REQUIRED_NODE = 65,
282
- YP_NODE_MISSING_NODE = 66,
283
- YP_NODE_MODULE_NODE = 67,
284
- YP_NODE_MULTI_WRITE_NODE = 68,
285
- YP_NODE_NEXT_NODE = 69,
286
- YP_NODE_NIL_NODE = 70,
287
- YP_NODE_NO_KEYWORDS_PARAMETER_NODE = 71,
288
- YP_NODE_NUMBERED_REFERENCE_READ_NODE = 72,
289
- YP_NODE_OPERATOR_WRITE_NODE = 73,
290
- YP_NODE_OPTIONAL_PARAMETER_NODE = 74,
291
- YP_NODE_OR_NODE = 75,
292
- YP_NODE_OR_WRITE_NODE = 76,
293
- YP_NODE_PARAMETERS_NODE = 77,
294
- YP_NODE_PARENTHESES_NODE = 78,
295
- YP_NODE_PINNED_EXPRESSION_NODE = 79,
296
- YP_NODE_PINNED_VARIABLE_NODE = 80,
297
- YP_NODE_POST_EXECUTION_NODE = 81,
298
- YP_NODE_PRE_EXECUTION_NODE = 82,
299
- YP_NODE_PROGRAM_NODE = 83,
300
- YP_NODE_RANGE_NODE = 84,
301
- YP_NODE_RATIONAL_NODE = 85,
302
- YP_NODE_REDO_NODE = 86,
303
- YP_NODE_REGULAR_EXPRESSION_NODE = 87,
304
- YP_NODE_REQUIRED_DESTRUCTURED_PARAMETER_NODE = 88,
305
- YP_NODE_REQUIRED_PARAMETER_NODE = 89,
306
- YP_NODE_RESCUE_MODIFIER_NODE = 90,
307
- YP_NODE_RESCUE_NODE = 91,
308
- YP_NODE_REST_PARAMETER_NODE = 92,
309
- YP_NODE_RETRY_NODE = 93,
310
- YP_NODE_RETURN_NODE = 94,
311
- YP_NODE_SELF_NODE = 95,
312
- YP_NODE_SINGLETON_CLASS_NODE = 96,
313
- YP_NODE_SOURCE_ENCODING_NODE = 97,
314
- YP_NODE_SOURCE_FILE_NODE = 98,
315
- YP_NODE_SOURCE_LINE_NODE = 99,
316
- YP_NODE_SPLAT_NODE = 100,
317
- YP_NODE_STATEMENTS_NODE = 101,
318
- YP_NODE_STRING_CONCAT_NODE = 102,
319
- YP_NODE_STRING_NODE = 103,
320
- YP_NODE_SUPER_NODE = 104,
321
- YP_NODE_SYMBOL_NODE = 105,
322
- YP_NODE_TRUE_NODE = 106,
323
- YP_NODE_UNDEF_NODE = 107,
324
- YP_NODE_UNLESS_NODE = 108,
325
- YP_NODE_UNTIL_NODE = 109,
326
- YP_NODE_WHEN_NODE = 110,
327
- YP_NODE_WHILE_NODE = 111,
328
- YP_NODE_X_STRING_NODE = 112,
329
- YP_NODE_YIELD_NODE = 113,
220
+ YP_NODE_ARGUMENTS_NODE = 4,
221
+ YP_NODE_ARRAY_NODE = 5,
222
+ YP_NODE_ARRAY_PATTERN_NODE = 6,
223
+ YP_NODE_ASSOC_NODE = 7,
224
+ YP_NODE_ASSOC_SPLAT_NODE = 8,
225
+ YP_NODE_BACK_REFERENCE_READ_NODE = 9,
226
+ YP_NODE_BEGIN_NODE = 10,
227
+ YP_NODE_BLOCK_ARGUMENT_NODE = 11,
228
+ YP_NODE_BLOCK_NODE = 12,
229
+ YP_NODE_BLOCK_PARAMETER_NODE = 13,
230
+ YP_NODE_BLOCK_PARAMETERS_NODE = 14,
231
+ YP_NODE_BREAK_NODE = 15,
232
+ YP_NODE_CALL_NODE = 16,
233
+ YP_NODE_CALL_OPERATOR_AND_WRITE_NODE = 17,
234
+ YP_NODE_CALL_OPERATOR_OR_WRITE_NODE = 18,
235
+ YP_NODE_CALL_OPERATOR_WRITE_NODE = 19,
236
+ YP_NODE_CAPTURE_PATTERN_NODE = 20,
237
+ YP_NODE_CASE_NODE = 21,
238
+ YP_NODE_CLASS_NODE = 22,
239
+ YP_NODE_CLASS_VARIABLE_AND_WRITE_NODE = 23,
240
+ YP_NODE_CLASS_VARIABLE_OPERATOR_WRITE_NODE = 24,
241
+ YP_NODE_CLASS_VARIABLE_OR_WRITE_NODE = 25,
242
+ YP_NODE_CLASS_VARIABLE_READ_NODE = 26,
243
+ YP_NODE_CLASS_VARIABLE_TARGET_NODE = 27,
244
+ YP_NODE_CLASS_VARIABLE_WRITE_NODE = 28,
245
+ YP_NODE_CONSTANT_AND_WRITE_NODE = 29,
246
+ YP_NODE_CONSTANT_OPERATOR_WRITE_NODE = 30,
247
+ YP_NODE_CONSTANT_OR_WRITE_NODE = 31,
248
+ YP_NODE_CONSTANT_PATH_AND_WRITE_NODE = 32,
249
+ YP_NODE_CONSTANT_PATH_NODE = 33,
250
+ YP_NODE_CONSTANT_PATH_OPERATOR_WRITE_NODE = 34,
251
+ YP_NODE_CONSTANT_PATH_OR_WRITE_NODE = 35,
252
+ YP_NODE_CONSTANT_PATH_TARGET_NODE = 36,
253
+ YP_NODE_CONSTANT_PATH_WRITE_NODE = 37,
254
+ YP_NODE_CONSTANT_READ_NODE = 38,
255
+ YP_NODE_CONSTANT_TARGET_NODE = 39,
256
+ YP_NODE_CONSTANT_WRITE_NODE = 40,
257
+ YP_NODE_DEF_NODE = 41,
258
+ YP_NODE_DEFINED_NODE = 42,
259
+ YP_NODE_ELSE_NODE = 43,
260
+ YP_NODE_EMBEDDED_STATEMENTS_NODE = 44,
261
+ YP_NODE_EMBEDDED_VARIABLE_NODE = 45,
262
+ YP_NODE_ENSURE_NODE = 46,
263
+ YP_NODE_FALSE_NODE = 47,
264
+ YP_NODE_FIND_PATTERN_NODE = 48,
265
+ YP_NODE_FLIP_FLOP_NODE = 49,
266
+ YP_NODE_FLOAT_NODE = 50,
267
+ YP_NODE_FOR_NODE = 51,
268
+ YP_NODE_FORWARDING_ARGUMENTS_NODE = 52,
269
+ YP_NODE_FORWARDING_PARAMETER_NODE = 53,
270
+ YP_NODE_FORWARDING_SUPER_NODE = 54,
271
+ YP_NODE_GLOBAL_VARIABLE_AND_WRITE_NODE = 55,
272
+ YP_NODE_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE = 56,
273
+ YP_NODE_GLOBAL_VARIABLE_OR_WRITE_NODE = 57,
274
+ YP_NODE_GLOBAL_VARIABLE_READ_NODE = 58,
275
+ YP_NODE_GLOBAL_VARIABLE_TARGET_NODE = 59,
276
+ YP_NODE_GLOBAL_VARIABLE_WRITE_NODE = 60,
277
+ YP_NODE_HASH_NODE = 61,
278
+ YP_NODE_HASH_PATTERN_NODE = 62,
279
+ YP_NODE_IF_NODE = 63,
280
+ YP_NODE_IMAGINARY_NODE = 64,
281
+ YP_NODE_IN_NODE = 65,
282
+ YP_NODE_INSTANCE_VARIABLE_AND_WRITE_NODE = 66,
283
+ YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE = 67,
284
+ YP_NODE_INSTANCE_VARIABLE_OR_WRITE_NODE = 68,
285
+ YP_NODE_INSTANCE_VARIABLE_READ_NODE = 69,
286
+ YP_NODE_INSTANCE_VARIABLE_TARGET_NODE = 70,
287
+ YP_NODE_INSTANCE_VARIABLE_WRITE_NODE = 71,
288
+ YP_NODE_INTEGER_NODE = 72,
289
+ YP_NODE_INTERPOLATED_REGULAR_EXPRESSION_NODE = 73,
290
+ YP_NODE_INTERPOLATED_STRING_NODE = 74,
291
+ YP_NODE_INTERPOLATED_SYMBOL_NODE = 75,
292
+ YP_NODE_INTERPOLATED_X_STRING_NODE = 76,
293
+ YP_NODE_KEYWORD_HASH_NODE = 77,
294
+ YP_NODE_KEYWORD_PARAMETER_NODE = 78,
295
+ YP_NODE_KEYWORD_REST_PARAMETER_NODE = 79,
296
+ YP_NODE_LAMBDA_NODE = 80,
297
+ YP_NODE_LOCAL_VARIABLE_AND_WRITE_NODE = 81,
298
+ YP_NODE_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 82,
299
+ YP_NODE_LOCAL_VARIABLE_OR_WRITE_NODE = 83,
300
+ YP_NODE_LOCAL_VARIABLE_READ_NODE = 84,
301
+ YP_NODE_LOCAL_VARIABLE_TARGET_NODE = 85,
302
+ YP_NODE_LOCAL_VARIABLE_WRITE_NODE = 86,
303
+ YP_NODE_MATCH_PREDICATE_NODE = 87,
304
+ YP_NODE_MATCH_REQUIRED_NODE = 88,
305
+ YP_NODE_MISSING_NODE = 89,
306
+ YP_NODE_MODULE_NODE = 90,
307
+ YP_NODE_MULTI_WRITE_NODE = 91,
308
+ YP_NODE_NEXT_NODE = 92,
309
+ YP_NODE_NIL_NODE = 93,
310
+ YP_NODE_NO_KEYWORDS_PARAMETER_NODE = 94,
311
+ YP_NODE_NUMBERED_REFERENCE_READ_NODE = 95,
312
+ YP_NODE_OPTIONAL_PARAMETER_NODE = 96,
313
+ YP_NODE_OR_NODE = 97,
314
+ YP_NODE_PARAMETERS_NODE = 98,
315
+ YP_NODE_PARENTHESES_NODE = 99,
316
+ YP_NODE_PINNED_EXPRESSION_NODE = 100,
317
+ YP_NODE_PINNED_VARIABLE_NODE = 101,
318
+ YP_NODE_POST_EXECUTION_NODE = 102,
319
+ YP_NODE_PRE_EXECUTION_NODE = 103,
320
+ YP_NODE_PROGRAM_NODE = 104,
321
+ YP_NODE_RANGE_NODE = 105,
322
+ YP_NODE_RATIONAL_NODE = 106,
323
+ YP_NODE_REDO_NODE = 107,
324
+ YP_NODE_REGULAR_EXPRESSION_NODE = 108,
325
+ YP_NODE_REQUIRED_DESTRUCTURED_PARAMETER_NODE = 109,
326
+ YP_NODE_REQUIRED_PARAMETER_NODE = 110,
327
+ YP_NODE_RESCUE_MODIFIER_NODE = 111,
328
+ YP_NODE_RESCUE_NODE = 112,
329
+ YP_NODE_REST_PARAMETER_NODE = 113,
330
+ YP_NODE_RETRY_NODE = 114,
331
+ YP_NODE_RETURN_NODE = 115,
332
+ YP_NODE_SELF_NODE = 116,
333
+ YP_NODE_SINGLETON_CLASS_NODE = 117,
334
+ YP_NODE_SOURCE_ENCODING_NODE = 118,
335
+ YP_NODE_SOURCE_FILE_NODE = 119,
336
+ YP_NODE_SOURCE_LINE_NODE = 120,
337
+ YP_NODE_SPLAT_NODE = 121,
338
+ YP_NODE_STATEMENTS_NODE = 122,
339
+ YP_NODE_STRING_CONCAT_NODE = 123,
340
+ YP_NODE_STRING_NODE = 124,
341
+ YP_NODE_SUPER_NODE = 125,
342
+ YP_NODE_SYMBOL_NODE = 126,
343
+ YP_NODE_TRUE_NODE = 127,
344
+ YP_NODE_UNDEF_NODE = 128,
345
+ YP_NODE_UNLESS_NODE = 129,
346
+ YP_NODE_UNTIL_NODE = 130,
347
+ YP_NODE_WHEN_NODE = 131,
348
+ YP_NODE_WHILE_NODE = 132,
349
+ YP_NODE_X_STRING_NODE = 133,
350
+ YP_NODE_YIELD_NODE = 134,
351
+ YP_NODE_SCOPE_NODE
330
352
  };
331
353
 
332
354
  typedef uint16_t yp_node_type_t;
@@ -346,8 +368,7 @@ typedef struct yp_node {
346
368
  // existed in the original grammar and ripper, but it's not a 1:1 mapping.
347
369
  yp_node_type_t type;
348
370
 
349
- // This represents any flags on the node. Currently, this is only a newline
350
- // flag
371
+ // This represents any flags on the node
351
372
  yp_node_flags_t flags;
352
373
 
353
374
  // This is the location of the node in the source. It's a range of bytes
@@ -356,6 +377,8 @@ typedef struct yp_node {
356
377
  } yp_node_t;
357
378
 
358
379
  // AliasNode
380
+ //
381
+ // Type: YP_NODE_ALIAS_NODE
359
382
  typedef struct yp_alias_node {
360
383
  yp_node_t base;
361
384
  struct yp_node *new_name;
@@ -364,6 +387,8 @@ typedef struct yp_alias_node {
364
387
  } yp_alias_node_t;
365
388
 
366
389
  // AlternationPatternNode
390
+ //
391
+ // Type: YP_NODE_ALTERNATION_PATTERN_NODE
367
392
  typedef struct yp_alternation_pattern_node {
368
393
  yp_node_t base;
369
394
  struct yp_node *left;
@@ -372,6 +397,8 @@ typedef struct yp_alternation_pattern_node {
372
397
  } yp_alternation_pattern_node_t;
373
398
 
374
399
  // AndNode
400
+ //
401
+ // Type: YP_NODE_AND_NODE
375
402
  typedef struct yp_and_node {
376
403
  yp_node_t base;
377
404
  struct yp_node *left;
@@ -379,21 +406,17 @@ typedef struct yp_and_node {
379
406
  yp_location_t operator_loc;
380
407
  } yp_and_node_t;
381
408
 
382
- // AndWriteNode
383
- typedef struct yp_and_write_node {
384
- yp_node_t base;
385
- struct yp_node *target;
386
- struct yp_node *value;
387
- yp_location_t operator_loc;
388
- } yp_and_write_node_t;
389
-
390
409
  // ArgumentsNode
410
+ //
411
+ // Type: YP_NODE_ARGUMENTS_NODE
391
412
  typedef struct yp_arguments_node {
392
413
  yp_node_t base;
393
414
  struct yp_node_list arguments;
394
415
  } yp_arguments_node_t;
395
416
 
396
417
  // ArrayNode
418
+ //
419
+ // Type: YP_NODE_ARRAY_NODE
397
420
  typedef struct yp_array_node {
398
421
  yp_node_t base;
399
422
  struct yp_node_list elements;
@@ -402,6 +425,8 @@ typedef struct yp_array_node {
402
425
  } yp_array_node_t;
403
426
 
404
427
  // ArrayPatternNode
428
+ //
429
+ // Type: YP_NODE_ARRAY_PATTERN_NODE
405
430
  typedef struct yp_array_pattern_node {
406
431
  yp_node_t base;
407
432
  struct yp_node *constant;
@@ -413,6 +438,8 @@ typedef struct yp_array_pattern_node {
413
438
  } yp_array_pattern_node_t;
414
439
 
415
440
  // AssocNode
441
+ //
442
+ // Type: YP_NODE_ASSOC_NODE
416
443
  typedef struct yp_assoc_node {
417
444
  yp_node_t base;
418
445
  struct yp_node *key;
@@ -421,6 +448,8 @@ typedef struct yp_assoc_node {
421
448
  } yp_assoc_node_t;
422
449
 
423
450
  // AssocSplatNode
451
+ //
452
+ // Type: YP_NODE_ASSOC_SPLAT_NODE
424
453
  typedef struct yp_assoc_splat_node {
425
454
  yp_node_t base;
426
455
  struct yp_node *value;
@@ -428,11 +457,15 @@ typedef struct yp_assoc_splat_node {
428
457
  } yp_assoc_splat_node_t;
429
458
 
430
459
  // BackReferenceReadNode
460
+ //
461
+ // Type: YP_NODE_BACK_REFERENCE_READ_NODE
431
462
  typedef struct yp_back_reference_read_node {
432
463
  yp_node_t base;
433
464
  } yp_back_reference_read_node_t;
434
465
 
435
466
  // BeginNode
467
+ //
468
+ // Type: YP_NODE_BEGIN_NODE
436
469
  typedef struct yp_begin_node {
437
470
  yp_node_t base;
438
471
  yp_location_t begin_keyword_loc;
@@ -444,6 +477,8 @@ typedef struct yp_begin_node {
444
477
  } yp_begin_node_t;
445
478
 
446
479
  // BlockArgumentNode
480
+ //
481
+ // Type: YP_NODE_BLOCK_ARGUMENT_NODE
447
482
  typedef struct yp_block_argument_node {
448
483
  yp_node_t base;
449
484
  struct yp_node *expression;
@@ -451,6 +486,8 @@ typedef struct yp_block_argument_node {
451
486
  } yp_block_argument_node_t;
452
487
 
453
488
  // BlockNode
489
+ //
490
+ // Type: YP_NODE_BLOCK_NODE
454
491
  typedef struct yp_block_node {
455
492
  yp_node_t base;
456
493
  yp_constant_id_list_t locals;
@@ -461,6 +498,8 @@ typedef struct yp_block_node {
461
498
  } yp_block_node_t;
462
499
 
463
500
  // BlockParameterNode
501
+ //
502
+ // Type: YP_NODE_BLOCK_PARAMETER_NODE
464
503
  typedef struct yp_block_parameter_node {
465
504
  yp_node_t base;
466
505
  yp_location_t name_loc;
@@ -468,6 +507,8 @@ typedef struct yp_block_parameter_node {
468
507
  } yp_block_parameter_node_t;
469
508
 
470
509
  // BlockParametersNode
510
+ //
511
+ // Type: YP_NODE_BLOCK_PARAMETERS_NODE
471
512
  typedef struct yp_block_parameters_node {
472
513
  yp_node_t base;
473
514
  struct yp_parameters_node *parameters;
@@ -477,6 +518,8 @@ typedef struct yp_block_parameters_node {
477
518
  } yp_block_parameters_node_t;
478
519
 
479
520
  // BreakNode
521
+ //
522
+ // Type: YP_NODE_BREAK_NODE
480
523
  typedef struct yp_break_node {
481
524
  yp_node_t base;
482
525
  struct yp_arguments_node *arguments;
@@ -484,6 +527,11 @@ typedef struct yp_break_node {
484
527
  } yp_break_node_t;
485
528
 
486
529
  // CallNode
530
+ //
531
+ // Type: YP_NODE_CALL_NODE
532
+ // Flags:
533
+ // YP_CALL_NODE_FLAGS_SAFE_NAVIGATION
534
+ // YP_CALL_NODE_FLAGS_VARIABLE_CALL
487
535
  typedef struct yp_call_node {
488
536
  yp_node_t base;
489
537
  struct yp_node *receiver;
@@ -497,6 +545,8 @@ typedef struct yp_call_node {
497
545
  } yp_call_node_t;
498
546
 
499
547
  // CallOperatorAndWriteNode
548
+ //
549
+ // Type: YP_NODE_CALL_OPERATOR_AND_WRITE_NODE
500
550
  typedef struct yp_call_operator_and_write_node {
501
551
  yp_node_t base;
502
552
  struct yp_call_node *target;
@@ -505,6 +555,8 @@ typedef struct yp_call_operator_and_write_node {
505
555
  } yp_call_operator_and_write_node_t;
506
556
 
507
557
  // CallOperatorOrWriteNode
558
+ //
559
+ // Type: YP_NODE_CALL_OPERATOR_OR_WRITE_NODE
508
560
  typedef struct yp_call_operator_or_write_node {
509
561
  yp_node_t base;
510
562
  struct yp_call_node *target;
@@ -513,15 +565,19 @@ typedef struct yp_call_operator_or_write_node {
513
565
  } yp_call_operator_or_write_node_t;
514
566
 
515
567
  // CallOperatorWriteNode
568
+ //
569
+ // Type: YP_NODE_CALL_OPERATOR_WRITE_NODE
516
570
  typedef struct yp_call_operator_write_node {
517
571
  yp_node_t base;
518
572
  struct yp_call_node *target;
519
573
  yp_location_t operator_loc;
520
574
  struct yp_node *value;
521
- yp_constant_id_t operator_id;
575
+ yp_constant_id_t operator;
522
576
  } yp_call_operator_write_node_t;
523
577
 
524
578
  // CapturePatternNode
579
+ //
580
+ // Type: YP_NODE_CAPTURE_PATTERN_NODE
525
581
  typedef struct yp_capture_pattern_node {
526
582
  yp_node_t base;
527
583
  struct yp_node *value;
@@ -530,6 +586,8 @@ typedef struct yp_capture_pattern_node {
530
586
  } yp_capture_pattern_node_t;
531
587
 
532
588
  // CaseNode
589
+ //
590
+ // Type: YP_NODE_CASE_NODE
533
591
  typedef struct yp_case_node {
534
592
  yp_node_t base;
535
593
  struct yp_node *predicate;
@@ -540,6 +598,8 @@ typedef struct yp_case_node {
540
598
  } yp_case_node_t;
541
599
 
542
600
  // ClassNode
601
+ //
602
+ // Type: YP_NODE_CLASS_NODE
543
603
  typedef struct yp_class_node {
544
604
  yp_node_t base;
545
605
  yp_constant_id_list_t locals;
@@ -549,22 +609,114 @@ typedef struct yp_class_node {
549
609
  struct yp_node *superclass;
550
610
  struct yp_node *body;
551
611
  yp_location_t end_keyword_loc;
612
+ yp_string_t name;
552
613
  } yp_class_node_t;
553
614
 
615
+ // ClassVariableAndWriteNode
616
+ //
617
+ // Type: YP_NODE_CLASS_VARIABLE_AND_WRITE_NODE
618
+ typedef struct yp_class_variable_and_write_node {
619
+ yp_node_t base;
620
+ yp_constant_id_t name;
621
+ yp_location_t name_loc;
622
+ yp_location_t operator_loc;
623
+ struct yp_node *value;
624
+ } yp_class_variable_and_write_node_t;
625
+
626
+ // ClassVariableOperatorWriteNode
627
+ //
628
+ // Type: YP_NODE_CLASS_VARIABLE_OPERATOR_WRITE_NODE
629
+ typedef struct yp_class_variable_operator_write_node {
630
+ yp_node_t base;
631
+ yp_constant_id_t name;
632
+ yp_location_t name_loc;
633
+ yp_location_t operator_loc;
634
+ struct yp_node *value;
635
+ yp_constant_id_t operator;
636
+ } yp_class_variable_operator_write_node_t;
637
+
638
+ // ClassVariableOrWriteNode
639
+ //
640
+ // Type: YP_NODE_CLASS_VARIABLE_OR_WRITE_NODE
641
+ typedef struct yp_class_variable_or_write_node {
642
+ yp_node_t base;
643
+ yp_constant_id_t name;
644
+ yp_location_t name_loc;
645
+ yp_location_t operator_loc;
646
+ struct yp_node *value;
647
+ } yp_class_variable_or_write_node_t;
648
+
554
649
  // ClassVariableReadNode
650
+ //
651
+ // Type: YP_NODE_CLASS_VARIABLE_READ_NODE
555
652
  typedef struct yp_class_variable_read_node {
556
653
  yp_node_t base;
654
+ yp_constant_id_t name;
557
655
  } yp_class_variable_read_node_t;
558
656
 
657
+ // ClassVariableTargetNode
658
+ //
659
+ // Type: YP_NODE_CLASS_VARIABLE_TARGET_NODE
660
+ typedef struct yp_class_variable_target_node {
661
+ yp_node_t base;
662
+ yp_constant_id_t name;
663
+ } yp_class_variable_target_node_t;
664
+
559
665
  // ClassVariableWriteNode
666
+ //
667
+ // Type: YP_NODE_CLASS_VARIABLE_WRITE_NODE
560
668
  typedef struct yp_class_variable_write_node {
561
669
  yp_node_t base;
670
+ yp_constant_id_t name;
562
671
  yp_location_t name_loc;
563
672
  struct yp_node *value;
564
673
  yp_location_t operator_loc;
565
674
  } yp_class_variable_write_node_t;
566
675
 
676
+ // ConstantAndWriteNode
677
+ //
678
+ // Type: YP_NODE_CONSTANT_AND_WRITE_NODE
679
+ typedef struct yp_constant_and_write_node {
680
+ yp_node_t base;
681
+ yp_location_t name_loc;
682
+ yp_location_t operator_loc;
683
+ struct yp_node *value;
684
+ } yp_constant_and_write_node_t;
685
+
686
+ // ConstantOperatorWriteNode
687
+ //
688
+ // Type: YP_NODE_CONSTANT_OPERATOR_WRITE_NODE
689
+ typedef struct yp_constant_operator_write_node {
690
+ yp_node_t base;
691
+ yp_location_t name_loc;
692
+ yp_location_t operator_loc;
693
+ struct yp_node *value;
694
+ yp_constant_id_t operator;
695
+ } yp_constant_operator_write_node_t;
696
+
697
+ // ConstantOrWriteNode
698
+ //
699
+ // Type: YP_NODE_CONSTANT_OR_WRITE_NODE
700
+ typedef struct yp_constant_or_write_node {
701
+ yp_node_t base;
702
+ yp_location_t name_loc;
703
+ yp_location_t operator_loc;
704
+ struct yp_node *value;
705
+ } yp_constant_or_write_node_t;
706
+
707
+ // ConstantPathAndWriteNode
708
+ //
709
+ // Type: YP_NODE_CONSTANT_PATH_AND_WRITE_NODE
710
+ typedef struct yp_constant_path_and_write_node {
711
+ yp_node_t base;
712
+ struct yp_constant_path_node *target;
713
+ yp_location_t operator_loc;
714
+ struct yp_node *value;
715
+ } yp_constant_path_and_write_node_t;
716
+
567
717
  // ConstantPathNode
718
+ //
719
+ // Type: YP_NODE_CONSTANT_PATH_NODE
568
720
  typedef struct yp_constant_path_node {
569
721
  yp_node_t base;
570
722
  struct yp_node *parent;
@@ -572,7 +724,40 @@ typedef struct yp_constant_path_node {
572
724
  yp_location_t delimiter_loc;
573
725
  } yp_constant_path_node_t;
574
726
 
727
+ // ConstantPathOperatorWriteNode
728
+ //
729
+ // Type: YP_NODE_CONSTANT_PATH_OPERATOR_WRITE_NODE
730
+ typedef struct yp_constant_path_operator_write_node {
731
+ yp_node_t base;
732
+ struct yp_constant_path_node *target;
733
+ yp_location_t operator_loc;
734
+ struct yp_node *value;
735
+ yp_constant_id_t operator;
736
+ } yp_constant_path_operator_write_node_t;
737
+
738
+ // ConstantPathOrWriteNode
739
+ //
740
+ // Type: YP_NODE_CONSTANT_PATH_OR_WRITE_NODE
741
+ typedef struct yp_constant_path_or_write_node {
742
+ yp_node_t base;
743
+ struct yp_constant_path_node *target;
744
+ yp_location_t operator_loc;
745
+ struct yp_node *value;
746
+ } yp_constant_path_or_write_node_t;
747
+
748
+ // ConstantPathTargetNode
749
+ //
750
+ // Type: YP_NODE_CONSTANT_PATH_TARGET_NODE
751
+ typedef struct yp_constant_path_target_node {
752
+ yp_node_t base;
753
+ struct yp_node *parent;
754
+ struct yp_node *child;
755
+ yp_location_t delimiter_loc;
756
+ } yp_constant_path_target_node_t;
757
+
575
758
  // ConstantPathWriteNode
759
+ //
760
+ // Type: YP_NODE_CONSTANT_PATH_WRITE_NODE
576
761
  typedef struct yp_constant_path_write_node {
577
762
  yp_node_t base;
578
763
  struct yp_constant_path_node *target;
@@ -581,11 +766,22 @@ typedef struct yp_constant_path_write_node {
581
766
  } yp_constant_path_write_node_t;
582
767
 
583
768
  // ConstantReadNode
769
+ //
770
+ // Type: YP_NODE_CONSTANT_READ_NODE
584
771
  typedef struct yp_constant_read_node {
585
772
  yp_node_t base;
586
773
  } yp_constant_read_node_t;
587
774
 
775
+ // ConstantTargetNode
776
+ //
777
+ // Type: YP_NODE_CONSTANT_TARGET_NODE
778
+ typedef struct yp_constant_target_node {
779
+ yp_node_t base;
780
+ } yp_constant_target_node_t;
781
+
588
782
  // ConstantWriteNode
783
+ //
784
+ // Type: YP_NODE_CONSTANT_WRITE_NODE
589
785
  typedef struct yp_constant_write_node {
590
786
  yp_node_t base;
591
787
  yp_location_t name_loc;
@@ -594,6 +790,8 @@ typedef struct yp_constant_write_node {
594
790
  } yp_constant_write_node_t;
595
791
 
596
792
  // DefNode
793
+ //
794
+ // Type: YP_NODE_DEF_NODE
597
795
  typedef struct yp_def_node {
598
796
  yp_node_t base;
599
797
  yp_location_t name_loc;
@@ -610,6 +808,8 @@ typedef struct yp_def_node {
610
808
  } yp_def_node_t;
611
809
 
612
810
  // DefinedNode
811
+ //
812
+ // Type: YP_NODE_DEFINED_NODE
613
813
  typedef struct yp_defined_node {
614
814
  yp_node_t base;
615
815
  yp_location_t lparen_loc;
@@ -619,6 +819,8 @@ typedef struct yp_defined_node {
619
819
  } yp_defined_node_t;
620
820
 
621
821
  // ElseNode
822
+ //
823
+ // Type: YP_NODE_ELSE_NODE
622
824
  typedef struct yp_else_node {
623
825
  yp_node_t base;
624
826
  yp_location_t else_keyword_loc;
@@ -627,6 +829,8 @@ typedef struct yp_else_node {
627
829
  } yp_else_node_t;
628
830
 
629
831
  // EmbeddedStatementsNode
832
+ //
833
+ // Type: YP_NODE_EMBEDDED_STATEMENTS_NODE
630
834
  typedef struct yp_embedded_statements_node {
631
835
  yp_node_t base;
632
836
  yp_location_t opening_loc;
@@ -635,6 +839,8 @@ typedef struct yp_embedded_statements_node {
635
839
  } yp_embedded_statements_node_t;
636
840
 
637
841
  // EmbeddedVariableNode
842
+ //
843
+ // Type: YP_NODE_EMBEDDED_VARIABLE_NODE
638
844
  typedef struct yp_embedded_variable_node {
639
845
  yp_node_t base;
640
846
  yp_location_t operator_loc;
@@ -642,6 +848,8 @@ typedef struct yp_embedded_variable_node {
642
848
  } yp_embedded_variable_node_t;
643
849
 
644
850
  // EnsureNode
851
+ //
852
+ // Type: YP_NODE_ENSURE_NODE
645
853
  typedef struct yp_ensure_node {
646
854
  yp_node_t base;
647
855
  yp_location_t ensure_keyword_loc;
@@ -650,11 +858,15 @@ typedef struct yp_ensure_node {
650
858
  } yp_ensure_node_t;
651
859
 
652
860
  // FalseNode
861
+ //
862
+ // Type: YP_NODE_FALSE_NODE
653
863
  typedef struct yp_false_node {
654
864
  yp_node_t base;
655
865
  } yp_false_node_t;
656
866
 
657
867
  // FindPatternNode
868
+ //
869
+ // Type: YP_NODE_FIND_PATTERN_NODE
658
870
  typedef struct yp_find_pattern_node {
659
871
  yp_node_t base;
660
872
  struct yp_node *constant;
@@ -666,6 +878,10 @@ typedef struct yp_find_pattern_node {
666
878
  } yp_find_pattern_node_t;
667
879
 
668
880
  // FlipFlopNode
881
+ //
882
+ // Type: YP_NODE_FLIP_FLOP_NODE
883
+ // Flags:
884
+ // YP_RANGE_FLAGS_EXCLUDE_END
669
885
  typedef struct yp_flip_flop_node {
670
886
  yp_node_t base;
671
887
  struct yp_node *left;
@@ -674,11 +890,15 @@ typedef struct yp_flip_flop_node {
674
890
  } yp_flip_flop_node_t;
675
891
 
676
892
  // FloatNode
893
+ //
894
+ // Type: YP_NODE_FLOAT_NODE
677
895
  typedef struct yp_float_node {
678
896
  yp_node_t base;
679
897
  } yp_float_node_t;
680
898
 
681
899
  // ForNode
900
+ //
901
+ // Type: YP_NODE_FOR_NODE
682
902
  typedef struct yp_for_node {
683
903
  yp_node_t base;
684
904
  struct yp_node *index;
@@ -691,35 +911,85 @@ typedef struct yp_for_node {
691
911
  } yp_for_node_t;
692
912
 
693
913
  // ForwardingArgumentsNode
914
+ //
915
+ // Type: YP_NODE_FORWARDING_ARGUMENTS_NODE
694
916
  typedef struct yp_forwarding_arguments_node {
695
917
  yp_node_t base;
696
918
  } yp_forwarding_arguments_node_t;
697
919
 
698
920
  // ForwardingParameterNode
921
+ //
922
+ // Type: YP_NODE_FORWARDING_PARAMETER_NODE
699
923
  typedef struct yp_forwarding_parameter_node {
700
924
  yp_node_t base;
701
925
  } yp_forwarding_parameter_node_t;
702
926
 
703
927
  // ForwardingSuperNode
928
+ //
929
+ // Type: YP_NODE_FORWARDING_SUPER_NODE
704
930
  typedef struct yp_forwarding_super_node {
705
931
  yp_node_t base;
706
932
  struct yp_block_node *block;
707
933
  } yp_forwarding_super_node_t;
708
934
 
935
+ // GlobalVariableAndWriteNode
936
+ //
937
+ // Type: YP_NODE_GLOBAL_VARIABLE_AND_WRITE_NODE
938
+ typedef struct yp_global_variable_and_write_node {
939
+ yp_node_t base;
940
+ yp_location_t name_loc;
941
+ yp_location_t operator_loc;
942
+ struct yp_node *value;
943
+ } yp_global_variable_and_write_node_t;
944
+
945
+ // GlobalVariableOperatorWriteNode
946
+ //
947
+ // Type: YP_NODE_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE
948
+ typedef struct yp_global_variable_operator_write_node {
949
+ yp_node_t base;
950
+ yp_location_t name_loc;
951
+ yp_location_t operator_loc;
952
+ struct yp_node *value;
953
+ yp_constant_id_t operator;
954
+ } yp_global_variable_operator_write_node_t;
955
+
956
+ // GlobalVariableOrWriteNode
957
+ //
958
+ // Type: YP_NODE_GLOBAL_VARIABLE_OR_WRITE_NODE
959
+ typedef struct yp_global_variable_or_write_node {
960
+ yp_node_t base;
961
+ yp_location_t name_loc;
962
+ yp_location_t operator_loc;
963
+ struct yp_node *value;
964
+ } yp_global_variable_or_write_node_t;
965
+
709
966
  // GlobalVariableReadNode
967
+ //
968
+ // Type: YP_NODE_GLOBAL_VARIABLE_READ_NODE
710
969
  typedef struct yp_global_variable_read_node {
711
970
  yp_node_t base;
712
971
  } yp_global_variable_read_node_t;
713
972
 
973
+ // GlobalVariableTargetNode
974
+ //
975
+ // Type: YP_NODE_GLOBAL_VARIABLE_TARGET_NODE
976
+ typedef struct yp_global_variable_target_node {
977
+ yp_node_t base;
978
+ } yp_global_variable_target_node_t;
979
+
714
980
  // GlobalVariableWriteNode
981
+ //
982
+ // Type: YP_NODE_GLOBAL_VARIABLE_WRITE_NODE
715
983
  typedef struct yp_global_variable_write_node {
716
984
  yp_node_t base;
717
985
  yp_location_t name_loc;
718
- yp_location_t operator_loc;
719
986
  struct yp_node *value;
987
+ yp_location_t operator_loc;
720
988
  } yp_global_variable_write_node_t;
721
989
 
722
990
  // HashNode
991
+ //
992
+ // Type: YP_NODE_HASH_NODE
723
993
  typedef struct yp_hash_node {
724
994
  yp_node_t base;
725
995
  yp_location_t opening_loc;
@@ -728,6 +998,8 @@ typedef struct yp_hash_node {
728
998
  } yp_hash_node_t;
729
999
 
730
1000
  // HashPatternNode
1001
+ //
1002
+ // Type: YP_NODE_HASH_PATTERN_NODE
731
1003
  typedef struct yp_hash_pattern_node {
732
1004
  yp_node_t base;
733
1005
  struct yp_node *constant;
@@ -738,6 +1010,8 @@ typedef struct yp_hash_pattern_node {
738
1010
  } yp_hash_pattern_node_t;
739
1011
 
740
1012
  // IfNode
1013
+ //
1014
+ // Type: YP_NODE_IF_NODE
741
1015
  typedef struct yp_if_node {
742
1016
  yp_node_t base;
743
1017
  yp_location_t if_keyword_loc;
@@ -748,12 +1022,16 @@ typedef struct yp_if_node {
748
1022
  } yp_if_node_t;
749
1023
 
750
1024
  // ImaginaryNode
1025
+ //
1026
+ // Type: YP_NODE_IMAGINARY_NODE
751
1027
  typedef struct yp_imaginary_node {
752
1028
  yp_node_t base;
753
1029
  struct yp_node *numeric;
754
1030
  } yp_imaginary_node_t;
755
1031
 
756
1032
  // InNode
1033
+ //
1034
+ // Type: YP_NODE_IN_NODE
757
1035
  typedef struct yp_in_node {
758
1036
  yp_node_t base;
759
1037
  struct yp_node *pattern;
@@ -762,25 +1040,86 @@ typedef struct yp_in_node {
762
1040
  yp_location_t then_loc;
763
1041
  } yp_in_node_t;
764
1042
 
1043
+ // InstanceVariableAndWriteNode
1044
+ //
1045
+ // Type: YP_NODE_INSTANCE_VARIABLE_AND_WRITE_NODE
1046
+ typedef struct yp_instance_variable_and_write_node {
1047
+ yp_node_t base;
1048
+ yp_constant_id_t name;
1049
+ yp_location_t name_loc;
1050
+ yp_location_t operator_loc;
1051
+ struct yp_node *value;
1052
+ } yp_instance_variable_and_write_node_t;
1053
+
1054
+ // InstanceVariableOperatorWriteNode
1055
+ //
1056
+ // Type: YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE
1057
+ typedef struct yp_instance_variable_operator_write_node {
1058
+ yp_node_t base;
1059
+ yp_constant_id_t name;
1060
+ yp_location_t name_loc;
1061
+ yp_location_t operator_loc;
1062
+ struct yp_node *value;
1063
+ yp_constant_id_t operator;
1064
+ } yp_instance_variable_operator_write_node_t;
1065
+
1066
+ // InstanceVariableOrWriteNode
1067
+ //
1068
+ // Type: YP_NODE_INSTANCE_VARIABLE_OR_WRITE_NODE
1069
+ typedef struct yp_instance_variable_or_write_node {
1070
+ yp_node_t base;
1071
+ yp_constant_id_t name;
1072
+ yp_location_t name_loc;
1073
+ yp_location_t operator_loc;
1074
+ struct yp_node *value;
1075
+ } yp_instance_variable_or_write_node_t;
1076
+
765
1077
  // InstanceVariableReadNode
1078
+ //
1079
+ // Type: YP_NODE_INSTANCE_VARIABLE_READ_NODE
766
1080
  typedef struct yp_instance_variable_read_node {
767
1081
  yp_node_t base;
1082
+ yp_constant_id_t name;
768
1083
  } yp_instance_variable_read_node_t;
769
1084
 
1085
+ // InstanceVariableTargetNode
1086
+ //
1087
+ // Type: YP_NODE_INSTANCE_VARIABLE_TARGET_NODE
1088
+ typedef struct yp_instance_variable_target_node {
1089
+ yp_node_t base;
1090
+ yp_constant_id_t name;
1091
+ } yp_instance_variable_target_node_t;
1092
+
770
1093
  // InstanceVariableWriteNode
1094
+ //
1095
+ // Type: YP_NODE_INSTANCE_VARIABLE_WRITE_NODE
771
1096
  typedef struct yp_instance_variable_write_node {
772
1097
  yp_node_t base;
1098
+ yp_constant_id_t name;
773
1099
  yp_location_t name_loc;
774
1100
  struct yp_node *value;
775
1101
  yp_location_t operator_loc;
776
1102
  } yp_instance_variable_write_node_t;
777
1103
 
778
1104
  // IntegerNode
1105
+ //
1106
+ // Type: YP_NODE_INTEGER_NODE
779
1107
  typedef struct yp_integer_node {
780
1108
  yp_node_t base;
781
1109
  } yp_integer_node_t;
782
1110
 
783
1111
  // InterpolatedRegularExpressionNode
1112
+ //
1113
+ // Type: YP_NODE_INTERPOLATED_REGULAR_EXPRESSION_NODE
1114
+ // Flags:
1115
+ // YP_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
1116
+ // YP_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
1117
+ // YP_REGULAR_EXPRESSION_FLAGS_EXTENDED
1118
+ // YP_REGULAR_EXPRESSION_FLAGS_EUC_JP
1119
+ // YP_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
1120
+ // YP_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
1121
+ // YP_REGULAR_EXPRESSION_FLAGS_UTF_8
1122
+ // YP_REGULAR_EXPRESSION_FLAGS_ONCE
784
1123
  typedef struct yp_interpolated_regular_expression_node {
785
1124
  yp_node_t base;
786
1125
  yp_location_t opening_loc;
@@ -789,6 +1128,8 @@ typedef struct yp_interpolated_regular_expression_node {
789
1128
  } yp_interpolated_regular_expression_node_t;
790
1129
 
791
1130
  // InterpolatedStringNode
1131
+ //
1132
+ // Type: YP_NODE_INTERPOLATED_STRING_NODE
792
1133
  typedef struct yp_interpolated_string_node {
793
1134
  yp_node_t base;
794
1135
  yp_location_t opening_loc;
@@ -797,6 +1138,8 @@ typedef struct yp_interpolated_string_node {
797
1138
  } yp_interpolated_string_node_t;
798
1139
 
799
1140
  // InterpolatedSymbolNode
1141
+ //
1142
+ // Type: YP_NODE_INTERPOLATED_SYMBOL_NODE
800
1143
  typedef struct yp_interpolated_symbol_node {
801
1144
  yp_node_t base;
802
1145
  yp_location_t opening_loc;
@@ -805,6 +1148,8 @@ typedef struct yp_interpolated_symbol_node {
805
1148
  } yp_interpolated_symbol_node_t;
806
1149
 
807
1150
  // InterpolatedXStringNode
1151
+ //
1152
+ // Type: YP_NODE_INTERPOLATED_X_STRING_NODE
808
1153
  typedef struct yp_interpolated_x_string_node {
809
1154
  yp_node_t base;
810
1155
  yp_location_t opening_loc;
@@ -813,12 +1158,16 @@ typedef struct yp_interpolated_x_string_node {
813
1158
  } yp_interpolated_x_string_node_t;
814
1159
 
815
1160
  // KeywordHashNode
1161
+ //
1162
+ // Type: YP_NODE_KEYWORD_HASH_NODE
816
1163
  typedef struct yp_keyword_hash_node {
817
1164
  yp_node_t base;
818
1165
  struct yp_node_list elements;
819
1166
  } yp_keyword_hash_node_t;
820
1167
 
821
1168
  // KeywordParameterNode
1169
+ //
1170
+ // Type: YP_NODE_KEYWORD_PARAMETER_NODE
822
1171
  typedef struct yp_keyword_parameter_node {
823
1172
  yp_node_t base;
824
1173
  yp_location_t name_loc;
@@ -826,6 +1175,8 @@ typedef struct yp_keyword_parameter_node {
826
1175
  } yp_keyword_parameter_node_t;
827
1176
 
828
1177
  // KeywordRestParameterNode
1178
+ //
1179
+ // Type: YP_NODE_KEYWORD_REST_PARAMETER_NODE
829
1180
  typedef struct yp_keyword_rest_parameter_node {
830
1181
  yp_node_t base;
831
1182
  yp_location_t operator_loc;
@@ -833,32 +1184,88 @@ typedef struct yp_keyword_rest_parameter_node {
833
1184
  } yp_keyword_rest_parameter_node_t;
834
1185
 
835
1186
  // LambdaNode
1187
+ //
1188
+ // Type: YP_NODE_LAMBDA_NODE
836
1189
  typedef struct yp_lambda_node {
837
1190
  yp_node_t base;
838
1191
  yp_constant_id_list_t locals;
1192
+ yp_location_t operator_loc;
839
1193
  yp_location_t opening_loc;
1194
+ yp_location_t closing_loc;
840
1195
  struct yp_block_parameters_node *parameters;
841
1196
  struct yp_node *body;
842
1197
  } yp_lambda_node_t;
843
1198
 
1199
+ // LocalVariableAndWriteNode
1200
+ //
1201
+ // Type: YP_NODE_LOCAL_VARIABLE_AND_WRITE_NODE
1202
+ typedef struct yp_local_variable_and_write_node {
1203
+ yp_node_t base;
1204
+ yp_location_t name_loc;
1205
+ yp_location_t operator_loc;
1206
+ struct yp_node *value;
1207
+ yp_constant_id_t name;
1208
+ uint32_t depth;
1209
+ } yp_local_variable_and_write_node_t;
1210
+
1211
+ // LocalVariableOperatorWriteNode
1212
+ //
1213
+ // Type: YP_NODE_LOCAL_VARIABLE_OPERATOR_WRITE_NODE
1214
+ typedef struct yp_local_variable_operator_write_node {
1215
+ yp_node_t base;
1216
+ yp_location_t name_loc;
1217
+ yp_location_t operator_loc;
1218
+ struct yp_node *value;
1219
+ yp_constant_id_t name;
1220
+ yp_constant_id_t operator;
1221
+ uint32_t depth;
1222
+ } yp_local_variable_operator_write_node_t;
1223
+
1224
+ // LocalVariableOrWriteNode
1225
+ //
1226
+ // Type: YP_NODE_LOCAL_VARIABLE_OR_WRITE_NODE
1227
+ typedef struct yp_local_variable_or_write_node {
1228
+ yp_node_t base;
1229
+ yp_location_t name_loc;
1230
+ yp_location_t operator_loc;
1231
+ struct yp_node *value;
1232
+ yp_constant_id_t name;
1233
+ uint32_t depth;
1234
+ } yp_local_variable_or_write_node_t;
1235
+
844
1236
  // LocalVariableReadNode
1237
+ //
1238
+ // Type: YP_NODE_LOCAL_VARIABLE_READ_NODE
845
1239
  typedef struct yp_local_variable_read_node {
846
1240
  yp_node_t base;
847
- yp_constant_id_t constant_id;
1241
+ yp_constant_id_t name;
848
1242
  uint32_t depth;
849
1243
  } yp_local_variable_read_node_t;
850
1244
 
1245
+ // LocalVariableTargetNode
1246
+ //
1247
+ // Type: YP_NODE_LOCAL_VARIABLE_TARGET_NODE
1248
+ typedef struct yp_local_variable_target_node {
1249
+ yp_node_t base;
1250
+ yp_constant_id_t name;
1251
+ uint32_t depth;
1252
+ } yp_local_variable_target_node_t;
1253
+
851
1254
  // LocalVariableWriteNode
1255
+ //
1256
+ // Type: YP_NODE_LOCAL_VARIABLE_WRITE_NODE
852
1257
  typedef struct yp_local_variable_write_node {
853
1258
  yp_node_t base;
854
- yp_constant_id_t constant_id;
1259
+ yp_constant_id_t name;
855
1260
  uint32_t depth;
856
- struct yp_node *value;
857
1261
  yp_location_t name_loc;
1262
+ struct yp_node *value;
858
1263
  yp_location_t operator_loc;
859
1264
  } yp_local_variable_write_node_t;
860
1265
 
861
1266
  // MatchPredicateNode
1267
+ //
1268
+ // Type: YP_NODE_MATCH_PREDICATE_NODE
862
1269
  typedef struct yp_match_predicate_node {
863
1270
  yp_node_t base;
864
1271
  struct yp_node *value;
@@ -867,6 +1274,8 @@ typedef struct yp_match_predicate_node {
867
1274
  } yp_match_predicate_node_t;
868
1275
 
869
1276
  // MatchRequiredNode
1277
+ //
1278
+ // Type: YP_NODE_MATCH_REQUIRED_NODE
870
1279
  typedef struct yp_match_required_node {
871
1280
  yp_node_t base;
872
1281
  struct yp_node *value;
@@ -875,11 +1284,15 @@ typedef struct yp_match_required_node {
875
1284
  } yp_match_required_node_t;
876
1285
 
877
1286
  // MissingNode
1287
+ //
1288
+ // Type: YP_NODE_MISSING_NODE
878
1289
  typedef struct yp_missing_node {
879
1290
  yp_node_t base;
880
1291
  } yp_missing_node_t;
881
1292
 
882
1293
  // ModuleNode
1294
+ //
1295
+ // Type: YP_NODE_MODULE_NODE
883
1296
  typedef struct yp_module_node {
884
1297
  yp_node_t base;
885
1298
  yp_constant_id_list_t locals;
@@ -887,9 +1300,12 @@ typedef struct yp_module_node {
887
1300
  struct yp_node *constant_path;
888
1301
  struct yp_node *body;
889
1302
  yp_location_t end_keyword_loc;
1303
+ yp_string_t name;
890
1304
  } yp_module_node_t;
891
1305
 
892
1306
  // MultiWriteNode
1307
+ //
1308
+ // Type: YP_NODE_MULTI_WRITE_NODE
893
1309
  typedef struct yp_multi_write_node {
894
1310
  yp_node_t base;
895
1311
  struct yp_node_list targets;
@@ -900,6 +1316,8 @@ typedef struct yp_multi_write_node {
900
1316
  } yp_multi_write_node_t;
901
1317
 
902
1318
  // NextNode
1319
+ //
1320
+ // Type: YP_NODE_NEXT_NODE
903
1321
  typedef struct yp_next_node {
904
1322
  yp_node_t base;
905
1323
  struct yp_arguments_node *arguments;
@@ -907,11 +1325,15 @@ typedef struct yp_next_node {
907
1325
  } yp_next_node_t;
908
1326
 
909
1327
  // NilNode
1328
+ //
1329
+ // Type: YP_NODE_NIL_NODE
910
1330
  typedef struct yp_nil_node {
911
1331
  yp_node_t base;
912
1332
  } yp_nil_node_t;
913
1333
 
914
1334
  // NoKeywordsParameterNode
1335
+ //
1336
+ // Type: YP_NODE_NO_KEYWORDS_PARAMETER_NODE
915
1337
  typedef struct yp_no_keywords_parameter_node {
916
1338
  yp_node_t base;
917
1339
  yp_location_t operator_loc;
@@ -919,29 +1341,27 @@ typedef struct yp_no_keywords_parameter_node {
919
1341
  } yp_no_keywords_parameter_node_t;
920
1342
 
921
1343
  // NumberedReferenceReadNode
1344
+ //
1345
+ // Type: YP_NODE_NUMBERED_REFERENCE_READ_NODE
922
1346
  typedef struct yp_numbered_reference_read_node {
923
1347
  yp_node_t base;
1348
+ uint32_t number;
924
1349
  } yp_numbered_reference_read_node_t;
925
1350
 
926
- // OperatorWriteNode
927
- typedef struct yp_operator_write_node {
928
- yp_node_t base;
929
- struct yp_node *target;
930
- yp_location_t operator_loc;
931
- yp_constant_id_t operator;
932
- struct yp_node *value;
933
- } yp_operator_write_node_t;
934
-
935
1351
  // OptionalParameterNode
1352
+ //
1353
+ // Type: YP_NODE_OPTIONAL_PARAMETER_NODE
936
1354
  typedef struct yp_optional_parameter_node {
937
1355
  yp_node_t base;
938
- yp_constant_id_t constant_id;
1356
+ yp_constant_id_t name;
939
1357
  yp_location_t name_loc;
940
1358
  yp_location_t operator_loc;
941
1359
  struct yp_node *value;
942
1360
  } yp_optional_parameter_node_t;
943
1361
 
944
1362
  // OrNode
1363
+ //
1364
+ // Type: YP_NODE_OR_NODE
945
1365
  typedef struct yp_or_node {
946
1366
  yp_node_t base;
947
1367
  struct yp_node *left;
@@ -949,15 +1369,9 @@ typedef struct yp_or_node {
949
1369
  yp_location_t operator_loc;
950
1370
  } yp_or_node_t;
951
1371
 
952
- // OrWriteNode
953
- typedef struct yp_or_write_node {
954
- yp_node_t base;
955
- struct yp_node *target;
956
- struct yp_node *value;
957
- yp_location_t operator_loc;
958
- } yp_or_write_node_t;
959
-
960
1372
  // ParametersNode
1373
+ //
1374
+ // Type: YP_NODE_PARAMETERS_NODE
961
1375
  typedef struct yp_parameters_node {
962
1376
  yp_node_t base;
963
1377
  struct yp_node_list requireds;
@@ -970,6 +1384,8 @@ typedef struct yp_parameters_node {
970
1384
  } yp_parameters_node_t;
971
1385
 
972
1386
  // ParenthesesNode
1387
+ //
1388
+ // Type: YP_NODE_PARENTHESES_NODE
973
1389
  typedef struct yp_parentheses_node {
974
1390
  yp_node_t base;
975
1391
  struct yp_node *body;
@@ -978,6 +1394,8 @@ typedef struct yp_parentheses_node {
978
1394
  } yp_parentheses_node_t;
979
1395
 
980
1396
  // PinnedExpressionNode
1397
+ //
1398
+ // Type: YP_NODE_PINNED_EXPRESSION_NODE
981
1399
  typedef struct yp_pinned_expression_node {
982
1400
  yp_node_t base;
983
1401
  struct yp_node *expression;
@@ -987,6 +1405,8 @@ typedef struct yp_pinned_expression_node {
987
1405
  } yp_pinned_expression_node_t;
988
1406
 
989
1407
  // PinnedVariableNode
1408
+ //
1409
+ // Type: YP_NODE_PINNED_VARIABLE_NODE
990
1410
  typedef struct yp_pinned_variable_node {
991
1411
  yp_node_t base;
992
1412
  struct yp_node *variable;
@@ -994,6 +1414,8 @@ typedef struct yp_pinned_variable_node {
994
1414
  } yp_pinned_variable_node_t;
995
1415
 
996
1416
  // PostExecutionNode
1417
+ //
1418
+ // Type: YP_NODE_POST_EXECUTION_NODE
997
1419
  typedef struct yp_post_execution_node {
998
1420
  yp_node_t base;
999
1421
  struct yp_statements_node *statements;
@@ -1003,6 +1425,8 @@ typedef struct yp_post_execution_node {
1003
1425
  } yp_post_execution_node_t;
1004
1426
 
1005
1427
  // PreExecutionNode
1428
+ //
1429
+ // Type: YP_NODE_PRE_EXECUTION_NODE
1006
1430
  typedef struct yp_pre_execution_node {
1007
1431
  yp_node_t base;
1008
1432
  struct yp_statements_node *statements;
@@ -1012,6 +1436,8 @@ typedef struct yp_pre_execution_node {
1012
1436
  } yp_pre_execution_node_t;
1013
1437
 
1014
1438
  // ProgramNode
1439
+ //
1440
+ // Type: YP_NODE_PROGRAM_NODE
1015
1441
  typedef struct yp_program_node {
1016
1442
  yp_node_t base;
1017
1443
  yp_constant_id_list_t locals;
@@ -1019,6 +1445,10 @@ typedef struct yp_program_node {
1019
1445
  } yp_program_node_t;
1020
1446
 
1021
1447
  // RangeNode
1448
+ //
1449
+ // Type: YP_NODE_RANGE_NODE
1450
+ // Flags:
1451
+ // YP_RANGE_FLAGS_EXCLUDE_END
1022
1452
  typedef struct yp_range_node {
1023
1453
  yp_node_t base;
1024
1454
  struct yp_node *left;
@@ -1027,17 +1457,32 @@ typedef struct yp_range_node {
1027
1457
  } yp_range_node_t;
1028
1458
 
1029
1459
  // RationalNode
1460
+ //
1461
+ // Type: YP_NODE_RATIONAL_NODE
1030
1462
  typedef struct yp_rational_node {
1031
1463
  yp_node_t base;
1032
1464
  struct yp_node *numeric;
1033
1465
  } yp_rational_node_t;
1034
1466
 
1035
1467
  // RedoNode
1468
+ //
1469
+ // Type: YP_NODE_REDO_NODE
1036
1470
  typedef struct yp_redo_node {
1037
1471
  yp_node_t base;
1038
1472
  } yp_redo_node_t;
1039
1473
 
1040
1474
  // RegularExpressionNode
1475
+ //
1476
+ // Type: YP_NODE_REGULAR_EXPRESSION_NODE
1477
+ // Flags:
1478
+ // YP_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
1479
+ // YP_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
1480
+ // YP_REGULAR_EXPRESSION_FLAGS_EXTENDED
1481
+ // YP_REGULAR_EXPRESSION_FLAGS_EUC_JP
1482
+ // YP_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
1483
+ // YP_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
1484
+ // YP_REGULAR_EXPRESSION_FLAGS_UTF_8
1485
+ // YP_REGULAR_EXPRESSION_FLAGS_ONCE
1041
1486
  typedef struct yp_regular_expression_node {
1042
1487
  yp_node_t base;
1043
1488
  yp_location_t opening_loc;
@@ -1047,6 +1492,8 @@ typedef struct yp_regular_expression_node {
1047
1492
  } yp_regular_expression_node_t;
1048
1493
 
1049
1494
  // RequiredDestructuredParameterNode
1495
+ //
1496
+ // Type: YP_NODE_REQUIRED_DESTRUCTURED_PARAMETER_NODE
1050
1497
  typedef struct yp_required_destructured_parameter_node {
1051
1498
  yp_node_t base;
1052
1499
  struct yp_node_list parameters;
@@ -1055,12 +1502,16 @@ typedef struct yp_required_destructured_parameter_node {
1055
1502
  } yp_required_destructured_parameter_node_t;
1056
1503
 
1057
1504
  // RequiredParameterNode
1505
+ //
1506
+ // Type: YP_NODE_REQUIRED_PARAMETER_NODE
1058
1507
  typedef struct yp_required_parameter_node {
1059
1508
  yp_node_t base;
1060
- yp_constant_id_t constant_id;
1509
+ yp_constant_id_t name;
1061
1510
  } yp_required_parameter_node_t;
1062
1511
 
1063
1512
  // RescueModifierNode
1513
+ //
1514
+ // Type: YP_NODE_RESCUE_MODIFIER_NODE
1064
1515
  typedef struct yp_rescue_modifier_node {
1065
1516
  yp_node_t base;
1066
1517
  struct yp_node *expression;
@@ -1069,6 +1520,8 @@ typedef struct yp_rescue_modifier_node {
1069
1520
  } yp_rescue_modifier_node_t;
1070
1521
 
1071
1522
  // RescueNode
1523
+ //
1524
+ // Type: YP_NODE_RESCUE_NODE
1072
1525
  typedef struct yp_rescue_node {
1073
1526
  yp_node_t base;
1074
1527
  yp_location_t keyword_loc;
@@ -1080,6 +1533,8 @@ typedef struct yp_rescue_node {
1080
1533
  } yp_rescue_node_t;
1081
1534
 
1082
1535
  // RestParameterNode
1536
+ //
1537
+ // Type: YP_NODE_REST_PARAMETER_NODE
1083
1538
  typedef struct yp_rest_parameter_node {
1084
1539
  yp_node_t base;
1085
1540
  yp_location_t operator_loc;
@@ -1087,11 +1542,15 @@ typedef struct yp_rest_parameter_node {
1087
1542
  } yp_rest_parameter_node_t;
1088
1543
 
1089
1544
  // RetryNode
1545
+ //
1546
+ // Type: YP_NODE_RETRY_NODE
1090
1547
  typedef struct yp_retry_node {
1091
1548
  yp_node_t base;
1092
1549
  } yp_retry_node_t;
1093
1550
 
1094
1551
  // ReturnNode
1552
+ //
1553
+ // Type: YP_NODE_RETURN_NODE
1095
1554
  typedef struct yp_return_node {
1096
1555
  yp_node_t base;
1097
1556
  yp_location_t keyword_loc;
@@ -1099,11 +1558,15 @@ typedef struct yp_return_node {
1099
1558
  } yp_return_node_t;
1100
1559
 
1101
1560
  // SelfNode
1561
+ //
1562
+ // Type: YP_NODE_SELF_NODE
1102
1563
  typedef struct yp_self_node {
1103
1564
  yp_node_t base;
1104
1565
  } yp_self_node_t;
1105
1566
 
1106
1567
  // SingletonClassNode
1568
+ //
1569
+ // Type: YP_NODE_SINGLETON_CLASS_NODE
1107
1570
  typedef struct yp_singleton_class_node {
1108
1571
  yp_node_t base;
1109
1572
  yp_constant_id_list_t locals;
@@ -1115,22 +1578,30 @@ typedef struct yp_singleton_class_node {
1115
1578
  } yp_singleton_class_node_t;
1116
1579
 
1117
1580
  // SourceEncodingNode
1581
+ //
1582
+ // Type: YP_NODE_SOURCE_ENCODING_NODE
1118
1583
  typedef struct yp_source_encoding_node {
1119
1584
  yp_node_t base;
1120
1585
  } yp_source_encoding_node_t;
1121
1586
 
1122
1587
  // SourceFileNode
1588
+ //
1589
+ // Type: YP_NODE_SOURCE_FILE_NODE
1123
1590
  typedef struct yp_source_file_node {
1124
1591
  yp_node_t base;
1125
1592
  yp_string_t filepath;
1126
1593
  } yp_source_file_node_t;
1127
1594
 
1128
1595
  // SourceLineNode
1596
+ //
1597
+ // Type: YP_NODE_SOURCE_LINE_NODE
1129
1598
  typedef struct yp_source_line_node {
1130
1599
  yp_node_t base;
1131
1600
  } yp_source_line_node_t;
1132
1601
 
1133
1602
  // SplatNode
1603
+ //
1604
+ // Type: YP_NODE_SPLAT_NODE
1134
1605
  typedef struct yp_splat_node {
1135
1606
  yp_node_t base;
1136
1607
  yp_location_t operator_loc;
@@ -1138,12 +1609,16 @@ typedef struct yp_splat_node {
1138
1609
  } yp_splat_node_t;
1139
1610
 
1140
1611
  // StatementsNode
1612
+ //
1613
+ // Type: YP_NODE_STATEMENTS_NODE
1141
1614
  typedef struct yp_statements_node {
1142
1615
  yp_node_t base;
1143
1616
  struct yp_node_list body;
1144
1617
  } yp_statements_node_t;
1145
1618
 
1146
1619
  // StringConcatNode
1620
+ //
1621
+ // Type: YP_NODE_STRING_CONCAT_NODE
1147
1622
  typedef struct yp_string_concat_node {
1148
1623
  yp_node_t base;
1149
1624
  struct yp_node *left;
@@ -1151,6 +1626,8 @@ typedef struct yp_string_concat_node {
1151
1626
  } yp_string_concat_node_t;
1152
1627
 
1153
1628
  // StringNode
1629
+ //
1630
+ // Type: YP_NODE_STRING_NODE
1154
1631
  typedef struct yp_string_node {
1155
1632
  yp_node_t base;
1156
1633
  yp_location_t opening_loc;
@@ -1160,6 +1637,8 @@ typedef struct yp_string_node {
1160
1637
  } yp_string_node_t;
1161
1638
 
1162
1639
  // SuperNode
1640
+ //
1641
+ // Type: YP_NODE_SUPER_NODE
1163
1642
  typedef struct yp_super_node {
1164
1643
  yp_node_t base;
1165
1644
  yp_location_t keyword_loc;
@@ -1170,6 +1649,8 @@ typedef struct yp_super_node {
1170
1649
  } yp_super_node_t;
1171
1650
 
1172
1651
  // SymbolNode
1652
+ //
1653
+ // Type: YP_NODE_SYMBOL_NODE
1173
1654
  typedef struct yp_symbol_node {
1174
1655
  yp_node_t base;
1175
1656
  yp_location_t opening_loc;
@@ -1179,11 +1660,15 @@ typedef struct yp_symbol_node {
1179
1660
  } yp_symbol_node_t;
1180
1661
 
1181
1662
  // TrueNode
1663
+ //
1664
+ // Type: YP_NODE_TRUE_NODE
1182
1665
  typedef struct yp_true_node {
1183
1666
  yp_node_t base;
1184
1667
  } yp_true_node_t;
1185
1668
 
1186
1669
  // UndefNode
1670
+ //
1671
+ // Type: YP_NODE_UNDEF_NODE
1187
1672
  typedef struct yp_undef_node {
1188
1673
  yp_node_t base;
1189
1674
  struct yp_node_list names;
@@ -1191,6 +1676,8 @@ typedef struct yp_undef_node {
1191
1676
  } yp_undef_node_t;
1192
1677
 
1193
1678
  // UnlessNode
1679
+ //
1680
+ // Type: YP_NODE_UNLESS_NODE
1194
1681
  typedef struct yp_unless_node {
1195
1682
  yp_node_t base;
1196
1683
  yp_location_t keyword_loc;
@@ -1201,14 +1688,21 @@ typedef struct yp_unless_node {
1201
1688
  } yp_unless_node_t;
1202
1689
 
1203
1690
  // UntilNode
1691
+ //
1692
+ // Type: YP_NODE_UNTIL_NODE
1693
+ // Flags:
1694
+ // YP_LOOP_FLAGS_BEGIN_MODIFIER
1204
1695
  typedef struct yp_until_node {
1205
1696
  yp_node_t base;
1206
1697
  yp_location_t keyword_loc;
1698
+ yp_location_t closing_loc;
1207
1699
  struct yp_node *predicate;
1208
1700
  struct yp_statements_node *statements;
1209
1701
  } yp_until_node_t;
1210
1702
 
1211
1703
  // WhenNode
1704
+ //
1705
+ // Type: YP_NODE_WHEN_NODE
1212
1706
  typedef struct yp_when_node {
1213
1707
  yp_node_t base;
1214
1708
  yp_location_t keyword_loc;
@@ -1217,14 +1711,21 @@ typedef struct yp_when_node {
1217
1711
  } yp_when_node_t;
1218
1712
 
1219
1713
  // WhileNode
1714
+ //
1715
+ // Type: YP_NODE_WHILE_NODE
1716
+ // Flags:
1717
+ // YP_LOOP_FLAGS_BEGIN_MODIFIER
1220
1718
  typedef struct yp_while_node {
1221
1719
  yp_node_t base;
1222
1720
  yp_location_t keyword_loc;
1721
+ yp_location_t closing_loc;
1223
1722
  struct yp_node *predicate;
1224
1723
  struct yp_statements_node *statements;
1225
1724
  } yp_while_node_t;
1226
1725
 
1227
1726
  // XStringNode
1727
+ //
1728
+ // Type: YP_NODE_X_STRING_NODE
1228
1729
  typedef struct yp_x_string_node {
1229
1730
  yp_node_t base;
1230
1731
  yp_location_t opening_loc;
@@ -1234,6 +1735,8 @@ typedef struct yp_x_string_node {
1234
1735
  } yp_x_string_node_t;
1235
1736
 
1236
1737
  // YieldNode
1738
+ //
1739
+ // Type: YP_NODE_YIELD_NODE
1237
1740
  typedef struct yp_yield_node {
1238
1741
  yp_node_t base;
1239
1742
  yp_location_t keyword_loc;