yarp 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +48 -1
  3. data/Makefile +5 -1
  4. data/README.md +4 -3
  5. data/config.yml +461 -150
  6. data/docs/configuration.md +1 -0
  7. data/docs/encoding.md +5 -5
  8. data/docs/ruby_api.md +2 -0
  9. data/docs/serialization.md +3 -3
  10. data/docs/testing.md +2 -2
  11. data/ext/yarp/api_node.c +810 -199
  12. data/ext/yarp/extension.c +94 -31
  13. data/ext/yarp/extension.h +2 -2
  14. data/include/yarp/ast.h +653 -150
  15. data/include/yarp/defines.h +2 -1
  16. data/include/yarp/diagnostic.h +3 -3
  17. data/include/yarp/enc/yp_encoding.h +10 -10
  18. data/include/yarp/node.h +10 -0
  19. data/include/yarp/parser.h +19 -19
  20. data/include/yarp/regexp.h +1 -1
  21. data/include/yarp/unescape.h +7 -5
  22. data/include/yarp/util/yp_buffer.h +3 -0
  23. data/include/yarp/util/yp_char.h +16 -16
  24. data/include/yarp/util/yp_constant_pool.h +2 -2
  25. data/include/yarp/util/yp_newline_list.h +7 -4
  26. data/include/yarp/util/yp_string.h +4 -4
  27. data/include/yarp/util/yp_string_list.h +0 -3
  28. data/include/yarp/util/yp_strpbrk.h +1 -1
  29. data/include/yarp/version.h +2 -2
  30. data/include/yarp.h +14 -3
  31. data/lib/yarp/desugar_visitor.rb +204 -0
  32. data/lib/yarp/ffi.rb +27 -1
  33. data/lib/yarp/lex_compat.rb +93 -25
  34. data/lib/yarp/mutation_visitor.rb +683 -0
  35. data/lib/yarp/node.rb +3121 -597
  36. data/lib/yarp/serialize.rb +198 -126
  37. data/lib/yarp.rb +53 -7
  38. data/src/diagnostic.c +1 -1
  39. data/src/enc/yp_big5.c +15 -42
  40. data/src/enc/yp_euc_jp.c +16 -43
  41. data/src/enc/yp_gbk.c +19 -46
  42. data/src/enc/yp_shift_jis.c +16 -43
  43. data/src/enc/yp_tables.c +36 -38
  44. data/src/enc/yp_unicode.c +20 -25
  45. data/src/enc/yp_windows_31j.c +16 -43
  46. data/src/node.c +1444 -836
  47. data/src/prettyprint.c +324 -103
  48. data/src/regexp.c +21 -21
  49. data/src/serialize.c +429 -276
  50. data/src/token_type.c +2 -2
  51. data/src/unescape.c +184 -136
  52. data/src/util/yp_buffer.c +7 -2
  53. data/src/util/yp_char.c +34 -34
  54. data/src/util/yp_constant_pool.c +4 -4
  55. data/src/util/yp_memchr.c +1 -1
  56. data/src/util/yp_newline_list.c +14 -3
  57. data/src/util/yp_string.c +22 -20
  58. data/src/util/yp_string_list.c +0 -6
  59. data/src/util/yp_strncasecmp.c +3 -6
  60. data/src/util/yp_strpbrk.c +8 -8
  61. data/src/yarp.c +1504 -615
  62. data/yarp.gemspec +3 -1
  63. metadata +4 -2
data/src/prettyprint.c 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/src/prettyprint.c.erb */
5
5
  /* if you are looking to modify the */
6
6
  /* template */
@@ -23,6 +23,10 @@ prettyprint_location(yp_buffer_t *buffer, yp_parser_t *parser, yp_location_t *lo
23
23
  static void
24
24
  prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
25
25
  switch (YP_NODE_TYPE(node)) {
26
+ // We do not need to print a ScopeNode as it's not part
27
+ // of the AST
28
+ case YP_NODE_SCOPE_NODE:
29
+ return;
26
30
  case YP_NODE_ALIAS_NODE: {
27
31
  yp_buffer_append_str(buffer, "AliasNode(", 10);
28
32
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_alias_node_t *)node)->new_name);
@@ -47,14 +51,6 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
47
51
  yp_buffer_append_str(buffer, ")", 1);
48
52
  break;
49
53
  }
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
- }
58
54
  case YP_NODE_ARGUMENTS_NODE: {
59
55
  yp_buffer_append_str(buffer, "ArgumentsNode(", 14);
60
56
  yp_buffer_append_str(buffer, "[", 1);
@@ -316,7 +312,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
316
312
  snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags >> 1);
317
313
  yp_buffer_append_str(buffer, flags_buffer, strlen(flags_buffer));
318
314
  yp_buffer_append_str(buffer, ", ", 2); yp_buffer_append_str(buffer, "\"", 1);
319
- yp_buffer_append_str(buffer, yp_string_source(&((yp_call_node_t *)node)->name), yp_string_length(&((yp_call_node_t *)node)->name));
315
+ yp_buffer_append_bytes(buffer, yp_string_source(&((yp_call_node_t *)node)->name), yp_string_length(&((yp_call_node_t *)node)->name));
320
316
  yp_buffer_append_str(buffer, "\"", 1);
321
317
  yp_buffer_append_str(buffer, ")", 1);
