yarp 0.6.0 → 0.8.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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +55 -0
  3. data/CONTRIBUTING.md +4 -0
  4. data/{Makefile.in → Makefile} +5 -4
  5. data/README.md +6 -3
  6. data/config.yml +83 -274
  7. data/docs/build_system.md +4 -15
  8. data/docs/building.md +1 -5
  9. data/docs/encoding.md +1 -0
  10. data/docs/{extension.md → ruby_api.md} +6 -3
  11. data/docs/serialization.md +71 -24
  12. data/ext/yarp/api_node.c +173 -585
  13. data/ext/yarp/extconf.rb +15 -10
  14. data/ext/yarp/extension.c +4 -2
  15. data/ext/yarp/extension.h +1 -1
  16. data/include/yarp/ast.h +167 -306
  17. data/include/yarp/defines.h +5 -15
  18. data/include/yarp/enc/yp_encoding.h +1 -0
  19. data/include/yarp/unescape.h +1 -1
  20. data/include/yarp/util/yp_buffer.h +9 -0
  21. data/include/yarp/util/yp_constant_pool.h +3 -0
  22. data/include/yarp/util/yp_list.h +7 -7
  23. data/include/yarp/util/yp_newline_list.h +4 -0
  24. data/include/yarp/util/yp_state_stack.h +1 -1
  25. data/include/yarp/util/yp_string.h +5 -1
  26. data/include/yarp/version.h +2 -3
  27. data/include/yarp.h +4 -2
  28. data/lib/yarp/ffi.rb +226 -0
  29. data/lib/yarp/lex_compat.rb +16 -2
  30. data/lib/yarp/node.rb +594 -1437
  31. data/lib/yarp/ripper_compat.rb +3 -3
  32. data/lib/yarp/serialize.rb +312 -149
  33. data/lib/yarp.rb +167 -2
  34. data/src/enc/yp_unicode.c +9 -0
  35. data/src/node.c +92 -250
  36. data/src/prettyprint.c +81 -206
  37. data/src/serialize.c +124 -149
  38. data/src/unescape.c +29 -35
  39. data/src/util/yp_buffer.c +18 -0
  40. data/src/util/yp_list.c +7 -16
  41. data/src/util/yp_state_stack.c +0 -6
  42. data/src/util/yp_string.c +8 -17
  43. data/src/yarp.c +444 -717
  44. data/yarp.gemspec +5 -5
  45. metadata +6 -6
  46. data/config.h.in +0 -25
  47. data/configure +0 -4487
data/src/prettyprint.c CHANGED
@@ -16,7 +16,7 @@
16
16
  static void
17
17
  prettyprint_location(yp_buffer_t *buffer, yp_parser_t *parser, yp_location_t *location) {
18
18
  char printed[] = "[0000-0000]";
19
- yp_snprintf(printed, sizeof(printed), "[%04ld-%04ld]", (long int)(location->start - parser->start), (long int)(location->end - parser->start));
19
+ snprintf(printed, sizeof(printed), "[%04ld-%04ld]", (long int)(location->start - parser->start), (long int)(location->end - parser->start));
20
20
  yp_buffer_append_str(buffer, printed, strlen(printed));
21
21
  }
22
22
 
@@ -47,6 +47,14 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
47
47
  yp_buffer_append_str(buffer, ")", 1);
48
48
  break;
49
49
  }
50
+ case YP_NODE_AND_WRITE_NODE: {
51
+ yp_buffer_append_str(buffer, "AndWriteNode(", 13);
52
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_and_write_node_t *)node)->target);
53
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_and_write_node_t *)node)->value);
54
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_and_write_node_t *)node)->operator_loc);
55
+ yp_buffer_append_str(buffer, ")", 1);
56
+ break;
57
+ }
50
58
  case YP_NODE_ARGUMENTS_NODE: {
51
59
  yp_buffer_append_str(buffer, "ArgumentsNode(", 14);
52
60
  yp_buffer_append_str(buffer, "[", 1);
@@ -200,7 +208,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
200
208
  for (uint32_t index = 0; index < ((yp_block_node_t *)node)->locals.size; index++) {
201
209
  if (index != 0) yp_buffer_append_str(buffer, ", ", 2);
202
210
  char locals_buffer[12];
203
- yp_snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_block_node_t *)node)->locals.ids[index]);
211
+ snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_block_node_t *)node)->locals.ids[index]);
204
212
  yp_buffer_append_str(buffer, locals_buffer, strlen(locals_buffer));
205
213
  }
