prism 0.17.1 → 0.19.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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -1
  3. data/Makefile +5 -5
  4. data/README.md +4 -3
  5. data/config.yml +214 -68
  6. data/docs/build_system.md +6 -6
  7. data/docs/building.md +10 -3
  8. data/docs/configuration.md +11 -9
  9. data/docs/encoding.md +92 -88
  10. data/docs/heredocs.md +1 -1
  11. data/docs/javascript.md +29 -1
  12. data/docs/local_variable_depth.md +229 -0
  13. data/docs/ruby_api.md +16 -0
  14. data/docs/serialization.md +18 -13
  15. data/ext/prism/api_node.c +411 -240
  16. data/ext/prism/extconf.rb +97 -127
  17. data/ext/prism/extension.c +97 -33
  18. data/ext/prism/extension.h +1 -1
  19. data/include/prism/ast.h +377 -159
  20. data/include/prism/defines.h +17 -0
  21. data/include/prism/diagnostic.h +38 -6
  22. data/include/prism/{enc/pm_encoding.h → encoding.h} +126 -64
  23. data/include/prism/options.h +2 -2
  24. data/include/prism/parser.h +62 -36
  25. data/include/prism/regexp.h +2 -2
  26. data/include/prism/util/pm_buffer.h +9 -1
  27. data/include/prism/util/pm_memchr.h +2 -2
  28. data/include/prism/util/pm_strpbrk.h +3 -3
  29. data/include/prism/version.h +3 -3
  30. data/include/prism.h +13 -15
  31. data/lib/prism/compiler.rb +15 -3
  32. data/lib/prism/debug.rb +13 -4
  33. data/lib/prism/desugar_compiler.rb +4 -3
  34. data/lib/prism/dispatcher.rb +70 -14
  35. data/lib/prism/dot_visitor.rb +4612 -0
  36. data/lib/prism/dsl.rb +77 -57
  37. data/lib/prism/ffi.rb +19 -6
  38. data/lib/prism/lex_compat.rb +19 -9
  39. data/lib/prism/mutation_compiler.rb +26 -6
  40. data/lib/prism/node.rb +1314 -522
  41. data/lib/prism/node_ext.rb +102 -19
  42. data/lib/prism/parse_result.rb +58 -27
  43. data/lib/prism/ripper_compat.rb +49 -34
  44. data/lib/prism/serialize.rb +251 -227
  45. data/lib/prism/visitor.rb +15 -3
  46. data/lib/prism.rb +21 -4
  47. data/prism.gemspec +7 -9
  48. data/rbi/prism.rbi +688 -284
  49. data/rbi/prism_static.rbi +3 -0
  50. data/sig/prism.rbs +426 -156
  51. data/sig/prism_static.rbs +1 -0
  52. data/src/diagnostic.c +280 -216
  53. data/src/encoding.c +5137 -0
  54. data/src/node.c +99 -21
  55. data/src/options.c +21 -2
  56. data/src/prettyprint.c +1743 -1241
  57. data/src/prism.c +1774 -831
  58. data/src/regexp.c +15 -15
  59. data/src/serialize.c +261 -164
  60. data/src/util/pm_buffer.c +10 -1
  61. data/src/util/pm_memchr.c +1 -1
  62. data/src/util/pm_strpbrk.c +4 -4
  63. metadata +8 -10
  64. data/src/enc/pm_big5.c +0 -53
  65. data/src/enc/pm_euc_jp.c +0 -59
  66. data/src/enc/pm_gbk.c +0 -62
  67. data/src/enc/pm_shift_jis.c +0 -57
  68. data/src/enc/pm_tables.c +0 -743
  69. data/src/enc/pm_unicode.c +0 -2369
  70. data/src/enc/pm_windows_31j.c +0 -57