322
318
  break;
@@ -342,9 +338,9 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
342
338
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_call_operator_write_node_t *)node)->target);
343
339
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_call_operator_write_node_t *)node)->operator_loc);
344
340
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_call_operator_write_node_t *)node)->value);
345
- yp_buffer_append_str(buffer, ", ", 2); char operator_id_buffer[12];
346
- snprintf(operator_id_buffer, sizeof(operator_id_buffer), "%u", ((yp_call_operator_write_node_t *)node)->operator_id);
347
- yp_buffer_append_str(buffer, operator_id_buffer, strlen(operator_id_buffer));
341
+ yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
342
+ snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_call_operator_write_node_t *)node)->operator);
343
+ yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
348
344
  yp_buffer_append_str(buffer, ")", 1);
349
345
  break;
350
346
  }
@@ -407,17 +403,70 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
407
403
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_class_node_t *)node)->body);
408
404
  }
409
405
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_node_t *)node)->end_keyword_loc);
406
+ yp_buffer_append_str(buffer, ", ", 2); yp_buffer_append_str(buffer, "\"", 1);
407
+ yp_buffer_append_bytes(buffer, yp_string_source(&((yp_class_node_t *)node)->name), yp_string_length(&((yp_class_node_t *)node)->name));
408
+ yp_buffer_append_str(buffer, "\"", 1);
409
+ yp_buffer_append_str(buffer, ")", 1);
410
+ break;
411
+ }
412
+ case YP_NODE_CLASS_VARIABLE_AND_WRITE_NODE: {
413
+ yp_buffer_append_str(buffer, "ClassVariableAndWriteNode(", 26);
414
+ char name_buffer[12];
415
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_class_variable_and_write_node_t *)node)->name);
416
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
417
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_variable_and_write_node_t *)node)->name_loc);
418
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_variable_and_write_node_t *)node)->operator_loc);
419
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_class_variable_and_write_node_t *)node)->value);
420
+ yp_buffer_append_str(buffer, ")", 1);
421
+ break;
422
+ }
423
+ case YP_NODE_CLASS_VARIABLE_OPERATOR_WRITE_NODE: {
424
+ yp_buffer_append_str(buffer, "ClassVariableOperatorWriteNode(", 31);
425
+ char name_buffer[12];
426
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_class_variable_operator_write_node_t *)node)->name);
427
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
428
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_variable_operator_write_node_t *)node)->name_loc);
429
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_variable_operator_write_node_t *)node)->operator_loc);
430
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_class_variable_operator_write_node_t *)node)->value);
431
+ yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
432
+ snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_class_variable_operator_write_node_t *)node)->operator);
433
+ yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
434
+ yp_buffer_append_str(buffer, ")", 1);
435
+ break;
436
+ }
437
+ case YP_NODE_CLASS_VARIABLE_OR_WRITE_NODE: {
438
+ yp_buffer_append_str(buffer, "ClassVariableOrWriteNode(", 25);
439
+ char name_buffer[12];
440
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_class_variable_or_write_node_t *)node)->name);
441
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
442
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_variable_or_write_node_t *)node)->name_loc);
443
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_variable_or_write_node_t *)node)->operator_loc);
444
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_class_variable_or_write_node_t *)node)->value);
410
445
  yp_buffer_append_str(buffer, ")", 1);
411
446
  break;
412
447
  }
413
448
  case YP_NODE_CLASS_VARIABLE_READ_NODE: {
414
449
  yp_buffer_append_str(buffer, "ClassVariableReadNode(", 22);
450
+ char name_buffer[12];
451
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_class_variable_read_node_t *)node)->name);
452
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
453
+ yp_buffer_append_str(buffer, ")", 1);
454
+ break;
455
+ }
456
+ case YP_NODE_CLASS_VARIABLE_TARGET_NODE: {
457
+ yp_buffer_append_str(buffer, "ClassVariableTargetNode(", 24);
458
+ char name_buffer[12];
459
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_class_variable_target_node_t *)node)->name);
460
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
415
461
  yp_buffer_append_str(buffer, ")", 1);
416
462
  break;
417
463
  }
418
464
  case YP_NODE_CLASS_VARIABLE_WRITE_NODE: {
419
465
  yp_buffer_append_str(buffer, "ClassVariableWriteNode(", 23);
420
- prettyprint_location(buffer, parser, &((yp_class_variable_write_node_t *)node)->name_loc);
466
+ char name_buffer[12];
467
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_class_variable_write_node_t *)node)->name);
468
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
469
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_class_variable_write_node_t *)node)->name_loc);
421
470
  yp_buffer_append_str(buffer, ", ", 2); if (((yp_class_variable_write_node_t *)node)->value == NULL) {
422
471
  yp_buffer_append_str(buffer, "nil", 3);
423
472
  } else {
@@ -431,6 +480,41 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
431
480
  yp_buffer_append_str(buffer, ")", 1);
432
481
  break;
433
482
  }