206
214
  yp_buffer_append_str(buffer, "]", 1);
@@ -209,10 +217,10 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
209
217
  } else {
210
218
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_block_node_t *)node)->parameters);
211
219
  }
212
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_block_node_t *)node)->statements == NULL) {
220
+ yp_buffer_append_str(buffer, ", ", 2); if (((yp_block_node_t *)node)->body == NULL) {
213
221
  yp_buffer_append_str(buffer, "nil", 3);
214
222
  } else {
215
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_block_node_t *)node)->statements);
223
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_block_node_t *)node)->body);
216
224
  }
217
225
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_block_node_t *)node)->opening_loc);
218
226
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_block_node_t *)node)->closing_loc);
@@ -305,7 +313,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
305
313
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_call_node_t *)node)->block);
306
314
  }
307
315
  yp_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
308
- yp_snprintf(flags_buffer, sizeof(flags_buffer), "+%d", ((yp_call_node_t *)node)->flags);
316
+ snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags >> 1);
309
317
  yp_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
310
318
  yp_buffer_append_str(buffer, ", ", 2); yp_buffer_append_str(buffer, "\"", 1);
311
319
  yp_buffer_append_str(buffer, yp_string_source(&((yp_call_node_t *)node)->name), yp_string_length(&((yp_call_node_t *)node)->name));
@@ -335,7 +343,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
335
343
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_call_operator_write_node_t *)node)->operator_loc);
336
344
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_call_operator_write_node_t *)node)->value);
337
345
  yp_buffer_append_str(buffer, ", ", 2); char operator_id_buffer[12];
338
- yp_snprintf(operator_id_buffer, sizeof(operator_id_buffer), "%u", ((yp_call_operator_write_node_t *)node)->operator_id);
346
+ snprintf(operator_id_buffer, sizeof(operator_id_buffer), "%u", ((yp_call_operator_write_node_t *)node)->operator_id);
339
347
  yp_buffer_append_str(buffer, operator_id_buffer, strlen(operator_id_buffer));
340
348
  yp_buffer_append_str(buffer, ")", 1);
341
349
  break;
@@ -377,7 +385,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
377
385
  for (uint32_t index = 0; index < ((yp_class_node_t *)node)->locals.size; index++) {
378
386
  if (index != 0) yp_buffer_append_str(buffer, ", ", 2);
379
387
  char locals_buffer[12];
380
- yp_snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_class_node_t *)node)->locals.ids[index]);
388
+ snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_class_node_t *)node)->locals.ids[index]);
381
389
  yp_buffer_append_str(buffer, locals_buffer, strlen(locals_buffer));
382
390
  }
383
391
  yp_buffer_append_str(buffer, "]", 1);
@@ -393,42 +401,15 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
393
401
  } else {
394
402
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_class_node_t *)node)->superclass);
395
403
  }
396
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_class_node_t *)node)->statements == NULL) {
404
+ yp_buffer_append_str(buffer, ", ", 2); if (((yp_class_node_t *)node)->body == NULL) {
397
405
  yp_buffer_append_str(buffer, "nil", 3);
398
406
  } else {
399
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_class_node_t *)node)->statements);
407
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_class_node_t *)node)->body);
400
408
  }
401
409
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_node_t *)node)->end_keyword_loc);
402
410
  yp_buffer_append_str(buffer, ")", 1);
403
411
  break;
404
412
  }
405
- case YP_NODE_CLASS_VARIABLE_OPERATOR_AND_WRITE_NODE: {
406
- yp_buffer_append_str(buffer, "ClassVariableOperatorAndWriteNode(", 34);
407
- prettyprint_location(buffer, parser, &((yp_class_variable_operator_and_write_node_t *)node)->name_loc);
408
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_variable_operator_and_write_node_t *)node)->operator_loc);
409
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_class_variable_operator_and_write_node_t *)node)->value);
410
- yp_buffer_append_str(buffer, ")", 1);
411
- break;
412
- }
413
- case YP_NODE_CLASS_VARIABLE_OPERATOR_OR_WRITE_NODE: {
414
- yp_buffer_append_str(buffer, "ClassVariableOperatorOrWriteNode(", 33);
415
- prettyprint_location(buffer, parser, &((yp_class_variable_operator_or_write_node_t *)node)->name_loc);
416
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_variable_operator_or_write_node_t *)node)->operator_loc);
417
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_class_variable_operator_or_write_node_t *)node)->value);
418
- yp_buffer_append_str(buffer, ")", 1);
419
- break;
420
- }
421
- case YP_NODE_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
422
- yp_buffer_append_str(buffer, "ClassVariableOperatorWriteNode(", 31);
423
- prettyprint_location(buffer, parser, &((yp_class_variable_operator_write_node_t *)node)->name_loc);
424
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_variable_operator_write_node_t *)node)->operator_loc);
425
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_class_variable_operator_write_node_t *)node)->value);
426
- yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
427
- yp_snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_class_variable_operator_write_node_t *)node)->operator);
428
- yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
429
- yp_buffer_append_str(buffer, ")", 1);
430
- break;
431
- }
432
413
  case YP_NODE_CLASS_VARIABLE_READ_NODE: {
433
414
  yp_buffer_append_str(buffer, "ClassVariableReadNode(", 22);
434
415
  yp_buffer_append_str(buffer, ")", 1);
@@ -450,33 +431,6 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
450
431
  yp_buffer_append_str(buffer, ")", 1);
451
432
  break;
452
433
  }
