prism 0.17.1 → 0.19.0

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