483
+ case YP_NODE_CONSTANT_AND_WRITE_NODE: {
484
+ yp_buffer_append_str(buffer, "ConstantAndWriteNode(", 21);
485
+ prettyprint_location(buffer, parser, &((yp_constant_and_write_node_t *)node)->name_loc);
486
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_and_write_node_t *)node)->operator_loc);
487
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_and_write_node_t *)node)->value);
488
+ yp_buffer_append_str(buffer, ")", 1);
489
+ break;
490
+ }
491
+ case YP_NODE_CONSTANT_OPERATOR_WRITE_NODE: {
492
+ yp_buffer_append_str(buffer, "ConstantOperatorWriteNode(", 26);
493
+ prettyprint_location(buffer, parser, &((yp_constant_operator_write_node_t *)node)->name_loc);
494
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_operator_write_node_t *)node)->operator_loc);
495
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_operator_write_node_t *)node)->value);
496
+ yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
497
+ snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_constant_operator_write_node_t *)node)->operator);
498
+ yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
499
+ yp_buffer_append_str(buffer, ")", 1);
500
+ break;
501
+ }
502
+ case YP_NODE_CONSTANT_OR_WRITE_NODE: {
503
+ yp_buffer_append_str(buffer, "ConstantOrWriteNode(", 20);
504
+ prettyprint_location(buffer, parser, &((yp_constant_or_write_node_t *)node)->name_loc);
505
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_or_write_node_t *)node)->operator_loc);
506
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_or_write_node_t *)node)->value);
507
+ yp_buffer_append_str(buffer, ")", 1);
508
+ break;
509
+ }
510
+ case YP_NODE_CONSTANT_PATH_AND_WRITE_NODE: {
511
+ yp_buffer_append_str(buffer, "ConstantPathAndWriteNode(", 25);
512
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_and_write_node_t *)node)->target);
513
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_path_and_write_node_t *)node)->operator_loc);
514
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_and_write_node_t *)node)->value);
515
+ yp_buffer_append_str(buffer, ")", 1);
516
+ break;
517
+ }
434
518
  case YP_NODE_CONSTANT_PATH_NODE: {
435
519
  yp_buffer_append_str(buffer, "ConstantPathNode(", 17);
436
520
  if (((yp_constant_path_node_t *)node)->parent == NULL) {
@@ -443,19 +527,42 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
443
527
  yp_buffer_append_str(buffer, ")", 1);
444
528
  break;
445
529
  }
446
- case YP_NODE_CONSTANT_PATH_WRITE_NODE: {
447
- yp_buffer_append_str(buffer, "ConstantPathWriteNode(", 22);
448
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_write_node_t *)node)->target);
449
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_constant_path_write_node_t *)node)->operator_loc.start == NULL) {
450
- yp_buffer_append_str(buffer, "nil", 3);
451
- } else {
452
- prettyprint_location(buffer, parser, &((yp_constant_path_write_node_t *)node)->operator_loc);
453
- }
454
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_constant_path_write_node_t *)node)->value == NULL) {
530
+ case YP_NODE_CONSTANT_PATH_OPERATOR_WRITE_NODE: {
531
+ yp_buffer_append_str(buffer, "ConstantPathOperatorWriteNode(", 30);
532
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_operator_write_node_t *)node)->target);
533
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_path_operator_write_node_t *)node)->operator_loc);
534
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_operator_write_node_t *)node)->value);
535
+ yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
536
+ snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_constant_path_operator_write_node_t *)node)->operator);
537
+ yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
538
+ yp_buffer_append_str(buffer, ")", 1);
539
+ break;
540
+ }
541
+ case YP_NODE_CONSTANT_PATH_OR_WRITE_NODE: {
542
+ yp_buffer_append_str(buffer, "ConstantPathOrWriteNode(", 24);
543
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_or_write_node_t *)node)->target);
544
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_path_or_write_node_t *)node)->operator_loc);
545
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_or_write_node_t *)node)->value);
546
+ yp_buffer_append_str(buffer, ")", 1);
547
+ break;
548
+ }
549
+ case YP_NODE_CONSTANT_PATH_TARGET_NODE: {
550
+ yp_buffer_append_str(buffer, "ConstantPathTargetNode(", 23);
551
+ if (((yp_constant_path_target_node_t *)node)->parent == NULL) {
455
552
  yp_buffer_append_str(buffer, "nil", 3);
456
553
  } else {
457
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_write_node_t *)node)->value);
554
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_target_node_t *)node)->parent);
458
555
  }
556
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_target_node_t *)node)->child);
557
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_path_target_node_t *)node)->delimiter_loc);
558
+ yp_buffer_append_str(buffer, ")", 1);
559
+ break;
560
+ }
561
+ case YP_NODE_CONSTANT_PATH_WRITE_NODE: {
562
+ yp_buffer_append_str(buffer, "ConstantPathWriteNode(", 22);
563
+ prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_write_node_t *)node)->target);
564
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_path_write_node_t *)node)->operator_loc);
565
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_path_write_node_t *)node)->value);
459
566
  yp_buffer_append_str(buffer, ")", 1);
460
567
  break;
461
568
  }
@@ -464,19 +571,16 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
464
571
  yp_buffer_append_str(buffer, ")", 1);
465
572
  break;
466
573
  }