453
- case YP_NODE_CONSTANT_OPERATOR_AND_WRITE_NODE: {
454
- yp_buffer_append_str(buffer, "ConstantOperatorAndWriteNode(", 29);
455
- prettyprint_location(buffer, parser, &((yp_constant_operator_and_write_node_t *)node)->name_loc);
456
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_operator_and_write_node_t *)node)->operator_loc);
457
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_operator_and_write_node_t *)node)->value);
458
- yp_buffer_append_str(buffer, ")", 1);
459
- break;
460
- }
461
- case YP_NODE_CONSTANT_OPERATOR_OR_WRITE_NODE: {
462
- yp_buffer_append_str(buffer, "ConstantOperatorOrWriteNode(", 28);
463
- prettyprint_location(buffer, parser, &((yp_constant_operator_or_write_node_t *)node)->name_loc);
464
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_operator_or_write_node_t *)node)->operator_loc);
465
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_operator_or_write_node_t *)node)->value);
466
- yp_buffer_append_str(buffer, ")", 1);
467
- break;
468
- }
469
- case YP_NODE_CONSTANT_OPERATOR_WRITE_NODE: {
470
- yp_buffer_append_str(buffer, "ConstantOperatorWriteNode(", 26);
471
- prettyprint_location(buffer, parser, &((yp_constant_operator_write_node_t *)node)->name_loc);
472
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_operator_write_node_t *)node)->operator_loc);
473
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_operator_write_node_t *)node)->value);
474
- yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
475
- yp_snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_constant_operator_write_node_t *)node)->operator);
476
- yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
477
- yp_buffer_append_str(buffer, ")", 1);
478
- break;
479
- }
480
434
  case YP_NODE_CONSTANT_PATH_NODE: {
481
435
  yp_buffer_append_str(buffer, "ConstantPathNode(", 17);
482
436
  if (((yp_constant_path_node_t *)node)->parent == NULL) {
@@ -489,33 +443,6 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
489
443
  yp_buffer_append_str(buffer, ")", 1);
490
444
  break;
491
445
  }
492
- case YP_NODE_CONSTANT_PATH_OPERATOR_AND_WRITE_NODE: {
493
- yp_buffer_append_str(buffer, "ConstantPathOperatorAndWriteNode(", 33);
494
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_operator_and_write_node_t *)node)->target);
495
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_path_operator_and_write_node_t *)node)->operator_loc);
496
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_operator_and_write_node_t *)node)->value);
497
- yp_buffer_append_str(buffer, ")", 1);
498
- break;
499
- }
500
- case YP_NODE_CONSTANT_PATH_OPERATOR_OR_WRITE_NODE: {
501
- yp_buffer_append_str(buffer, "ConstantPathOperatorOrWriteNode(", 32);
502
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_operator_or_write_node_t *)node)->target);
503
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_path_operator_or_write_node_t *)node)->operator_loc);
504
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_operator_or_write_node_t *)node)->value);
505
- yp_buffer_append_str(buffer, ")", 1);
506
- break;
507
- }
508
- case YP_NODE_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
509
- yp_buffer_append_str(buffer, "ConstantPathOperatorWriteNode(", 30);
510
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_operator_write_node_t *)node)->target);
511
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_path_operator_write_node_t *)node)->operator_loc);
512
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_operator_write_node_t *)node)->value);
513
- yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
514
- yp_snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_constant_path_operator_write_node_t *)node)->operator);
515
- yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
516
- yp_buffer_append_str(buffer, ")", 1);
517
- break;
518
- }
519
446
  case YP_NODE_CONSTANT_PATH_WRITE_NODE: {
520
447
  yp_buffer_append_str(buffer, "ConstantPathWriteNode(", 22);
521
448
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_write_node_t *)node)->target);
@@ -566,16 +493,16 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
566
493
  } else {
567
494
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_def_node_t *)node)->parameters);
568
495
  }