data/include/prism/ast.h CHANGED
@@ -631,374 +631,386 @@ enum pm_node_type {
631
631
  /** CallOrWriteNode */
632
632
  PM_CALL_OR_WRITE_NODE = 21,
633
633
 
634
+ /** CallTargetNode */
635
+ PM_CALL_TARGET_NODE = 22,
636
+
634
637
  /** CapturePatternNode */
635
- PM_CAPTURE_PATTERN_NODE = 22,
638
+ PM_CAPTURE_PATTERN_NODE = 23,
639
+
640
+ /** CaseMatchNode */
641
+ PM_CASE_MATCH_NODE = 24,
636
642
 
637
643
  /** CaseNode */
638
- PM_CASE_NODE = 23,
644
+ PM_CASE_NODE = 25,
639
645
 
640
646
  /** ClassNode */
641
- PM_CLASS_NODE = 24,
647
+ PM_CLASS_NODE = 26,
642
648
 
643
649
  /** ClassVariableAndWriteNode */
644
- PM_CLASS_VARIABLE_AND_WRITE_NODE = 25,
650
+ PM_CLASS_VARIABLE_AND_WRITE_NODE = 27,
645
651
 
646
652
  /** ClassVariableOperatorWriteNode */
647
- PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE = 26,
653
+ PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE = 28,
648
654
 
649
655
  /** ClassVariableOrWriteNode */
650
- PM_CLASS_VARIABLE_OR_WRITE_NODE = 27,
656
+ PM_CLASS_VARIABLE_OR_WRITE_NODE = 29,
651
657
 
652
658
  /** ClassVariableReadNode */
653
- PM_CLASS_VARIABLE_READ_NODE = 28,
659
+ PM_CLASS_VARIABLE_READ_NODE = 30,
654
660
 
655
661
  /** ClassVariableTargetNode */
656
- PM_CLASS_VARIABLE_TARGET_NODE = 29,
662
+ PM_CLASS_VARIABLE_TARGET_NODE = 31,
657
663
 
658
664
  /** ClassVariableWriteNode */
659
- PM_CLASS_VARIABLE_WRITE_NODE = 30,
665
+ PM_CLASS_VARIABLE_WRITE_NODE = 32,
660
666
 
661
667
  /** ConstantAndWriteNode */
662
- PM_CONSTANT_AND_WRITE_NODE = 31,
668
+ PM_CONSTANT_AND_WRITE_NODE = 33,
663
669
 
664
670
  /** ConstantOperatorWriteNode */
665
- PM_CONSTANT_OPERATOR_WRITE_NODE = 32,
671
+ PM_CONSTANT_OPERATOR_WRITE_NODE = 34,
666
672
 
667
673
  /** ConstantOrWriteNode */
668
- PM_CONSTANT_OR_WRITE_NODE = 33,
674
+ PM_CONSTANT_OR_WRITE_NODE = 35,
669
675
 
670
676
  /** ConstantPathAndWriteNode */
671
- PM_CONSTANT_PATH_AND_WRITE_NODE = 34,
677
+ PM_CONSTANT_PATH_AND_WRITE_NODE = 36,
672
678
 
673
679
  /** ConstantPathNode */
674
- PM_CONSTANT_PATH_NODE = 35,
680
+ PM_CONSTANT_PATH_NODE = 37,
675
681
 
676
682
  /** ConstantPathOperatorWriteNode */
677
- PM_CONSTANT_PATH_OPERATOR_WRITE_NODE = 36,
683
+ PM_CONSTANT_PATH_OPERATOR_WRITE_NODE = 38,
678
684
 
679
685
  /** ConstantPathOrWriteNode */
680
- PM_CONSTANT_PATH_OR_WRITE_NODE = 37,
686
+ PM_CONSTANT_PATH_OR_WRITE_NODE = 39,
681
687
 
682
688
  /** ConstantPathTargetNode */
683
- PM_CONSTANT_PATH_TARGET_NODE = 38,
689
+ PM_CONSTANT_PATH_TARGET_NODE = 40,
684
690
 
685
691
  /** ConstantPathWriteNode */
686
- PM_CONSTANT_PATH_WRITE_NODE = 39,
692
+ PM_CONSTANT_PATH_WRITE_NODE = 41,
687
693
 
688
694
  /** ConstantReadNode */
689
- PM_CONSTANT_READ_NODE = 40,
695
+ PM_CONSTANT_READ_NODE = 42,
690
696
 
691
697
  /** ConstantTargetNode */
692
- PM_CONSTANT_TARGET_NODE = 41,
698
+ PM_CONSTANT_TARGET_NODE = 43,
693
699
 
694
700
  /** ConstantWriteNode */
695
- PM_CONSTANT_WRITE_NODE = 42,
701
+ PM_CONSTANT_WRITE_NODE = 44,
696
702
 
697
703
  /** DefNode */
698
- PM_DEF_NODE = 43,
704
+ PM_DEF_NODE = 45,
699
705
 
700
706
  /** DefinedNode */
701
- PM_DEFINED_NODE = 44,
707
+ PM_DEFINED_NODE = 46,
702
708
 
703
709
  /** ElseNode */
704
- PM_ELSE_NODE = 45,
710
+ PM_ELSE_NODE = 47,
705
711
 
706
712
  /** EmbeddedStatementsNode */
707
- PM_EMBEDDED_STATEMENTS_NODE = 46,
713
+ PM_EMBEDDED_STATEMENTS_NODE = 48,
708
714
 
709
715
  /** EmbeddedVariableNode */
710
- PM_EMBEDDED_VARIABLE_NODE = 47,
716
+ PM_EMBEDDED_VARIABLE_NODE = 49,
711
717
 
712
718
  /** EnsureNode */
713
- PM_ENSURE_NODE = 48,
719
+ PM_ENSURE_NODE = 50,
714
720
 
715
721
  /** FalseNode */
716
- PM_FALSE_NODE = 49,
722
+ PM_FALSE_NODE = 51,
717
723
 
718
724
  /** FindPatternNode */
719
- PM_FIND_PATTERN_NODE = 50,
725
+ PM_FIND_PATTERN_NODE = 52,
720
726
 
721
727
  /** FlipFlopNode */
722
- PM_FLIP_FLOP_NODE = 51,
728
+ PM_FLIP_FLOP_NODE = 53,
723
729
 
724
730
  /** FloatNode */
725
- PM_FLOAT_NODE = 52,
731
+ PM_FLOAT_NODE = 54,
726
732
 
727
733
  /** ForNode */
728
- PM_FOR_NODE = 53,
734
+ PM_FOR_NODE = 55,
729
735
 
730
736
  /** ForwardingArgumentsNode */
731
- PM_FORWARDING_ARGUMENTS_NODE = 54,
737
+ PM_FORWARDING_ARGUMENTS_NODE = 56,
732
738
 
733
739
  /** ForwardingParameterNode */
734
- PM_FORWARDING_PARAMETER_NODE = 55,
740
+ PM_FORWARDING_PARAMETER_NODE = 57,
735
741
 
736
742
  /** ForwardingSuperNode */
737
- PM_FORWARDING_SUPER_NODE = 56,
743
+ PM_FORWARDING_SUPER_NODE = 58,
738
744
 
739
745
  /** GlobalVariableAndWriteNode */
740
- PM_GLOBAL_VARIABLE_AND_WRITE_NODE = 57,
746
+ PM_GLOBAL_VARIABLE_AND_WRITE_NODE = 59,
741
747
 
742
748
  /** GlobalVariableOperatorWriteNode */
743
- PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE = 58,
749
+ PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE = 60,
744
750
 
745
751
  /** GlobalVariableOrWriteNode */
746
- PM_GLOBAL_VARIABLE_OR_WRITE_NODE = 59,
752
+ PM_GLOBAL_VARIABLE_OR_WRITE_NODE = 61,
747
753
 
748
754
  /** GlobalVariableReadNode */
749
- PM_GLOBAL_VARIABLE_READ_NODE = 60,
755
+ PM_GLOBAL_VARIABLE_READ_NODE = 62,
750
756
 
751
757
  /** GlobalVariableTargetNode */
752
- PM_GLOBAL_VARIABLE_TARGET_NODE = 61,
758
+ PM_GLOBAL_VARIABLE_TARGET_NODE = 63,
753
759
 
754
760
  /** GlobalVariableWriteNode */
755
- PM_GLOBAL_VARIABLE_WRITE_NODE = 62,
761
+ PM_GLOBAL_VARIABLE_WRITE_NODE = 64,
756
762
 
757
763
  /** HashNode */
758
- PM_HASH_NODE = 63,
764
+ PM_HASH_NODE = 65,
759
765
 
760
766
  /** HashPatternNode */
761
- PM_HASH_PATTERN_NODE = 64,
767
+ PM_HASH_PATTERN_NODE = 66,
762
768
 
763
769
  /** IfNode */
764
- PM_IF_NODE = 65,
770
+ PM_IF_NODE = 67,
765
771
 
766
772
  /** ImaginaryNode */
767
- PM_IMAGINARY_NODE = 66,
773
+ PM_IMAGINARY_NODE = 68,
768
774
 
769
775
  /** ImplicitNode */
770
- PM_IMPLICIT_NODE = 67,
776
+ PM_IMPLICIT_NODE = 69,
777
+
778
+ /** ImplicitRestNode */
779
+ PM_IMPLICIT_REST_NODE = 70,
771
780
 
772
781
  /** InNode */
773
- PM_IN_NODE = 68,
782
+ PM_IN_NODE = 71,
774
783
 
775
784
  /** IndexAndWriteNode */
776
- PM_INDEX_AND_WRITE_NODE = 69,
785
+ PM_INDEX_AND_WRITE_NODE = 72,
777
786
 
778
787
  /** IndexOperatorWriteNode */
779
- PM_INDEX_OPERATOR_WRITE_NODE = 70,
788
+ PM_INDEX_OPERATOR_WRITE_NODE = 73,
780
789
 
781
790
  /** IndexOrWriteNode */
782
- PM_INDEX_OR_WRITE_NODE = 71,
791
+ PM_INDEX_OR_WRITE_NODE = 74,
792
+
793
+ /** IndexTargetNode */
794
+ PM_INDEX_TARGET_NODE = 75,
783
795
 
784
796
  /** InstanceVariableAndWriteNode */
785
- PM_INSTANCE_VARIABLE_AND_WRITE_NODE = 72,
797
+ PM_INSTANCE_VARIABLE_AND_WRITE_NODE = 76,
786
798
 
787
799
  /** InstanceVariableOperatorWriteNode */
788
- PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE = 73,
800
+ PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE = 77,
789
801
 
790
802
  /** InstanceVariableOrWriteNode */
791
- PM_INSTANCE_VARIABLE_OR_WRITE_NODE = 74,
803
+ PM_INSTANCE_VARIABLE_OR_WRITE_NODE = 78,
792
804
 
793
805
  /** InstanceVariableReadNode */
794
- PM_INSTANCE_VARIABLE_READ_NODE = 75,
806
+ PM_INSTANCE_VARIABLE_READ_NODE = 79,
795
807
 
796
808
  /** InstanceVariableTargetNode */
797
- PM_INSTANCE_VARIABLE_TARGET_NODE = 76,
809
+ PM_INSTANCE_VARIABLE_TARGET_NODE = 80,
798
810
 
799
811
  /** InstanceVariableWriteNode */
800
- PM_INSTANCE_VARIABLE_WRITE_NODE = 77,
812
+ PM_INSTANCE_VARIABLE_WRITE_NODE = 81,
801
813
 
802
814
  /** IntegerNode */
803
- PM_INTEGER_NODE = 78,
815
+ PM_INTEGER_NODE = 82,
804
816
 
805
817
  /** InterpolatedMatchLastLineNode */
806
- PM_INTERPOLATED_MATCH_LAST_LINE_NODE = 79,
818
+ PM_INTERPOLATED_MATCH_LAST_LINE_NODE = 83,
807
819
 
808
820
  /** InterpolatedRegularExpressionNode */
809
- PM_INTERPOLATED_REGULAR_EXPRESSION_NODE = 80,
821
+ PM_INTERPOLATED_REGULAR_EXPRESSION_NODE = 84,
810
822
 
811
823
  /** InterpolatedStringNode */
812
- PM_INTERPOLATED_STRING_NODE = 81,
824
+ PM_INTERPOLATED_STRING_NODE = 85,
813
825
 
814
826
  /** InterpolatedSymbolNode */
815
- PM_INTERPOLATED_SYMBOL_NODE = 82,
827
+ PM_INTERPOLATED_SYMBOL_NODE = 86,
816
828
 
817
829
  /** InterpolatedXStringNode */
818
- PM_INTERPOLATED_X_STRING_NODE = 83,
830
+ PM_INTERPOLATED_X_STRING_NODE = 87,
819
831
 
820
832
  /** KeywordHashNode */
821
- PM_KEYWORD_HASH_NODE = 84,
833
+ PM_KEYWORD_HASH_NODE = 88,
822
834
 
823
835
  /** KeywordRestParameterNode */
824
- PM_KEYWORD_REST_PARAMETER_NODE = 85,
836
+ PM_KEYWORD_REST_PARAMETER_NODE = 89,
825
837
 
826
838
  /** LambdaNode */
827
- PM_LAMBDA_NODE = 86,
839
+ PM_LAMBDA_NODE = 90,
828
840
 
829
841
  /** LocalVariableAndWriteNode */
830
- PM_LOCAL_VARIABLE_AND_WRITE_NODE = 87,
842
+ PM_LOCAL_VARIABLE_AND_WRITE_NODE = 91,
831
843
 
832
844
  /** LocalVariableOperatorWriteNode */
833
- PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 88,
845
+ PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 92,
834
846
 
835
847
  /** LocalVariableOrWriteNode */
836
- PM_LOCAL_VARIABLE_OR_WRITE_NODE = 89,
848
+ PM_LOCAL_VARIABLE_OR_WRITE_NODE = 93,
837
849
 
838
850
  /** LocalVariableReadNode */
839
- PM_LOCAL_VARIABLE_READ_NODE = 90,
851
+ PM_LOCAL_VARIABLE_READ_NODE = 94,
840
852
 
841
853
  /** LocalVariableTargetNode */
842
- PM_LOCAL_VARIABLE_TARGET_NODE = 91,
854
+ PM_LOCAL_VARIABLE_TARGET_NODE = 95,
843
855
 
844
856
  /** LocalVariableWriteNode */
845
- PM_LOCAL_VARIABLE_WRITE_NODE = 92,
857
+ PM_LOCAL_VARIABLE_WRITE_NODE = 96,
846
858
 
847
859
  /** MatchLastLineNode */
848
- PM_MATCH_LAST_LINE_NODE = 93,
860
+ PM_MATCH_LAST_LINE_NODE = 97,
849
861
 
850
862
  /** MatchPredicateNode */
851
- PM_MATCH_PREDICATE_NODE = 94,
863
+ PM_MATCH_PREDICATE_NODE = 98,
852
864
 
853
865
  /** MatchRequiredNode */
854
- PM_MATCH_REQUIRED_NODE = 95,
866
+ PM_MATCH_REQUIRED_NODE = 99,
855
867
 
856
868
  /** MatchWriteNode */
857
- PM_MATCH_WRITE_NODE = 96,
869
+ PM_MATCH_WRITE_NODE = 100,
858
870
 
859
871
  /** MissingNode */
860
- PM_MISSING_NODE = 97,
872
+ PM_MISSING_NODE = 101,
861
873
 
862
874
  /** ModuleNode */
863
- PM_MODULE_NODE = 98,
875
+ PM_MODULE_NODE = 102,
864
876
 
865
877
  /** MultiTargetNode */
866
- PM_MULTI_TARGET_NODE = 99,
878
+ PM_MULTI_TARGET_NODE = 103,
867
879
 
868
880
  /** MultiWriteNode */
869
- PM_MULTI_WRITE_NODE = 100,
881
+ PM_MULTI_WRITE_NODE = 104,
870
882
 
871
883
  /** NextNode */
872
- PM_NEXT_NODE = 101,
884
+ PM_NEXT_NODE = 105,
873
885
 
874
886
  /** NilNode */
875
- PM_NIL_NODE = 102,
887
+ PM_NIL_NODE = 106,
876
888
 
877
889
  /** NoKeywordsParameterNode */
878
- PM_NO_KEYWORDS_PARAMETER_NODE = 103,
890
+ PM_NO_KEYWORDS_PARAMETER_NODE = 107,
891
+
892
+ /** NumberedParametersNode */
893
+ PM_NUMBERED_PARAMETERS_NODE = 108,
879
894
 
880
895
  /** NumberedReferenceReadNode */
881
- PM_NUMBERED_REFERENCE_READ_NODE = 104,
896
+ PM_NUMBERED_REFERENCE_READ_NODE = 109,
882
897
 
883
898
  /** OptionalKeywordParameterNode */
884
- PM_OPTIONAL_KEYWORD_PARAMETER_NODE = 105,
899
+ PM_OPTIONAL_KEYWORD_PARAMETER_NODE = 110,
885
900
 
886
901
  /** OptionalParameterNode */
887
- PM_OPTIONAL_PARAMETER_NODE = 106,
902
+ PM_OPTIONAL_PARAMETER_NODE = 111,
888
903
 
889
904
  /** OrNode */
890
- PM_OR_NODE = 107,
905
+ PM_OR_NODE = 112,
891
906
 
892
907
  /** ParametersNode */
893
- PM_PARAMETERS_NODE = 108,
908
+ PM_PARAMETERS_NODE = 113,
894
909
 
895
910
  /** ParenthesesNode */
896
- PM_PARENTHESES_NODE = 109,
911
+ PM_PARENTHESES_NODE = 114,
897
912
 
898
913
  /** PinnedExpressionNode */
899
- PM_PINNED_EXPRESSION_NODE = 110,
914
+ PM_PINNED_EXPRESSION_NODE = 115,
900
915
 
901
916
  /** PinnedVariableNode */
902
- PM_PINNED_VARIABLE_NODE = 111,
917
+ PM_PINNED_VARIABLE_NODE = 116,
903
918
 
904
919
  /** PostExecutionNode */
905
- PM_POST_EXECUTION_NODE = 112,
920
+ PM_POST_EXECUTION_NODE = 117,
906
921
 
907
922
  /** PreExecutionNode */
908
- PM_PRE_EXECUTION_NODE = 113,
923
+ PM_PRE_EXECUTION_NODE = 118,
909
924
 
910
925
  /** ProgramNode */
911
- PM_PROGRAM_NODE = 114,
926
+ PM_PROGRAM_NODE = 119,
912
927
 
913
928
  /** RangeNode */
914
- PM_RANGE_NODE = 115,
929
+ PM_RANGE_NODE = 120,
915
930
 
916
931
  /** RationalNode */
917
- PM_RATIONAL_NODE = 116,
932
+ PM_RATIONAL_NODE = 121,
918
933
 
919
934
  /** RedoNode */
920
- PM_REDO_NODE = 117,
935
+ PM_REDO_NODE = 122,
921
936
 
922
937
  /** RegularExpressionNode */
923
- PM_REGULAR_EXPRESSION_NODE = 118,
938
+ PM_REGULAR_EXPRESSION_NODE = 123,
924
939
 
925
940
  /** RequiredKeywordParameterNode */
926
- PM_REQUIRED_KEYWORD_PARAMETER_NODE = 119,
941
+ PM_REQUIRED_KEYWORD_PARAMETER_NODE = 124,
927
942
 
928
943
  /** RequiredParameterNode */
929
- PM_REQUIRED_PARAMETER_NODE = 120,
944
+ PM_REQUIRED_PARAMETER_NODE = 125,
930
945
 
931
946
  /** RescueModifierNode */
932
- PM_RESCUE_MODIFIER_NODE = 121,
947
+ PM_RESCUE_MODIFIER_NODE = 126,
933
948
 
934
949
  /** RescueNode */
935
- PM_RESCUE_NODE = 122,
950
+ PM_RESCUE_NODE = 127,
936
951
 
937
952
  /** RestParameterNode */
938
- PM_REST_PARAMETER_NODE = 123,
953
+ PM_REST_PARAMETER_NODE = 128,
939
954
 
940
955
  /** RetryNode */
941
- PM_RETRY_NODE = 124,
956
+ PM_RETRY_NODE = 129,
942
957
 
943
958
  /** ReturnNode */
944
- PM_RETURN_NODE = 125,
959
+ PM_RETURN_NODE = 130,
945
960
 
946
961
  /** SelfNode */
947
- PM_SELF_NODE = 126,
962
+ PM_SELF_NODE = 131,
948
963
 
949
964
  /** SingletonClassNode */
950
- PM_SINGLETON_CLASS_NODE = 127,
965
+ PM_SINGLETON_CLASS_NODE = 132,
951
966
 
952
967
  /** SourceEncodingNode */
953
- PM_SOURCE_ENCODING_NODE = 128,
968
+ PM_SOURCE_ENCODING_NODE = 133,
954
969
 
955
970
  /** SourceFileNode */
956
- PM_SOURCE_FILE_NODE = 129,
971
+ PM_SOURCE_FILE_NODE = 134,
957
972
 
958
973
  /** SourceLineNode */
959
- PM_SOURCE_LINE_NODE = 130,
974
+ PM_SOURCE_LINE_NODE = 135,
960
975
 
961
976
  /** SplatNode */
962
- PM_SPLAT_NODE = 131,
977
+ PM_SPLAT_NODE = 136,
963
978
 
964
979
  /** StatementsNode */
965
- PM_STATEMENTS_NODE = 132,
966
-
967
- /** StringConcatNode */
968
- PM_STRING_CONCAT_NODE = 133,
980
+ PM_STATEMENTS_NODE = 137,
969
981
 
970
982
  /** StringNode */
971
- PM_STRING_NODE = 134,
983
+ PM_STRING_NODE = 138,
972
984
 
973
985
  /** SuperNode */
974
- PM_SUPER_NODE = 135,
986
+ PM_SUPER_NODE = 139,
975
987
 
976
988
  /** SymbolNode */
977
- PM_SYMBOL_NODE = 136,
989
+ PM_SYMBOL_NODE = 140,
978
990
 
979
991
  /** TrueNode */
980
- PM_TRUE_NODE = 137,
992
+ PM_TRUE_NODE = 141,
981
993
 
982
994
  /** UndefNode */
983
- PM_UNDEF_NODE = 138,
995
+ PM_UNDEF_NODE = 142,
984
996
 
985
997
  /** UnlessNode */
986
- PM_UNLESS_NODE = 139,
998
+ PM_UNLESS_NODE = 143,
987
999
 
988
1000
  /** UntilNode */
989
- PM_UNTIL_NODE = 140,
1001
+ PM_UNTIL_NODE = 144,
990
1002
 
991
1003
  /** WhenNode */
992
- PM_WHEN_NODE = 141,
1004
+ PM_WHEN_NODE = 145,
993
1005
 
994
1006
  /** WhileNode */
995
- PM_WHILE_NODE = 142,
1007
+ PM_WHILE_NODE = 146,
996
1008
 
997
1009
  /** XStringNode */
998
- PM_X_STRING_NODE = 143,
1010
+ PM_X_STRING_NODE = 147,
999
1011
 
1000
1012
  /** YieldNode */
1001
- PM_YIELD_NODE = 144,
1013
+ PM_YIELD_NODE = 148,
1002
1014
 
1003
1015
  /** A special kind of node used for compilation. */
1004
1016
  PM_SCOPE_NODE
@@ -1037,6 +1049,11 @@ static const pm_node_flags_t PM_NODE_FLAG_COMMON_MASK = (1 << (PM_NODE_FLAG_BITS
1037
1049
  */
1038
1050
  #define PM_NODE_TYPE_P(node, type) (PM_NODE_TYPE(node) == (type))
1039
1051
 
1052
+ /**
1053
+ * Return true if the given flag is set on the given node.
1054
+ */
1055
+ #define PM_NODE_FLAG_P(node, flag) ((((pm_node_t *)(node))->flags & (flag)) != 0)
1056
+
1040
1057
  /**
1041
1058
  * This is the base structure that represents a node in the syntax tree. It is
1042
1059
  * embedded into every node type.
@@ -1150,7 +1167,7 @@ typedef struct pm_and_node {
1150
1167
  *
1151
1168
  * Type: PM_ARGUMENTS_NODE
1152
1169
  * Flags:
1153
- * PM_ARGUMENTS_NODE_FLAGS_KEYWORD_SPLAT
1170
+ * PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT
1154
1171
  *
1155
1172
  * @extends pm_node_t
1156
1173
  */
@@ -1166,6 +1183,8 @@ typedef struct pm_arguments_node {
1166
1183
  * ArrayNode
1167
1184
  *
1168
1185
  * Type: PM_ARRAY_NODE
1186
+ * Flags:
1187
+ * PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT
1169
1188
  *
1170
1189
  * @extends pm_node_t
1171
1190
  */
@@ -1344,8 +1363,11 @@ typedef struct pm_block_node {
1344
1363
  /** BlockNode#locals */
1345
1364
  pm_constant_id_list_t locals;
1346
1365
 
1366
+ /** BlockNode#locals_body_index */
1367
+ uint32_t locals_body_index;
1368
+
1347
1369
  /** BlockNode#parameters */
1348
- struct pm_block_parameters_node *parameters;
1370
+ struct pm_node *parameters;
1349
1371
 
1350
1372
  /** BlockNode#body */
1351
1373
  struct pm_node *body;
@@ -1427,6 +1449,7 @@ typedef struct pm_break_node {
1427
1449
  * Flags:
1428
1450
  * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1429
1451
  * PM_CALL_NODE_FLAGS_VARIABLE_CALL
1452
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1430
1453
  *
1431
1454
  * @extends pm_node_t
1432
1455
  */
@@ -1463,6 +1486,7 @@ typedef struct pm_call_and_write_node {
1463
1486
  * Flags:
1464
1487
  * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1465
1488
  * PM_CALL_NODE_FLAGS_VARIABLE_CALL
1489
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1466
1490
  *
1467
1491
  * @extends pm_node_t
1468
1492
  */
@@ -1476,6 +1500,9 @@ typedef struct pm_call_node {
1476
1500
  /** CallNode#call_operator_loc */
1477
1501
  pm_location_t call_operator_loc;
1478
1502
 
1503
+ /** CallNode#name */
1504
+ pm_constant_id_t name;
1505
+
1479
1506
  /** CallNode#message_loc */
1480
1507
  pm_location_t message_loc;
1481
1508
 
@@ -1490,9 +1517,6 @@ typedef struct pm_call_node {
1490
1517
 
1491
1518
  /** CallNode#block */
1492
1519
  struct pm_node *block;
1493
-
1494
- /** CallNode#name */
1495
- pm_constant_id_t name;
1496
1520
  } pm_call_node_t;
1497
1521
 
1498
1522
  /**
@@ -1502,6 +1526,7 @@ typedef struct pm_call_node {
1502
1526
  * Flags:
1503
1527
  * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1504
1528
  * PM_CALL_NODE_FLAGS_VARIABLE_CALL
1529
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1505
1530
  *
1506
1531
  * @extends pm_node_t
1507
1532
  */
@@ -1541,6 +1566,7 @@ typedef struct pm_call_operator_write_node {
1541
1566
  * Flags:
1542
1567
  * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1543
1568
  * PM_CALL_NODE_FLAGS_VARIABLE_CALL
1569
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1544
1570
  *
1545
1571
  * @extends pm_node_t
1546
1572
  */
@@ -1570,6 +1596,34 @@ typedef struct pm_call_or_write_node {
1570
1596
  struct pm_node *value;
1571
1597
  } pm_call_or_write_node_t;
1572
1598
 
1599
+ /**
1600
+ * CallTargetNode
1601
+ *
1602
+ * Type: PM_CALL_TARGET_NODE
1603
+ * Flags:
1604
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1605
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
1606
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1607
+ *
1608
+ * @extends pm_node_t
1609
+ */
1610
+ typedef struct pm_call_target_node {
1611
+ /** The embedded base node. */
1612
+ pm_node_t base;
1613
+
1614
+ /** CallTargetNode#receiver */
1615
+ struct pm_node *receiver;
1616
+
1617
+ /** CallTargetNode#call_operator_loc */
1618
+ pm_location_t call_operator_loc;
1619
+
1620
+ /** CallTargetNode#name */
1621
+ pm_constant_id_t name;
1622
+
1623
+ /** CallTargetNode#message_loc */
1624
+ pm_location_t message_loc;
1625
+ } pm_call_target_node_t;
1626
+
1573
1627
  /**
1574
1628
  * CapturePatternNode
1575
1629
  *
@@ -1591,6 +1645,33 @@ typedef struct pm_capture_pattern_node {
1591
1645
  pm_location_t operator_loc;
1592
1646
  } pm_capture_pattern_node_t;
1593
1647
 
1648
+ /**
1649
+ * CaseMatchNode
1650
+ *
1651
+ * Type: PM_CASE_MATCH_NODE
1652
+ *
1653
+ * @extends pm_node_t
1654
+ */
1655
+ typedef struct pm_case_match_node {
1656
+ /** The embedded base node. */
1657
+ pm_node_t base;
1658
+
1659
+ /** CaseMatchNode#predicate */
1660
+ struct pm_node *predicate;
1661
+
1662
+ /** CaseMatchNode#conditions */
1663
+ struct pm_node_list conditions;
1664
+
1665
+ /** CaseMatchNode#consequent */
1666
+ struct pm_else_node *consequent;
1667
+
1668
+ /** CaseMatchNode#case_keyword_loc */
1669
+ pm_location_t case_keyword_loc;
1670
+
1671
+ /** CaseMatchNode#end_keyword_loc */
1672
+ pm_location_t end_keyword_loc;
1673
+ } pm_case_match_node_t;
1674
+
1594
1675
  /**
1595
1676
  * CaseNode
1596
1677
  *
@@ -2070,6 +2151,9 @@ typedef struct pm_def_node {
2070
2151
  /** DefNode#locals */
2071
2152
  pm_constant_id_list_t locals;
2072
2153
 
2154
+ /** DefNode#locals_body_index */
2155
+ uint32_t locals_body_index;
2156
+
2073
2157
  /** DefNode#def_keyword_loc */
2074
2158
  pm_location_t def_keyword_loc;
2075
2159
 
@@ -2537,6 +2621,9 @@ typedef struct pm_if_node {
2537
2621
  /** IfNode#predicate */
2538
2622
  struct pm_node *predicate;
2539
2623
 
2624
+ /** IfNode#then_keyword_loc */
2625
+ pm_location_t then_keyword_loc;
2626
+
2540
2627
  /** IfNode#statements */
2541
2628
  struct pm_statements_node *statements;
2542
2629
 
@@ -2577,6 +2664,18 @@ typedef struct pm_implicit_node {
2577
2664
  struct pm_node *value;
2578
2665
  } pm_implicit_node_t;
2579
2666
 
2667
+ /**
2668
+ * ImplicitRestNode
2669
+ *
2670
+ * Type: PM_IMPLICIT_REST_NODE
2671
+ *
2672
+ * @extends pm_node_t
2673
+ */
2674
+ typedef struct pm_implicit_rest_node {
2675
+ /** The embedded base node. */
2676
+ pm_node_t base;
2677
+ } pm_implicit_rest_node_t;
2678
+
2580
2679
  /**
2581
2680
  * InNode
2582
2681
  *
@@ -2608,6 +2707,7 @@ typedef struct pm_in_node {
2608
2707
  * Flags:
2609
2708
  * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
2610
2709
  * PM_CALL_NODE_FLAGS_VARIABLE_CALL
2710
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
2611
2711
  *
2612
2712
  * @extends pm_node_t
2613
2713
  */
@@ -2647,6 +2747,7 @@ typedef struct pm_index_and_write_node {
2647
2747
  * Flags:
2648
2748
  * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
2649
2749
  * PM_CALL_NODE_FLAGS_VARIABLE_CALL
2750
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
2650
2751
  *
2651
2752
  * @extends pm_node_t
2652
2753
  */
@@ -2689,6 +2790,7 @@ typedef struct pm_index_operator_write_node {
2689
2790
  * Flags:
2690
2791
  * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
2691
2792
  * PM_CALL_NODE_FLAGS_VARIABLE_CALL
2793
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
2692
2794
  *
2693
2795
  * @extends pm_node_t
2694
2796
  */
@@ -2721,6 +2823,37 @@ typedef struct pm_index_or_write_node {
2721
2823
  struct pm_node *value;
2722
2824
  } pm_index_or_write_node_t;
2723
2825
 
2826
+ /**
2827
+ * IndexTargetNode
2828
+ *
2829
+ * Type: PM_INDEX_TARGET_NODE
2830
+ * Flags:
2831
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
2832
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
2833
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
2834
+ *
2835
+ * @extends pm_node_t
2836
+ */
2837
+ typedef struct pm_index_target_node {
2838
+ /** The embedded base node. */
2839
+ pm_node_t base;
2840
+
2841
+ /** IndexTargetNode#receiver */
2842
+ struct pm_node *receiver;
2843
+
2844
+ /** IndexTargetNode#opening_loc */
2845
+ pm_location_t opening_loc;
2846
+
2847
+ /** IndexTargetNode#arguments */
2848
+ struct pm_arguments_node *arguments;
2849
+
2850
+ /** IndexTargetNode#closing_loc */
2851
+ pm_location_t closing_loc;
2852
+
2853
+ /** IndexTargetNode#block */
2854
+ struct pm_node *block;
2855
+ } pm_index_target_node_t;
2856
+
2724
2857
  /**
2725
2858
  * InstanceVariableAndWriteNode
2726
2859
  *
@@ -2856,8 +2989,8 @@ typedef struct pm_instance_variable_write_node {
2856
2989
  * Type: PM_INTEGER_NODE
2857
2990
  * Flags:
2858
2991
  * PM_INTEGER_BASE_FLAGS_BINARY
2859
- * PM_INTEGER_BASE_FLAGS_OCTAL
2860
2992
  * PM_INTEGER_BASE_FLAGS_DECIMAL
2993
+ * PM_INTEGER_BASE_FLAGS_OCTAL
2861
2994
  * PM_INTEGER_BASE_FLAGS_HEXADECIMAL
2862
2995
  *
2863
2996
  * @extends pm_node_t
@@ -2880,6 +3013,9 @@ typedef struct pm_integer_node {
2880
3013
  * PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
2881
3014
  * PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
2882
3015
  * PM_REGULAR_EXPRESSION_FLAGS_UTF_8
3016
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
3017
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
3018
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
2883
3019
  *
2884
3020
  * @extends pm_node_t
2885
3021
  */
@@ -2910,6 +3046,9 @@ typedef struct pm_interpolated_match_last_line_node {
2910
3046
  * PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
2911
3047
  * PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
2912
3048
  * PM_REGULAR_EXPRESSION_FLAGS_UTF_8
3049
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
3050
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
3051
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
2913
3052
  *
2914
3053
  * @extends pm_node_t
2915
3054
  */
@@ -2994,6 +3133,8 @@ typedef struct pm_interpolated_x_string_node {
2994
3133
  * KeywordHashNode
2995
3134
  *
2996
3135
  * Type: PM_KEYWORD_HASH_NODE
3136
+ * Flags:
3137
+ * PM_KEYWORD_HASH_NODE_FLAGS_STATIC_KEYS
2997
3138
  *
2998
3139
  * @extends pm_node_t
2999
3140
  */
@@ -3040,6 +3181,9 @@ typedef struct pm_lambda_node {
3040
3181
  /** LambdaNode#locals */
3041
3182
  pm_constant_id_list_t locals;
3042
3183
 
3184
+ /** LambdaNode#locals_body_index */
3185
+ uint32_t locals_body_index;
3186
+
3043
3187
  /** LambdaNode#operator_loc */
3044
3188
  pm_location_t operator_loc;
3045
3189
 
@@ -3050,7 +3194,7 @@ typedef struct pm_lambda_node {
3050
3194
  pm_location_t closing_loc;
3051
3195
 
3052
3196
  /** LambdaNode#parameters */
3053
- struct pm_block_parameters_node *parameters;
3197
+ struct pm_node *parameters;
3054
3198
 
3055
3199
  /** LambdaNode#body */
3056
3200
  struct pm_node *body;
@@ -3216,6 +3360,9 @@ typedef struct pm_local_variable_write_node {
3216
3360
  * PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
3217
3361
  * PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
3218
3362
  * PM_REGULAR_EXPRESSION_FLAGS_UTF_8
3363
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
3364
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
3365
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
3219
3366
  *
3220
3367
  * @extends pm_node_t
3221
3368
  */
@@ -3292,8 +3439,8 @@ typedef struct pm_match_write_node {
3292
3439
  /** MatchWriteNode#call */
3293
3440
  struct pm_call_node *call;
3294
3441
 
3295
- /** MatchWriteNode#locals */
3296
- pm_constant_id_list_t locals;
3442
+ /** MatchWriteNode#targets */
3443
+ struct pm_node_list targets;
3297
3444
  } pm_match_write_node_t;
3298
3445
 
3299
3446
  /**
@@ -3446,6 +3593,21 @@ typedef struct pm_no_keywords_parameter_node {
3446
3593
  pm_location_t keyword_loc;
3447
3594
  } pm_no_keywords_parameter_node_t;
3448
3595
 
3596
+ /**
3597
+ * NumberedParametersNode
3598
+ *
3599
+ * Type: PM_NUMBERED_PARAMETERS_NODE
3600
+ *
3601
+ * @extends pm_node_t
3602
+ */
3603
+ typedef struct pm_numbered_parameters_node {
3604
+ /** The embedded base node. */
3605
+ pm_node_t base;
3606
+
3607
+ /** NumberedParametersNode#maximum */
3608
+ uint8_t maximum;
3609
+ } pm_numbered_parameters_node_t;
3610
+
3449
3611
  /**
3450
3612
  * NumberedReferenceReadNode
3451
3613
  *
@@ -3545,7 +3707,7 @@ typedef struct pm_parameters_node {
3545
3707
  struct pm_node_list optionals;
3546
3708
 
3547
3709
  /** ParametersNode#rest */
3548
- struct pm_rest_parameter_node *rest;
3710
+ struct pm_node *rest;
3549
3711
 
3550
3712
  /** ParametersNode#posts */
3551
3713
  struct pm_node_list posts;
@@ -3752,6 +3914,9 @@ typedef struct pm_redo_node {
3752
3914
  * PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
3753
3915
  * PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
3754
3916
  * PM_REGULAR_EXPRESSION_FLAGS_UTF_8
3917
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
3918
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
3919
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
3755
3920
  *
3756
3921
  * @extends pm_node_t
3757
3922
  */
@@ -4021,29 +4186,13 @@ typedef struct pm_statements_node {
4021
4186
  struct pm_node_list body;
4022
4187
  } pm_statements_node_t;
4023
4188
 
4024
- /**
4025
- * StringConcatNode
4026
- *
4027
- * Type: PM_STRING_CONCAT_NODE
4028
- *
4029
- * @extends pm_node_t
4030
- */
4031
- typedef struct pm_string_concat_node {
4032
- /** The embedded base node. */
4033
- pm_node_t base;
4034
-
4035
- /** StringConcatNode#left */
4036
- struct pm_node *left;
4037
-
4038
- /** StringConcatNode#right */
4039
- struct pm_node *right;
4040
- } pm_string_concat_node_t;
4041
-
4042
4189
  /**
4043
4190
  * StringNode
4044
4191
  *
4045
4192
  * Type: PM_STRING_NODE
4046
4193
  * Flags:
4194
+ * PM_STRING_FLAGS_FORCED_UTF8_ENCODING
4195
+ * PM_STRING_FLAGS_FORCED_BINARY_ENCODING
4047
4196
  * PM_STRING_FLAGS_FROZEN
4048
4197
  *
4049
4198
  * @extends pm_node_t
@@ -4096,6 +4245,10 @@ typedef struct pm_super_node {
4096
4245
  * SymbolNode
4097
4246
  *
4098
4247
  * Type: PM_SYMBOL_NODE
4248
+ * Flags:
4249
+ * PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING
4250
+ * PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING
4251
+ * PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING
4099
4252
  *
4100
4253
  * @extends pm_node_t
4101
4254
  */
@@ -4163,6 +4316,9 @@ typedef struct pm_unless_node {
4163
4316
  /** UnlessNode#predicate */
4164
4317
  struct pm_node *predicate;
4165
4318
 
4319
+ /** UnlessNode#then_keyword_loc */
4320
+ pm_location_t then_keyword_loc;
4321
+
4166
4322
  /** UnlessNode#statements */
4167
4323
  struct pm_statements_node *statements;
4168
4324
 
@@ -4250,6 +4406,9 @@ typedef struct pm_while_node {
4250
4406
  * XStringNode
4251
4407
  *
4252
4408
  * Type: PM_X_STRING_NODE
4409
+ * Flags:
4410
+ * PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING
4411
+ * PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING
4253
4412
  *
4254
4413
  * @extends pm_node_t
4255
4414
  */
@@ -4299,9 +4458,17 @@ typedef struct pm_yield_node {
4299
4458
  */
4300
4459
  typedef enum pm_arguments_node_flags {
4301
4460
  /** if arguments contain keyword splat */
4302
- PM_ARGUMENTS_NODE_FLAGS_KEYWORD_SPLAT = 1,
4461
+ PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT = 1,
4303
4462
  } pm_arguments_node_flags_t;
4304
4463
 
4464
+ /**
4465
+ * Flags for array nodes.
4466
+ */
4467
+ typedef enum pm_array_node_flags {
4468
+ /** if array contains splat nodes */
4469
+ PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT = 1,
4470
+ } pm_array_node_flags_t;
4471
+
4305
4472
  /**
4306
4473
  * Flags for call nodes.
4307
4474
  */
@@ -4311,8 +4478,22 @@ typedef enum pm_call_node_flags {
4311
4478
 
4312
4479
  /** a call that could have been a local variable */
4313
4480
  PM_CALL_NODE_FLAGS_VARIABLE_CALL = 2,
4481
+
4482
+ /** a call that is an attribute write, so the value being written should be returned */
4483
+ PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE = 4,
4314
4484
  } pm_call_node_flags_t;
4315
4485
 
4486
+ /**
4487
+ * Flags for nodes that have unescaped content.
4488
+ */
4489
+ typedef enum pm_encoding_flags {
4490
+ /** internal bytes forced the encoding to UTF-8 */
4491
+ PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING = 1,
4492
+
4493
+ /** internal bytes forced the encoding to binary */
4494
+ PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING = 2,
4495
+ } pm_encoding_flags_t;
4496
+
4316
4497
  /**
4317
4498
  * Flags for integer nodes that correspond to the base of the integer.
4318
4499
  */
@@ -4320,16 +4501,24 @@ typedef enum pm_integer_base_flags {
4320
4501
  /** 0b prefix */
4321
4502
  PM_INTEGER_BASE_FLAGS_BINARY = 1,
4322
4503
 
4323
- /** 0o or 0 prefix */
4324
- PM_INTEGER_BASE_FLAGS_OCTAL = 2,
4325
-
4326
4504
  /** 0d or no prefix */
4327
- PM_INTEGER_BASE_FLAGS_DECIMAL = 4,
4505
+ PM_INTEGER_BASE_FLAGS_DECIMAL = 2,
4506
+
4507
+ /** 0o or 0 prefix */
4508
+ PM_INTEGER_BASE_FLAGS_OCTAL = 4,
4328
4509
 
4329
4510
  /** 0x prefix */
4330
4511
  PM_INTEGER_BASE_FLAGS_HEXADECIMAL = 8,
4331
4512
  } pm_integer_base_flags_t;
4332
4513
 
4514
+ /**
4515
+ * Flags for keyword hash nodes.
4516
+ */
4517
+ typedef enum pm_keyword_hash_node_flags {
4518
+ /** a keyword hash which only has `AssocNode` elements all with static literal keys, which means the elements can be treated as keyword arguments */
4519
+ PM_KEYWORD_HASH_NODE_FLAGS_STATIC_KEYS = 1,
4520
+ } pm_keyword_hash_node_flags_t;
4521
+
4333
4522
  /**
4334
4523
  * Flags for while and until loop nodes.
4335
4524
  */
@@ -4373,16 +4562,45 @@ typedef enum pm_regular_expression_flags {
4373
4562
 
4374
4563
  /** u - forces the UTF-8 encoding */
4375
4564
  PM_REGULAR_EXPRESSION_FLAGS_UTF_8 = 128,
4565
+
4566
+ /** internal bytes forced the encoding to UTF-8 */
4567
+ PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING = 256,
4568
+
4569
+ /** internal bytes forced the encoding to binary */
4570
+ PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING = 512,
4571
+
4572
+ /** internal bytes forced the encoding to US-ASCII */
4573
+ PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING = 1024,
4376
4574
  } pm_regular_expression_flags_t;
4377
4575
 
4378
4576
  /**
4379
4577
  * Flags for string nodes.
4380
4578
  */
4381
4579
  typedef enum pm_string_flags {
4580
+ /** internal bytes forced the encoding to UTF-8 */
4581
+ PM_STRING_FLAGS_FORCED_UTF8_ENCODING = 1,
4582
+
4583
+ /** internal bytes forced the encoding to binary */
4584
+ PM_STRING_FLAGS_FORCED_BINARY_ENCODING = 2,
4585
+
4382
4586
  /** frozen by virtue of a `frozen_string_literal` comment */
4383
- PM_STRING_FLAGS_FROZEN = 1,
4587
+ PM_STRING_FLAGS_FROZEN = 4,
4384
4588
  } pm_string_flags_t;
4385
4589
 
4590
+ /**
4591
+ * Flags for symbol nodes.
4592
+ */
4593
+ typedef enum pm_symbol_flags {
4594
+ /** internal bytes forced the encoding to UTF-8 */
4595
+ PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING = 1,
4596
+
4597
+ /** internal bytes forced the encoding to binary */
4598
+ PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING = 2,
4599
+
4600
+ /** internal bytes forced the encoding to US-ASCII */
4601
+ PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING = 4,
4602
+ } pm_symbol_flags_t;
4603
+
4386
4604
  /**
4387
4605
  * When we're serializing to Java, we want to skip serializing the location
4388
4606
  * fields as they won't be used by JRuby or TruffleRuby. This boolean allows us