574
+ case YP_NODE_CONSTANT_TARGET_NODE: {
575
+ yp_buffer_append_str(buffer, "ConstantTargetNode(", 19);
576
+ yp_buffer_append_str(buffer, ")", 1);
577
+ break;
578
+ }
467
579
  case YP_NODE_CONSTANT_WRITE_NODE: {
468
580
  yp_buffer_append_str(buffer, "ConstantWriteNode(", 18);
469
581
  prettyprint_location(buffer, parser, &((yp_constant_write_node_t *)node)->name_loc);
470
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_constant_write_node_t *)node)->value == NULL) {
471
- yp_buffer_append_str(buffer, "nil", 3);
472
- } else {
473
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_write_node_t *)node)->value);
474
- }
475
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_constant_write_node_t *)node)->operator_loc.start == NULL) {
476
- yp_buffer_append_str(buffer, "nil", 3);
477
- } else {
478
- prettyprint_location(buffer, parser, &((yp_constant_write_node_t *)node)->operator_loc);
479
- }
582
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_constant_write_node_t *)node)->value);
583
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_constant_write_node_t *)node)->operator_loc);
480
584
  yp_buffer_append_str(buffer, ")", 1);
481
585
  break;
482
586
  }
@@ -696,24 +800,48 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
696
800
  yp_buffer_append_str(buffer, ")", 1);
697
801
  break;
698
802
  }
803
+ case YP_NODE_GLOBAL_VARIABLE_AND_WRITE_NODE: {
804
+ yp_buffer_append_str(buffer, "GlobalVariableAndWriteNode(", 27);
805
+ prettyprint_location(buffer, parser, &((yp_global_variable_and_write_node_t *)node)->name_loc);
806
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_global_variable_and_write_node_t *)node)->operator_loc);
807
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_global_variable_and_write_node_t *)node)->value);
808
+ yp_buffer_append_str(buffer, ")", 1);
809
+ break;
810
+ }
811
+ case YP_NODE_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: {
812
+ yp_buffer_append_str(buffer, "GlobalVariableOperatorWriteNode(", 32);
813
+ prettyprint_location(buffer, parser, &((yp_global_variable_operator_write_node_t *)node)->name_loc);
814
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_global_variable_operator_write_node_t *)node)->operator_loc);
815
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_global_variable_operator_write_node_t *)node)->value);
816
+ yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
817
+ snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_global_variable_operator_write_node_t *)node)->operator);
818
+ yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
819
+ yp_buffer_append_str(buffer, ")", 1);
820
+ break;
821
+ }
822
+ case YP_NODE_GLOBAL_VARIABLE_OR_WRITE_NODE: {
823
+ yp_buffer_append_str(buffer, "GlobalVariableOrWriteNode(", 26);
824
+ prettyprint_location(buffer, parser, &((yp_global_variable_or_write_node_t *)node)->name_loc);
825
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_global_variable_or_write_node_t *)node)->operator_loc);
826
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_global_variable_or_write_node_t *)node)->value);
827
+ yp_buffer_append_str(buffer, ")", 1);
828
+ break;
829
+ }
699
830
  case YP_NODE_GLOBAL_VARIABLE_READ_NODE: {
700
831
  yp_buffer_append_str(buffer, "GlobalVariableReadNode(", 23);
701
832
  yp_buffer_append_str(buffer, ")", 1);
702
833
  break;
703
834
  }
835
+ case YP_NODE_GLOBAL_VARIABLE_TARGET_NODE: {
836
+ yp_buffer_append_str(buffer, "GlobalVariableTargetNode(", 25);
837
+ yp_buffer_append_str(buffer, ")", 1);
838
+ break;
839
+ }
704
840
  case YP_NODE_GLOBAL_VARIABLE_WRITE_NODE: {
705
841
  yp_buffer_append_str(buffer, "GlobalVariableWriteNode(", 24);
706
842
  prettyprint_location(buffer, parser, &((yp_global_variable_write_node_t *)node)->name_loc);
707
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_global_variable_write_node_t *)node)->operator_loc.start == NULL) {
708
- yp_buffer_append_str(buffer, "nil", 3);
709
- } else {
710
- prettyprint_location(buffer, parser, &((yp_global_variable_write_node_t *)node)->operator_loc);
711
- }
712
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_global_variable_write_node_t *)node)->value == NULL) {
713
- yp_buffer_append_str(buffer, "nil", 3);
714
- } else {
715
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_global_variable_write_node_t *)node)->value);
716
- }
843
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_global_variable_write_node_t *)node)->value);
844
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_global_variable_write_node_t *)node)->operator_loc);
717
845
  yp_buffer_append_str(buffer, ")", 1);
718
846
  break;
719
847
  }
@@ -810,24 +938,66 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
810
938
  yp_buffer_append_str(buffer, ")", 1);
811
939
  break;
812
940
  }