569
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_def_node_t *)node)->statements == NULL) {
496
+ yp_buffer_append_str(buffer, ", ", 2); if (((yp_def_node_t *)node)->body == NULL) {
570
497
  yp_buffer_append_str(buffer, "nil", 3);
571
498
  } else {
572
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_def_node_t *)node)->statements);
499
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_def_node_t *)node)->body);
573
500
  }
574
501
  yp_buffer_append_str(buffer, ", ", 2); yp_buffer_append_str(buffer, "[", 1);
575
502
  for (uint32_t index = 0; index < ((yp_def_node_t *)node)->locals.size; index++) {
576
503
  if (index != 0) yp_buffer_append_str(buffer, ", ", 2);
577
504
  char locals_buffer[12];
578
- yp_snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_def_node_t *)node)->locals.ids[index]);
505
+ snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_def_node_t *)node)->locals.ids[index]);
579
506
  yp_buffer_append_str(buffer, locals_buffer, strlen(locals_buffer));
580
507
  }
581
508
  yp_buffer_append_str(buffer, "]", 1);
@@ -705,6 +632,25 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
705
632
  yp_buffer_append_str(buffer, ")", 1);
706
633
  break;
707
634
  }
635
+ case YP_NODE_FLIP_FLOP_NODE: {
636
+ yp_buffer_append_str(buffer, "FlipFlopNode(", 13);
637
+ if (((yp_flip_flop_node_t *)node)->left == NULL) {
638
+ yp_buffer_append_str(buffer, "nil", 3);
639
+ } else {
640
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_flip_flop_node_t *)node)->left);
641
+ }
642
+ yp_buffer_append_str(buffer, ", ", 2); if (((yp_flip_flop_node_t *)node)->right == NULL) {
643
+ yp_buffer_append_str(buffer, "nil", 3);
644
+ } else {
645
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_flip_flop_node_t *)node)->right);
646
+ }
647
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_flip_flop_node_t *)node)->operator_loc);
648
+ yp_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
649
+ snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags >> 1);
650
+ yp_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
651
+ yp_buffer_append_str(buffer, ")", 1);
652
+ break;
653
+ }
708
654
  case YP_NODE_FLOAT_NODE: {
709
655
  yp_buffer_append_str(buffer, "FloatNode(", 10);
710
656
  yp_buffer_append_str(buffer, ")", 1);
@@ -750,33 +696,6 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
750
696
  yp_buffer_append_str(buffer, ")", 1);
751
697
  break;
752
698
  }
753
- case YP_NODE_GLOBAL_VARIABLE_OPERATOR_AND_WRITE_NODE: {
754
- yp_buffer_append_str(buffer, "GlobalVariableOperatorAndWriteNode(", 35);
755
- prettyprint_location(buffer, parser, &((yp_global_variable_operator_and_write_node_t *)node)->name_loc);
756
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_global_variable_operator_and_write_node_t *)node)->operator_loc);
757
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_global_variable_operator_and_write_node_t *)node)->value);
758
- yp_buffer_append_str(buffer, ")", 1);
759
- break;
760
- }
761
- case YP_NODE_GLOBAL_VARIABLE_OPERATOR_OR_WRITE_NODE: {
762
- yp_buffer_append_str(buffer, "GlobalVariableOperatorOrWriteNode(", 34);
763
- prettyprint_location(buffer, parser, &((yp_global_variable_operator_or_write_node_t *)node)->name_loc);
764
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_global_variable_operator_or_write_node_t *)node)->operator_loc);
765
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_global_variable_operator_or_write_node_t *)node)->value);
766
- yp_buffer_append_str(buffer, ")", 1);
767
- break;
768
- }
769
- case YP_NODE_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
770
- yp_buffer_append_str(buffer, "GlobalVariableOperatorWriteNode(", 32);
771
- prettyprint_location(buffer, parser, &((yp_global_variable_operator_write_node_t *)node)->name_loc);
772
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_global_variable_operator_write_node_t *)node)->operator_loc);
773
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_global_variable_operator_write_node_t *)node)->value);
774
- yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
775
- yp_snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_global_variable_operator_write_node_t *)node)->operator);
776
- yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
777
- yp_buffer_append_str(buffer, ")", 1);
778
- break;
779
- }
780
699
  case YP_NODE_GLOBAL_VARIABLE_READ_NODE: {
781
700
  yp_buffer_append_str(buffer, "GlobalVariableReadNode(", 23);
782
701
  yp_buffer_append_str(buffer, ")", 1);
@@ -891,33 +810,6 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
891
810
  yp_buffer_append_str(buffer, ")", 1);
892
811
  break;
893
812
  }
