yarp 0.8.0 → 0.10.0

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