941
+ case YP_NODE_INSTANCE_VARIABLE_AND_WRITE_NODE: {
942
+ yp_buffer_append_str(buffer, "InstanceVariableAndWriteNode(", 29);
943
+ char name_buffer[12];
944
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_instance_variable_and_write_node_t *)node)->name);
945
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
946
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_and_write_node_t *)node)->name_loc);
947
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_and_write_node_t *)node)->operator_loc);
948
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_instance_variable_and_write_node_t *)node)->value);
949
+ yp_buffer_append_str(buffer, ")", 1);
950
+ break;
951
+ }
952
+ case YP_NODE_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: {
953
+ yp_buffer_append_str(buffer, "InstanceVariableOperatorWriteNode(", 34);
954
+ char name_buffer[12];
955
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_instance_variable_operator_write_node_t *)node)->name);
956
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
957
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_operator_write_node_t *)node)->name_loc);
958
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_operator_write_node_t *)node)->operator_loc);
959
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_instance_variable_operator_write_node_t *)node)->value);
960
+ yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
961
+ snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_instance_variable_operator_write_node_t *)node)->operator);
962
+ yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
963
+ yp_buffer_append_str(buffer, ")", 1);
964
+ break;
965
+ }
966
+ case YP_NODE_INSTANCE_VARIABLE_OR_WRITE_NODE: {
967
+ yp_buffer_append_str(buffer, "InstanceVariableOrWriteNode(", 28);
968
+ char name_buffer[12];
969
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_instance_variable_or_write_node_t *)node)->name);
970
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
971
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_or_write_node_t *)node)->name_loc);
972
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_or_write_node_t *)node)->operator_loc);
973
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_instance_variable_or_write_node_t *)node)->value);
974
+ yp_buffer_append_str(buffer, ")", 1);
975
+ break;
976
+ }
813
977
  case YP_NODE_INSTANCE_VARIABLE_READ_NODE: {
814
978
  yp_buffer_append_str(buffer, "InstanceVariableReadNode(", 25);
979
+ char name_buffer[12];
980
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_instance_variable_read_node_t *)node)->name);
981
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
982
+ yp_buffer_append_str(buffer, ")", 1);
983
+ break;
984
+ }
985
+ case YP_NODE_INSTANCE_VARIABLE_TARGET_NODE: {
986
+ yp_buffer_append_str(buffer, "InstanceVariableTargetNode(", 27);
987
+ char name_buffer[12];
988
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_instance_variable_target_node_t *)node)->name);
989
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
815
990
  yp_buffer_append_str(buffer, ")", 1);
816
991
  break;
817
992
  }
818
993
  case YP_NODE_INSTANCE_VARIABLE_WRITE_NODE: {
819
994
  yp_buffer_append_str(buffer, "InstanceVariableWriteNode(", 26);
820
- prettyprint_location(buffer, parser, &((yp_instance_variable_write_node_t *)node)->name_loc);
821
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_instance_variable_write_node_t *)node)->value == NULL) {
822
- yp_buffer_append_str(buffer, "nil", 3);
823
- } else {
824
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_instance_variable_write_node_t *)node)->value);
825
- }
826
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_instance_variable_write_node_t *)node)->operator_loc.start == NULL) {
827
- yp_buffer_append_str(buffer, "nil", 3);
828
- } else {
829
- prettyprint_location(buffer, parser, &((yp_instance_variable_write_node_t *)node)->operator_loc);
830
- }
995
+ char name_buffer[12];
996
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_instance_variable_write_node_t *)node)->name);
997
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
998
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_write_node_t *)node)->name_loc);
999
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_instance_variable_write_node_t *)node)->value);
1000
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_instance_variable_write_node_t *)node)->operator_loc);
831
1001
  yp_buffer_append_str(buffer, ")", 1);
832
1002
  break;
833
1003
  }
@@ -950,7 +1120,9 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
950
1120
  yp_buffer_append_str(buffer, locals_buffer, strlen(locals_buffer));
951
1121
  }
952
1122
  yp_buffer_append_str(buffer, "]", 1);
1123
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_lambda_node_t *)node)->operator_loc);
953
1124
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_lambda_node_t *)node)->opening_loc);
1125
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_lambda_node_t *)node)->closing_loc);
954
1126
  yp_buffer_append_str(buffer, ", ", 2); if (((yp_lambda_node_t *)node)->parameters == NULL) {
955
1127
  yp_buffer_append_str(buffer, "nil", 3);
956
1128
  } else {
@@ -964,36 +1136,84 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
964
1136
  yp_buffer_append_str(buffer, ")", 1);
965
1137
  break;
966
1138
  }