894
- case YP_NODE_INSTANCE_VARIABLE_OPERATOR_AND_WRITE_NODE: {
895
- yp_buffer_append_str(buffer, "InstanceVariableOperatorAndWriteNode(", 37);
896
- prettyprint_location(buffer, parser, &((yp_instance_variable_operator_and_write_node_t *)node)->name_loc);
897
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_operator_and_write_node_t *)node)->operator_loc);
898
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_instance_variable_operator_and_write_node_t *)node)->value);
899
- yp_buffer_append_str(buffer, ")", 1);
900
- break;
901
- }
902
- case YP_NODE_INSTANCE_VARIABLE_OPERATOR_OR_WRITE_NODE: {
903
- yp_buffer_append_str(buffer, "InstanceVariableOperatorOrWriteNode(", 36);
904
- prettyprint_location(buffer, parser, &((yp_instance_variable_operator_or_write_node_t *)node)->name_loc);
905
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_operator_or_write_node_t *)node)->operator_loc);
906
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_instance_variable_operator_or_write_node_t *)node)->value);
907
- yp_buffer_append_str(buffer, ")", 1);
908
- break;
909
- }
910
- case YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
911
- yp_buffer_append_str(buffer, "InstanceVariableOperatorWriteNode(", 34);
912
- prettyprint_location(buffer, parser, &((yp_instance_variable_operator_write_node_t *)node)->name_loc);
913
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_operator_write_node_t *)node)->operator_loc);
914
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_instance_variable_operator_write_node_t *)node)->value);
915
- yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
916
- yp_snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_instance_variable_operator_write_node_t *)node)->operator);
917
- yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
918
- yp_buffer_append_str(buffer, ")", 1);
919
- break;
920
- }
921
813
  case YP_NODE_INSTANCE_VARIABLE_READ_NODE: {
922
814
  yp_buffer_append_str(buffer, "InstanceVariableReadNode(", 25);
923
815
  yp_buffer_append_str(buffer, ")", 1);
@@ -955,7 +847,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
955
847
  yp_buffer_append_str(buffer, "]", 1);
956
848
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_interpolated_regular_expression_node_t *)node)->closing_loc);
957
849
  yp_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
958
- yp_snprintf(flags_buffer, sizeof(flags_buffer), "+%d", ((yp_interpolated_regular_expression_node_t *)node)->flags);
850
+ snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags >> 1);
959
851
  yp_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
960
852
  yp_buffer_append_str(buffer, ")", 1);
961
853
  break;
@@ -1054,7 +946,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1054
946
  for (uint32_t index = 0; index < ((yp_lambda_node_t *)node)->locals.size; index++) {
1055
947
  if (index != 0) yp_buffer_append_str(buffer, ", ", 2);
1056
948
  char locals_buffer[12];
1057
- yp_snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_lambda_node_t *)node)->locals.ids[index]);
949
+ snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_lambda_node_t *)node)->locals.ids[index]);
1058
950
  yp_buffer_append_str(buffer, locals_buffer, strlen(locals_buffer));
1059
951
  }
1060
952
  yp_buffer_append_str(buffer, "]", 1);
@@ -1064,57 +956,21 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1064
956
  } else {
1065
957
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_lambda_node_t *)node)->parameters);
1066
958
  }
1067
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_lambda_node_t *)node)->statements == NULL) {
959
+ yp_buffer_append_str(buffer, ", ", 2); if (((yp_lambda_node_t *)node)->body == NULL) {
1068
960
  yp_buffer_append_str(buffer, "nil", 3);
1069
961
  } else {
1070
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_lambda_node_t *)node)->statements);
962
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_lambda_node_t *)node)->body);
1071
963
  }
1072
964
  yp_buffer_append_str(buffer, ")", 1);
1073
965
  break;
1074
966
  }