1139
+ case YP_NODE_LOCAL_VARIABLE_AND_WRITE_NODE: {
1140
+ yp_buffer_append_str(buffer, "LocalVariableAndWriteNode(", 26);
1141
+ prettyprint_location(buffer, parser, &((yp_local_variable_and_write_node_t *)node)->name_loc);
1142
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_local_variable_and_write_node_t *)node)->operator_loc);
1143
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_local_variable_and_write_node_t *)node)->value);
1144
+ yp_buffer_append_str(buffer, ", ", 2); char name_buffer[12];
1145
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_local_variable_and_write_node_t *)node)->name);
1146
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
1147
+ yp_buffer_append_str(buffer, ", ", 2); char depth_buffer[12];
1148
+ snprintf(depth_buffer, sizeof(depth_buffer), "+%d", ((yp_local_variable_and_write_node_t *)node)->depth);
1149
+ yp_buffer_append_str(buffer, depth_buffer, strlen(depth_buffer));
1150
+ yp_buffer_append_str(buffer, ")", 1);
1151
+ break;
1152
+ }
1153
+ case YP_NODE_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: {
1154
+ yp_buffer_append_str(buffer, "LocalVariableOperatorWriteNode(", 31);
1155
+ prettyprint_location(buffer, parser, &((yp_local_variable_operator_write_node_t *)node)->name_loc);
1156
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_local_variable_operator_write_node_t *)node)->operator_loc);
1157
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_local_variable_operator_write_node_t *)node)->value);
1158
+ yp_buffer_append_str(buffer, ", ", 2); char name_buffer[12];
1159
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_local_variable_operator_write_node_t *)node)->name);
1160
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
1161
+ yp_buffer_append_str(buffer, ", ", 2); char operator_buffer[12];
1162
+ snprintf(operator_buffer, sizeof(operator_buffer), "%u", ((yp_local_variable_operator_write_node_t *)node)->operator);
1163
+ yp_buffer_append_str(buffer, operator_buffer, strlen(operator_buffer));
1164
+ yp_buffer_append_str(buffer, ", ", 2); char depth_buffer[12];
1165
+ snprintf(depth_buffer, sizeof(depth_buffer), "+%d", ((yp_local_variable_operator_write_node_t *)node)->depth);
1166
+ yp_buffer_append_str(buffer, depth_buffer, strlen(depth_buffer));
1167
+ yp_buffer_append_str(buffer, ")", 1);
1168
+ break;
1169
+ }
1170
+ case YP_NODE_LOCAL_VARIABLE_OR_WRITE_NODE: {
1171
+ yp_buffer_append_str(buffer, "LocalVariableOrWriteNode(", 25);
1172
+ prettyprint_location(buffer, parser, &((yp_local_variable_or_write_node_t *)node)->name_loc);
1173
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_local_variable_or_write_node_t *)node)->operator_loc);
1174
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_local_variable_or_write_node_t *)node)->value);
1175
+ yp_buffer_append_str(buffer, ", ", 2); char name_buffer[12];
1176
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_local_variable_or_write_node_t *)node)->name);
1177
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
1178
+ yp_buffer_append_str(buffer, ", ", 2); char depth_buffer[12];
1179
+ snprintf(depth_buffer, sizeof(depth_buffer), "+%d", ((yp_local_variable_or_write_node_t *)node)->depth);
1180
+ yp_buffer_append_str(buffer, depth_buffer, strlen(depth_buffer));
1181
+ yp_buffer_append_str(buffer, ")", 1);
1182
+ break;
1183
+ }
967
1184
  case YP_NODE_LOCAL_VARIABLE_READ_NODE: {
968
1185
  yp_buffer_append_str(buffer, "LocalVariableReadNode(", 22);
969
- char constant_id_buffer[12];
970
- snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_local_variable_read_node_t *)node)->constant_id);
971
- yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1186
+ char name_buffer[12];
1187
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_local_variable_read_node_t *)node)->name);
1188
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
972
1189
  yp_buffer_append_str(buffer, ", ", 2); char depth_buffer[12];
973
1190
  snprintf(depth_buffer, sizeof(depth_buffer), "+%d", ((yp_local_variable_read_node_t *)node)->depth);
974
1191
  yp_buffer_append_str(buffer, depth_buffer, strlen(depth_buffer));
975
1192
  yp_buffer_append_str(buffer, ")", 1);
976
1193
  break;
977
1194
  }
1195
+ case YP_NODE_LOCAL_VARIABLE_TARGET_NODE: {
1196
+ yp_buffer_append_str(buffer, "LocalVariableTargetNode(", 24);
1197
+ char name_buffer[12];
1198
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_local_variable_target_node_t *)node)->name);
1199
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
1200
+ yp_buffer_append_str(buffer, ", ", 2); char depth_buffer[12];
1201
+ snprintf(depth_buffer, sizeof(depth_buffer), "+%d", ((yp_local_variable_target_node_t *)node)->depth);
1202
+ yp_buffer_append_str(buffer, depth_buffer, strlen(depth_buffer));
1203
+ yp_buffer_append_str(buffer, ")", 1);
1204
+ break;
1205
+ }
978
1206
  case YP_NODE_LOCAL_VARIABLE_WRITE_NODE: {
979
1207
  yp_buffer_append_str(buffer, "LocalVariableWriteNode(", 23);
980
- char constant_id_buffer[12];
981
- snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_local_variable_write_node_t *)node)->constant_id);
982
- yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1208
+ char name_buffer[12];
1209
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_local_variable_write_node_t *)node)->name);
1210
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
983
1211
  yp_buffer_append_str(buffer, ", ", 2); char depth_buffer[12];
984
1212
  snprintf(depth_buffer, sizeof(depth_buffer), "+%d", ((yp_local_variable_write_node_t *)node)->depth);
985
1213
  yp_buffer_append_str(buffer, depth_buffer, strlen(depth_buffer));
986
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_local_variable_write_node_t *)node)->value == NULL) {
987
- yp_buffer_append_str(buffer, "nil", 3);
988
- } else {
989
- prettyprint_node(buffer, parser, (yp_node_t *)((yp_local_variable_write_node_t *)node)->value);
990
- }
991
1214
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_local_variable_write_node_t *)node)->name_loc);
992
- yp_buffer_append_str(buffer, ", ", 2); if (((yp_local_variable_write_node_t *)node)->operator_loc.start == NULL) {
993
- yp_buffer_append_str(buffer, "nil", 3);
994
- } else {
995
- prettyprint_location(buffer, parser, &((yp_local_variable_write_node_t *)node)->operator_loc);
996
- }
1215
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_local_variable_write_node_t *)node)->value);
1216
+ yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_local_variable_write_node_t *)node)->operator_loc);
997
1217
  yp_buffer_append_str(buffer, ")", 1);
998
1218
  break;
999
1219
  }
@@ -1036,6 +1256,9 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1036
1256
  prettyprint_node(buffer, parser, (yp_node_t *)((yp_module_node_t *)node)->body);
1037
1257
  }
1038
1258
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_module_node_t *)node)->end_keyword_loc);
1259
+ yp_buffer_append_str(buffer, ", ", 2); yp_buffer_append_str(buffer, "\"", 1);
1260
+ yp_buffer_append_bytes(buffer, yp_string_source(&((yp_module_node_t *)node)->name), yp_string_length(&((yp_module_node_t *)node)->name));
1261
+ yp_buffer_append_str(buffer, "\"", 1);
1039
1262
  yp_buffer_append_str(buffer, ")", 1);
1040
1263
  break;
1041
1264
  }
@@ -1095,25 +1318,17 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1095
1318
  }
1096
1319
  case YP_NODE_NUMBERED_REFERENCE_READ_NODE: {
1097
1320
  yp_buffer_append_str(buffer, "NumberedReferenceReadNode(", 26);
1098
- yp_buffer_append_str(buffer, ")", 1);
1099
- break;
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);
1321
+ char number_buffer[12];
1322
+ snprintf(number_buffer, sizeof(number_buffer), "+%d", ((yp_numbered_reference_read_node_t *)node)->number);
1323
+ yp_buffer_append_str(buffer, number_buffer, strlen(number_buffer));
1109
1324
  yp_buffer_append_str(buffer, ")", 1);
1110
1325
  break;
1111
1326
  }
1112
1327
  case YP_NODE_OPTIONAL_PARAMETER_NODE: {
1113
1328
  yp_buffer_append_str(buffer, "OptionalParameterNode(", 22);
1114
- char constant_id_buffer[12];
1115
- snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_optional_parameter_node_t *)node)->constant_id);
1116
- yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1329
+ char name_buffer[12];
1330
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_optional_parameter_node_t *)node)->name);
1331
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
1117
1332
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_optional_parameter_node_t *)node)->name_loc);
1118
1333
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_optional_parameter_node_t *)node)->operator_loc);
1119
1334
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_optional_parameter_node_t *)node)->value);
@@ -1128,14 +1343,6 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1128
1343
  yp_buffer_append_str(buffer, ")", 1);
1129
1344
  break;
1130
1345
  }
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
- }
1139
1346
  case YP_NODE_PARAMETERS_NODE: {
1140
1347
  yp_buffer_append_str(buffer, "ParametersNode(", 15);
1141
1348
  yp_buffer_append_str(buffer, "[", 1);
@@ -1284,7 +1491,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1284
1491
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_regular_expression_node_t *)node)->content_loc);
1285
1492
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_regular_expression_node_t *)node)->closing_loc);
1286
1493
  yp_buffer_append_str(buffer, ", ", 2); yp_buffer_append_str(buffer, "\"", 1);
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));
1494
+ yp_buffer_append_bytes(buffer, yp_string_source(&((yp_regular_expression_node_t *)node)->unescaped), yp_string_length(&((yp_regular_expression_node_t *)node)->unescaped));
1288
1495
  yp_buffer_append_str(buffer, "\"", 1);
1289
1496
  yp_buffer_append_str(buffer, ", ", 2); char flags_buffer[12];
1290
1497
  snprintf(flags_buffer, sizeof(flags_buffer), "+%d", node->flags >> 1);
@@ -1307,9 +1514,9 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1307
1514
  }
1308
1515
  case YP_NODE_REQUIRED_PARAMETER_NODE: {
1309
1516
  yp_buffer_append_str(buffer, "RequiredParameterNode(", 22);
1310
- char constant_id_buffer[12];
1311
- snprintf(constant_id_buffer, sizeof(constant_id_buffer), "%u", ((yp_required_parameter_node_t *)node)->constant_id);
1312
- yp_buffer_append_str(buffer, constant_id_buffer, strlen(constant_id_buffer));
1517
+ char name_buffer[12];
1518
+ snprintf(name_buffer, sizeof(name_buffer), "%u", ((yp_required_parameter_node_t *)node)->name);
1519
+ yp_buffer_append_str(buffer, name_buffer, strlen(name_buffer));
1313
1520
  yp_buffer_append_str(buffer, ")", 1);
1314
1521
  break;
1315
1522
  }
@@ -1415,7 +1622,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1415
1622
  case YP_NODE_SOURCE_FILE_NODE: {
1416
1623
  yp_buffer_append_str(buffer, "SourceFileNode(", 15);
1417
1624
  yp_buffer_append_str(buffer, "\"", 1);
1418
- yp_buffer_append_str(buffer, yp_string_source(&((yp_source_file_node_t *)node)->filepath), yp_string_length(&((yp_source_file_node_t *)node)->filepath));
1625
+ yp_buffer_append_bytes(buffer, yp_string_source(&((yp_source_file_node_t *)node)->filepath), yp_string_length(&((yp_source_file_node_t *)node)->filepath));
1419
1626
  yp_buffer_append_str(buffer, "\"", 1);
1420
1627
  yp_buffer_append_str(buffer, ")", 1);
1421
1628
  break;
@@ -1468,7 +1675,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1468
1675
  prettyprint_location(buffer, parser, &((yp_string_node_t *)node)->closing_loc);
1469
1676
  }
1470
1677
  yp_buffer_append_str(buffer, ", ", 2); yp_buffer_append_str(buffer, "\"", 1);