1075
- case YP_NODE_LOCAL_VARIABLE_OPERATOR_AND_WRITE_NODE: {
1076
- yp_buffer_append_str(buffer, "LocalVariableOperatorAndWriteNode(", 34);
1077
- prettyprint_location(buffer, parser, &((yp_local_variable_operator_and_write_node_t *)node)->name_loc);
1078
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_local_variable_operator_and_write_node_t *)node)->operator_loc);
1079
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_local_variable_operator_and_write_node_t *)node)->value);
1080
- yp_buffer_append_str(buffer, ", ", 2); char constant_id_buffer[12];
1081
- yp_snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_local_variable_operator_and_write_node_t *)node)->constant_id);
1082
- yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1083
- yp_buffer_append_str(buffer, ")", 1);
1084
- break;
1085
- }
1086
- case YP_NODE_LOCAL_VARIABLE_OPERATOR_OR_WRITE_NODE: {
1087
- yp_buffer_append_str(buffer, "LocalVariableOperatorOrWriteNode(", 33);
1088
- prettyprint_location(buffer, parser, &((yp_local_variable_operator_or_write_node_t *)node)->name_loc);
1089
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_local_variable_operator_or_write_node_t *)node)->operator_loc);
1090
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_local_variable_operator_or_write_node_t *)node)->value);
1091
- yp_buffer_append_str(buffer, ", ", 2); char constant_id_buffer[12];
1092
- yp_snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_local_variable_operator_or_write_node_t *)node)->constant_id);
1093
- yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1094
- yp_buffer_append_str(buffer, ")", 1);
1095
- break;
1096
- }
1097
- case YP_NODE_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
1098
- yp_buffer_append_str(buffer, "LocalVariableOperatorWriteNode(", 31);
1099
- prettyprint_location(buffer, parser, &((yp_local_variable_operator_write_node_t *)node)->name_loc);
1100
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_local_variable_operator_write_node_t *)node)->operator_loc);
1101
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_local_variable_operator_write_node_t *)node)->value);
1102
- yp_buffer_append_str(buffer, ", ", 2); char constant_id_buffer[12];
1103
- yp_snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_local_variable_operator_write_node_t *)node)->constant_id);
1104
- yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1105
- yp_buffer_append_str(buffer, ", ", 2); char operator_id_buffer[12];
1106
- yp_snprintf(operator_id_buffer, sizeof(operator_id_buffer), "%u", ((yp_local_variable_operator_write_node_t *)node)->operator_id);
1107
- yp_buffer_append_str(buffer, operator_id_buffer, strlen(operator_id_buffer));
1108
- yp_buffer_append_str(buffer, ")", 1);
1109
- break;
1110
- }
1111
967
  case YP_NODE_LOCAL_VARIABLE_READ_NODE: {
1112
968
  yp_buffer_append_str(buffer, "LocalVariableReadNode(", 22);
1113
969
  char constant_id_buffer[12];
1114
- yp_snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_local_variable_read_node_t *)node)->constant_id);
970
+ snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_local_variable_read_node_t *)node)->constant_id);
1115
971
  yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1116
972
  yp_buffer_append_str(buffer, ", ", 2); char depth_buffer[12];
1117
- yp_snprintf(depth_buffer, sizeof(depth_buffer), "+%d", ((yp_local_variable_read_node_t *)node)->depth);
973
+ snprintf(depth_buffer, sizeof(depth_buffer), "+%d", ((yp_local_variable_read_node_t *)node)->depth);
1118
974
  yp_buffer_append_str(buffer, depth_buffer, strlen(depth_buffer));
1119
975
  yp_buffer_append_str(buffer, ")", 1);
1120
976
  break;
@@ -1122,10 +978,10 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1122
978
  case YP_NODE_LOCAL_VARIABLE_WRITE_NODE: {
1123
979
  yp_buffer_append_str(buffer, "LocalVariableWriteNode(", 23);
1124
980
  char constant_id_buffer[12];
1125
- yp_snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_local_variable_write_node_t *)node)->constant_id);
981
+ snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_local_variable_write_node_t *)node)->constant_id);
1126
982
  yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1127
983
  yp_buffer_append_str(buffer, ", ", 2); char depth_buffer[12];
1128
- yp_snprintf(depth_buffer, sizeof(depth_buffer), "+%d", ((yp_local_variable_write_node_t *)node)->depth);
984
+ snprintf(depth_buffer, sizeof(depth_buffer), "+%d", ((yp_local_variable_write_node_t *)node)->depth);
1129
985
  yp_buffer_append_str(buffer, depth_buffer, strlen(depth_buffer));