1471
- yp_buffer_append_str(buffer, yp_string_source(&((yp_string_node_t *)node)->unescaped), yp_string_length(&((yp_string_node_t *)node)->unescaped));
1678
+ yp_buffer_append_bytes(buffer, yp_string_source(&((yp_string_node_t *)node)->unescaped), yp_string_length(&((yp_string_node_t *)node)->unescaped));
1472
1679
  yp_buffer_append_str(buffer, "\"", 1);
1473
1680
  yp_buffer_append_str(buffer, ")", 1);
1474
1681
  break;
@@ -1506,14 +1713,18 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1506
1713
  } else {
1507
1714
  prettyprint_location(buffer, parser, &((yp_symbol_node_t *)node)->opening_loc);
1508
1715
  }
1509
- yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_symbol_node_t *)node)->value_loc);
1716
+ yp_buffer_append_str(buffer, ", ", 2); if (((yp_symbol_node_t *)node)->value_loc.start == NULL) {
1717
+ yp_buffer_append_str(buffer, "nil", 3);
1718
+ } else {
1719
+ prettyprint_location(buffer, parser, &((yp_symbol_node_t *)node)->value_loc);
1720
+ }
1510
1721
  yp_buffer_append_str(buffer, ", ", 2); if (((yp_symbol_node_t *)node)->closing_loc.start == NULL) {
1511
1722
  yp_buffer_append_str(buffer, "nil", 3);
1512
1723
  } else {
1513
1724
  prettyprint_location(buffer, parser, &((yp_symbol_node_t *)node)->closing_loc);
1514
1725
  }
1515
1726
  yp_buffer_append_str(buffer, ", ", 2); yp_buffer_append_str(buffer, "\"", 1);
1516
- yp_buffer_append_str(buffer, yp_string_source(&((yp_symbol_node_t *)node)->unescaped), yp_string_length(&((yp_symbol_node_t *)node)->unescaped));
1727
+ yp_buffer_append_bytes(buffer, yp_string_source(&((yp_symbol_node_t *)node)->unescaped), yp_string_length(&((yp_symbol_node_t *)node)->unescaped));
1517
1728
  yp_buffer_append_str(buffer, "\"", 1);
1518
1729
  yp_buffer_append_str(buffer, ")", 1);
1519
1730
  break;
@@ -1560,6 +1771,11 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1560
1771
  case YP_NODE_UNTIL_NODE: {
1561
1772
  yp_buffer_append_str(buffer, "UntilNode(", 10);
1562
1773
  prettyprint_location(buffer, parser, &((yp_until_node_t *)node)->keyword_loc);
1774
+ yp_buffer_append_str(buffer, ", ", 2); if (((yp_until_node_t *)node)->closing_loc.start == NULL) {
1775
+ yp_buffer_append_str(buffer, "nil", 3);
1776
+ } else {
1777
+ prettyprint_location(buffer, parser, &((yp_until_node_t *)node)->closing_loc);
1778
+ }
1563
1779
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_until_node_t *)node)->predicate);
1564
1780
  yp_buffer_append_str(buffer, ", ", 2); if (((yp_until_node_t *)node)->statements == NULL) {
1565
1781
  yp_buffer_append_str(buffer, "nil", 3);
@@ -1592,6 +1808,11 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1592
1808
  case YP_NODE_WHILE_NODE: {
1593
1809
  yp_buffer_append_str(buffer, "WhileNode(", 10);
1594
1810
  prettyprint_location(buffer, parser, &((yp_while_node_t *)node)->keyword_loc);
1811
+ yp_buffer_append_str(buffer, ", ", 2); if (((yp_while_node_t *)node)->closing_loc.start == NULL) {
1812
+ yp_buffer_append_str(buffer, "nil", 3);
1813
+ } else {
1814
+ prettyprint_location(buffer, parser, &((yp_while_node_t *)node)->closing_loc);
1815
+ }
1595
1816
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_node(buffer, parser, (yp_node_t *)((yp_while_node_t *)node)->predicate);
1596
1817
  yp_buffer_append_str(buffer, ", ", 2); if (((yp_while_node_t *)node)->statements == NULL) {
1597
1818
  yp_buffer_append_str(buffer, "nil", 3);
@@ -1610,7 +1831,7 @@ prettyprint_node(yp_buffer_t *buffer, yp_parser_t *parser, yp_node_t *node) {
1610
1831
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_x_string_node_t *)node)->content_loc);
1611
1832
  yp_buffer_append_str(buffer, ", ", 2); prettyprint_location(buffer, parser, &((yp_x_string_node_t *)node)->closing_loc);
1612
1833
  yp_buffer_append_str(buffer, ", ", 2); yp_buffer_append_str(buffer, "\"", 1);
1613
- yp_buffer_append_str(buffer, yp_string_source(&((yp_x_string_node_t *)node)->unescaped), yp_string_length(&((yp_x_string_node_t *)node)->unescaped));
1834
+ yp_buffer_append_bytes(buffer, yp_string_source(&((yp_x_string_node_t *)node)->unescaped), yp_string_length(&((yp_x_string_node_t *)node)->unescaped));
1614
1835
  yp_buffer_append_str(buffer, "\"", 1);
1615
1836
  yp_buffer_append_str(buffer, ")", 1);
1616
1837
  break;