1130
986
  yp_buffer_append_str(buffer, ", ", 2); if (((yp_local_variable_write_node_t *)node)->value == NULL) {
1131
987
  yp_buffer_append_str(buffer, "nil", 3);
@@ -1168,16 +1024,16 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1168
1024
  for (uint32_t index = 0; index < ((yp_module_node_t *)node)->locals.size; index++) {
1169
1025
  if (index != 0) yp_buffer_append_str(buffer, ", ", 2);
1170
1026
  char locals_buffer[12];
1171
- yp_snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_module_node_t *)node)->locals.ids[index]);
1027
+ snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_module_node_t *)node)->locals.ids[index]);
1172
1028
  yp_buffer_append_str(buffer, locals_buffer, strlen(locals_buffer));
1173
1029
  }
1174
1030
  yp_buffer_append_str(buffer, "]", 1);
1175
1031
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_module_node_t *)node)->module_keyword_loc);
1176
1032
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_module_node_t *)node)->constant_path);
1177
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_module_node_t *)node)->statements == NULL) {
1033
+ yp_buffer_append_str(buffer, ", ", 2); if (((yp_module_node_t *)node)->body == NULL) {
1178
1034
  yp_buffer_append_str(buffer, "nil", 3);
1179
1035
  } else {
1180
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_module_node_t *)node)->statements);
1036
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_module_node_t *)node)->body);
1181
1037
  }
1182
1038
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_module_node_t *)node)->end_keyword_loc);
1183
1039
  yp_buffer_append_str(buffer, ")", 1);
@@ -1242,10 +1098,21 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1242
1098
  yp_buffer_append_str(buffer, ")", 1);
1243
1099
  break;
1244
1100
  }
1101
+ case YP_NODE_OPERATOR_WRITE_NODE: {
1102
+ yp_buffer_append_str(buffer, "OperatorWriteNode(", 18);
1103
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_operator_write_node_t *)node)->target);
1104
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_operator_write_node_t *)node)->operator_loc);
1105
+ yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
1106
+ snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_operator_write_node_t *)node)->operator);
1107
+ yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
1108
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_operator_write_node_t *)node)->value);
1109
+ yp_buffer_append_str(buffer, ")", 1);
1110
+ break;
1111
+ }
1245
1112
  case YP_NODE_OPTIONAL_PARAMETER_NODE: {
1246
1113
  yp_buffer_append_str(buffer, "OptionalParameterNode(", 22);
1247
1114
  char constant_id_buffer[12];
1248
- yp_snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_optional_parameter_node_t *)node)->constant_id);
1115
+ snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_optional_parameter_node_t *)node)->constant_id);
1249
1116
  yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1250
1117
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_optional_parameter_node_t *)node)->name_loc);
1251
1118
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_optional_parameter_node_t *)node)->operator_loc);
@@ -1261,6 +1128,14 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1261
1128
  yp_buffer_append_str(buffer, ")", 1);
1262
1129
  break;
1263
1130
  }
1131
+ case YP_NODE_OR_WRITE_NODE: {
1132
+ yp_buffer_append_str(buffer, "OrWriteNode(", 12);
1133
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_or_write_node_t *)node)->target);
1134
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_or_write_node_t *)node)->value);
1135
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_or_write_node_t *)node)->operator_loc);
1136
+ yp_buffer_append_str(buffer, ")", 1);
1137
+ break;
1138
+ }
1264
1139
  case YP_NODE_PARAMETERS_NODE: {
1265
1140
  yp_buffer_append_str(buffer, "ParametersNode(", 15);
1266
1141
  yp_buffer_append_str(buffer, "[", 1);
@@ -1307,10 +1182,10 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1307
1182
  }
1308
1183
  case YP_NODE_PARENTHESES_NODE: {
1309
1184
  yp_buffer_append_str(buffer, "ParenthesesNode(", 16);
1310
- if (((yp_parentheses_node_t *)node)->statements == NULL) {
1185
+ if (((yp_parentheses_node_t *)node)->body == NULL) {
1311
1186
  yp_buffer_append_str(buffer, "nil", 3);
1312
1187
  } else {
1313
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_parentheses_node_t *)node)->statements);
1188
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_parentheses_node_t *)node)->body);
1314
1189
  }
1315
1190
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_parentheses_node_t *)node)->opening_loc);
1316
1191
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_parentheses_node_t *)node)->closing_loc);
@@ -1365,7 +1240,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1365
1240
  for (uint32_t index = 0; index < ((yp_program_node_t *)node)->locals.size; index++) {
1366
1241
  if (index != 0) yp_buffer_append_str(buffer, ", ", 2);
1367
1242
  char locals_buffer[12];
1368
- yp_snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_program_node_t *)node)->locals.ids[index]);
1243
+ snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_program_node_t *)node)->locals.ids[index]);
1369
1244
  yp_buffer_append_str(buffer, locals_buffer, strlen(locals_buffer));
1370
1245
  }
1371
1246
  yp_buffer_append_str(buffer, "]", 1);
@@ -1387,7 +1262,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1387
1262
  }
1388
1263
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_range_node_t *)node)->operator_loc);
1389
1264
  yp_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
1390
- yp_snprintf(flags_buffer, sizeof(flags_buffer), "+%d", ((yp_range_node_t *)node)->flags);
1265
+ snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags >> 1);
1391
1266
  yp_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
1392
1267
  yp_buffer_append_str(buffer, ")", 1);
1393
1268
  break;
@@ -1412,7 +1287,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1412
1287
  yp_buffer_append_str(buffer, yp_string_source(&((yp_regular_expression_node_t *)node)->unescaped), yp_string_length(&((yp_regular_expression_node_t *)node)->unescaped));
1413
1288
  yp_buffer_append_str(buffer, "\"", 1);
1414
1289
  yp_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
1415
- yp_snprintf(flags_buffer, sizeof(flags_buffer), "+%d", ((yp_regular_expression_node_t *)node)->flags);
1290
+ snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags >> 1);
1416
1291
  yp_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
1417
1292
  yp_buffer_append_str(buffer, ")", 1);
1418
1293
  break;
@@ -1433,7 +1308,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1433
1308
  case YP_NODE_REQUIRED_PARAMETER_NODE: {
1434
1309
  yp_buffer_append_str(buffer, "RequiredParameterNode(", 22);
1435
1310
  char constant_id_buffer[12];
1436
- yp_snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_required_parameter_node_t *)node)->constant_id);
1311
+ snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_required_parameter_node_t *)node)->constant_id);
1437
1312
  yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1438
1313
  yp_buffer_append_str(buffer, ")", 1);
1439
1314
  break;
@@ -1516,17 +1391,17 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1516
1391
  for (uint32_t index = 0; index < ((yp_singleton_class_node_t *)node)->locals.size; index++) {
1517
1392
  if (index != 0) yp_buffer_append_str(buffer, ", ", 2);
1518
1393
  char locals_buffer[12];
1519
- yp_snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_singleton_class_node_t *)node)->locals.ids[index]);
1394
+ snprintf(locals_buffer, sizeof(locals_buffer), "%u", ((yp_singleton_class_node_t *)node)->locals.ids[index]);
1520
1395
  yp_buffer_append_str(buffer, locals_buffer, strlen(locals_buffer));
1521
1396
  }
1522
1397
  yp_buffer_append_str(buffer, "]", 1);
1523
1398
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_singleton_class_node_t *)node)->class_keyword_loc);
1524
1399
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_singleton_class_node_t *)node)->operator_loc);
1525
1400
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_singleton_class_node_t *)node)->expression);
1526
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_singleton_class_node_t *)node)->statements == NULL) {
1401
+ yp_buffer_append_str(buffer, ", ", 2); if (((yp_singleton_class_node_t *)node)->body == NULL) {
1527
1402
  yp_buffer_append_str(buffer, "nil", 3);
1528
1403
  } else {
1529
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_singleton_class_node_t *)node)->statements);
1404
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_singleton_class_node_t *)node)->body);
1530
1405
  }
1531
1406
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_singleton_class_node_t *)node)->end_keyword_loc);
1532
1407
  yp_buffer_append_str(buffer, ")", 1);
@@ -1692,7 +1567,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1692
1567
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_until_node_t *)node)->statements);
1693
1568
  }
1694
1569
  yp_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
1695
- yp_snprintf(flags_buffer, sizeof(flags_buffer), "+%d", ((yp_until_node_t *)node)->flags);
1570
+ snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags >> 1);
1696
1571
  yp_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
1697
1572
  yp_buffer_append_str(buffer, ")", 1);
1698
1573
  break;
@@ -1724,7 +1599,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1724
1599
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_while_node_t *)node)->statements);
1725
1600
  }
1726
1601
  yp_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
1727
- yp_snprintf(flags_buffer, sizeof(flags_buffer), "+%d", ((yp_while_node_t *)node)->flags);
1602
+ snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags >> 1);
1728
1603
  yp_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
1729
1604
  yp_buffer_append_str(buffer, ")", 1);
1730
1605
  break;