prism 0.28.0 → 0.30.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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -1
  3. data/CONTRIBUTING.md +0 -4
  4. data/README.md +1 -0
  5. data/config.yml +95 -26
  6. data/docs/fuzzing.md +1 -1
  7. data/docs/ripper_translation.md +22 -0
  8. data/ext/prism/api_node.c +70 -52
  9. data/ext/prism/extconf.rb +27 -23
  10. data/ext/prism/extension.c +107 -372
  11. data/ext/prism/extension.h +1 -1
  12. data/include/prism/ast.h +170 -102
  13. data/include/prism/diagnostic.h +18 -3
  14. data/include/prism/node.h +0 -21
  15. data/include/prism/parser.h +23 -25
  16. data/include/prism/regexp.h +17 -8
  17. data/include/prism/static_literals.h +3 -2
  18. data/include/prism/util/pm_char.h +1 -2
  19. data/include/prism/util/pm_constant_pool.h +0 -8
  20. data/include/prism/util/pm_integer.h +16 -9
  21. data/include/prism/util/pm_string.h +0 -8
  22. data/include/prism/version.h +2 -2
  23. data/include/prism.h +0 -11
  24. data/lib/prism/compiler.rb +3 -0
  25. data/lib/prism/desugar_compiler.rb +4 -4
  26. data/lib/prism/dispatcher.rb +14 -0
  27. data/lib/prism/dot_visitor.rb +54 -35
  28. data/lib/prism/dsl.rb +23 -18
  29. data/lib/prism/ffi.rb +25 -4
  30. data/lib/prism/inspect_visitor.rb +26 -24
  31. data/lib/prism/mutation_compiler.rb +6 -1
  32. data/lib/prism/node.rb +314 -389
  33. data/lib/prism/node_ext.rb +175 -17
  34. data/lib/prism/parse_result/comments.rb +1 -8
  35. data/lib/prism/parse_result/newlines.rb +102 -12
  36. data/lib/prism/parse_result.rb +17 -0
  37. data/lib/prism/reflection.rb +11 -9
  38. data/lib/prism/serialize.rb +91 -68
  39. data/lib/prism/translation/parser/compiler.rb +288 -138
  40. data/lib/prism/translation/parser.rb +7 -2
  41. data/lib/prism/translation/ripper.rb +24 -22
  42. data/lib/prism/translation/ruby_parser.rb +32 -14
  43. data/lib/prism/visitor.rb +3 -0
  44. data/lib/prism.rb +0 -4
  45. data/prism.gemspec +2 -4
  46. data/rbi/prism/node.rbi +114 -57
  47. data/rbi/prism/node_ext.rbi +5 -0
  48. data/rbi/prism/parse_result.rbi +1 -1
  49. data/rbi/prism/visitor.rbi +3 -0
  50. data/rbi/prism.rbi +6 -0
  51. data/sig/prism/dsl.rbs +13 -10
  52. data/sig/prism/lex_compat.rbs +10 -0
  53. data/sig/prism/mutation_compiler.rbs +1 -0
  54. data/sig/prism/node.rbs +72 -48
  55. data/sig/prism/node_ext.rbs +4 -0
  56. data/sig/prism/visitor.rbs +1 -0
  57. data/sig/prism.rbs +21 -0
  58. data/src/diagnostic.c +56 -27
  59. data/src/node.c +432 -1690
  60. data/src/prettyprint.c +97 -54
  61. data/src/prism.c +1286 -1196
  62. data/src/regexp.c +133 -68
  63. data/src/serialize.c +22 -17
  64. data/src/static_literals.c +63 -84
  65. data/src/token_type.c +4 -4
  66. data/src/util/pm_constant_pool.c +0 -8
  67. data/src/util/pm_integer.c +39 -11
  68. data/src/util/pm_string.c +0 -12
  69. data/src/util/pm_strpbrk.c +32 -6
  70. metadata +3 -5
  71. data/include/prism/util/pm_string_list.h +0 -44
  72. data/lib/prism/debug.rb +0 -249
  73. data/src/util/pm_string_list.c +0 -28
@@ -18,7 +18,7 @@ module Prism
18
18
 
19
19
  # The minor version of prism that we are expecting to find in the serialized
20
20
  # strings.
21
- MINOR_VERSION = 28
21
+ MINOR_VERSION = 30
22
22
 
23
23
  # The patch version of prism that we are expecting to find in the serialized
24
24
  # strings.
@@ -133,13 +133,16 @@ module Prism
133
133
  :argument_bare_hash,
134
134
  :argument_block_forwarding,
135
135
  :argument_block_multi,
136
+ :argument_conflict_ampersand,
137
+ :argument_conflict_star,
138
+ :argument_conflict_star_star,
136
139
  :argument_formal_class,
137
140
  :argument_formal_constant,
138
141
  :argument_formal_global,
139
142
  :argument_formal_ivar,
140
143
  :argument_forwarding_unbound,
141
144
  :argument_in,
142
- :argument_no_forwarding_amp,
145
+ :argument_no_forwarding_ampersand,
143
146
  :argument_no_forwarding_ellipses,
144
147
  :argument_no_forwarding_star,
145
148
  :argument_no_forwarding_star_star,
@@ -221,6 +224,7 @@ module Prism
221
224
  :expect_expression_after_splat_hash,
222
225
  :expect_expression_after_star,
223
226
  :expect_ident_req_parameter,
227
+ :expect_in_delimiter,
224
228
  :expect_lparen_req_parameter,
225
229
  :expect_message,
226
230
  :expect_rbracket,
@@ -236,6 +240,7 @@ module Prism
236
240
  :expression_not_writable_file,
237
241
  :expression_not_writable_line,
238
242
  :expression_not_writable_nil,
243
+ :expression_not_writable_numbered,
239
244
  :expression_not_writable_self,
240
245
  :expression_not_writable_true,
241
246
  :float_parse,
@@ -260,6 +265,7 @@ module Prism
260
265
  :invalid_block_exit,
261
266
  :invalid_character,
262
267
  :invalid_encoding_magic_comment,
268
+ :invalid_escape_character,
263
269
  :invalid_float_exponent,
264
270
  :invalid_local_variable_read,
265
271
  :invalid_local_variable_write,
@@ -268,11 +274,13 @@ module Prism
268
274
  :invalid_multibyte_escape,
269
275
  :invalid_number_binary,
270
276
  :invalid_number_decimal,
277
+ :invalid_number_fraction,
271
278
  :invalid_number_hexadecimal,
272
279
  :invalid_number_octal,
273
280
  :invalid_number_underscore_inner,
274
281
  :invalid_number_underscore_trailing,
275
282
  :invalid_percent,
283
+ :invalid_percent_eof,
276
284
  :invalid_printable_character,
277
285
  :invalid_retry_after_else,
278
286
  :invalid_retry_after_ensure,
@@ -304,15 +312,17 @@ module Prism
304
312
  :no_local_variable,
305
313
  :not_expression,
306
314
  :number_literal_underscore,
315
+ :numbered_parameter_inner_block,
307
316
  :numbered_parameter_it,
308
317
  :numbered_parameter_ordinary,
309
- :numbered_parameter_outer_scope,
318
+ :numbered_parameter_outer_block,
310
319
  :operator_multi_assign,
311
320
  :operator_write_arguments,
312
321
  :operator_write_block,
313
322
  :parameter_assoc_splat_multi,
314
323
  :parameter_block_multi,
315
324
  :parameter_circular,
325
+ :parameter_forwarding_after_rest,
316
326
  :parameter_method_name,
317
327
  :parameter_name_duplicated,
318
328
  :parameter_no_default,
@@ -322,8 +332,8 @@ module Prism
322
332
  :parameter_splat_multi,
323
333
  :parameter_star,
324
334
  :parameter_unexpected_fwd,
325
- :parameter_wild_loose_comma,
326
335
  :parameter_unexpected_no_kw,
336
+ :parameter_wild_loose_comma,
327
337
  :pattern_capture_duplicate,
328
338
  :pattern_expression_after_bracket,
329
339
  :pattern_expression_after_comma,
@@ -335,8 +345,10 @@ module Prism
335
345
  :pattern_expression_after_pipe,
336
346
  :pattern_expression_after_range,
337
347
  :pattern_expression_after_rest,
348
+ :pattern_hash_implicit,
338
349
  :pattern_hash_key,
339
350
  :pattern_hash_key_duplicate,
351
+ :pattern_hash_key_interpolated,
340
352
  :pattern_hash_key_label,
341
353
  :pattern_hash_key_locals,
342
354
  :pattern_ident_after_hrocket,
@@ -350,6 +362,7 @@ module Prism
350
362
  :regexp_incompat_char_encoding,
351
363
  :regexp_invalid_unicode_range,
352
364
  :regexp_non_escaped_mbc,
365
+ :regexp_parse_error,
353
366
  :regexp_term,
354
367
  :regexp_unknown_options,
355
368
  :regexp_utf8_char_non_utf8_regexp,
@@ -389,6 +402,7 @@ module Prism
389
402
  :write_target_readonly,
390
403
  :write_target_unexpected,
391
404
  :xstring_term,
405
+ :ambiguous_binary_operator,
392
406
  :ambiguous_first_argument_minus,
393
407
  :ambiguous_first_argument_plus,
394
408
  :ambiguous_prefix_ampersand,
@@ -411,6 +425,7 @@ module Prism
411
425
  :keyword_eol,
412
426
  :literal_in_condition_default,
413
427
  :literal_in_condition_verbose,
428
+ :shareable_constant_value_line,
414
429
  :shebang_carriage_return,
415
430
  :unexpected_carriage_return,
416
431
  :unreachable_statement,
@@ -881,192 +896,195 @@ module Prism
881
896
  InterpolatedXStringNode.new(
882
897
  source, load_location, Array.new(load_varuint) { load_node }, load_location, location)
883
898
  when 88 then
884
- ItParametersNode.new(
899
+ ItLocalVariableReadNode.new(
885
900
  source, location)
886
901
  when 89 then
902
+ ItParametersNode.new(
903
+ source, location)
904
+ when 90 then
887
905
  KeywordHashNode.new(
888
906
  source, load_varuint, Array.new(load_varuint) { load_node }, location)
889
- when 90 then
907
+ when 91 then
890
908
  KeywordRestParameterNode.new(
891
909
  source, load_varuint, load_optional_constant, load_optional_location, load_location, location)
892
- when 91 then
910
+ when 92 then
893
911
  LambdaNode.new(
894
912
  source, Array.new(load_varuint) { load_required_constant }, load_location, load_location, load_location, load_optional_node, load_optional_node, location)
895
- when 92 then
913
+ when 93 then
896
914
  LocalVariableAndWriteNode.new(
897
915
  source, load_location, load_location, load_node, load_required_constant, load_varuint, location)
898
- when 93 then
916
+ when 94 then
899
917
  LocalVariableOperatorWriteNode.new(
900
918
  source, load_location, load_location, load_node, load_required_constant, load_required_constant, load_varuint, location)
901
- when 94 then
919
+ when 95 then
902
920
  LocalVariableOrWriteNode.new(
903
921
  source, load_location, load_location, load_node, load_required_constant, load_varuint, location)
904
- when 95 then
922
+ when 96 then
905
923
  LocalVariableReadNode.new(
906
924
  source, load_required_constant, load_varuint, location)
907
- when 96 then
925
+ when 97 then
908
926
  LocalVariableTargetNode.new(
909
927
  source, load_required_constant, load_varuint, location)
910
- when 97 then
928
+ when 98 then
911
929
  LocalVariableWriteNode.new(
912
930
  source, load_required_constant, load_varuint, load_location, load_node, load_location, location)
913
- when 98 then
931
+ when 99 then
914
932
  MatchLastLineNode.new(
915
933
  source, load_varuint, load_location, load_location, load_location, load_string, location)
916
- when 99 then
934
+ when 100 then
917
935
  MatchPredicateNode.new(
918
936
  source, load_node, load_node, load_location, location)
919
- when 100 then
937
+ when 101 then
920
938
  MatchRequiredNode.new(
921
939
  source, load_node, load_node, load_location, location)
922
- when 101 then
940
+ when 102 then
923
941
  MatchWriteNode.new(
924
942
  source, load_node, Array.new(load_varuint) { load_node }, location)
925
- when 102 then
943
+ when 103 then
926
944
  MissingNode.new(
927
945
  source, location)
928
- when 103 then
946
+ when 104 then
929
947
  ModuleNode.new(
930
948
  source, Array.new(load_varuint) { load_required_constant }, load_location, load_node, load_optional_node, load_location, load_required_constant, location)
931
- when 104 then
949
+ when 105 then
932
950
  MultiTargetNode.new(
933
951
  source, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, location)
934
- when 105 then
952
+ when 106 then
935
953
  MultiWriteNode.new(
936
954
  source, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_location, load_location, load_node, location)
937
- when 106 then
955
+ when 107 then
938
956
  NextNode.new(
939
957
  source, load_optional_node, load_location, location)
940
- when 107 then
958
+ when 108 then
941
959
  NilNode.new(
942
960
  source, location)
943
- when 108 then
961
+ when 109 then
944
962
  NoKeywordsParameterNode.new(
945
963
  source, load_location, load_location, location)
946
- when 109 then
964
+ when 110 then
947
965
  NumberedParametersNode.new(
948
966
  source, io.getbyte, location)
949
- when 110 then
967
+ when 111 then
950
968
  NumberedReferenceReadNode.new(
951
969
  source, load_varuint, location)
952
- when 111 then
970
+ when 112 then
953
971
  OptionalKeywordParameterNode.new(
954
972
  source, load_varuint, load_required_constant, load_location, load_node, location)
955
- when 112 then
973
+ when 113 then
956
974
  OptionalParameterNode.new(
957
975
  source, load_varuint, load_required_constant, load_location, load_location, load_node, location)
958
- when 113 then
976
+ when 114 then
959
977
  OrNode.new(
960
978
  source, load_node, load_node, load_location, location)
961
- when 114 then
979
+ when 115 then
962
980
  ParametersNode.new(
963
981
  source, Array.new(load_varuint) { load_node }, Array.new(load_varuint) { load_node }, load_optional_node, Array.new(load_varuint) { load_node }, Array.new(load_varuint) { load_node }, load_optional_node, load_optional_node, location)
964
- when 115 then
982
+ when 116 then
965
983
  ParenthesesNode.new(
966
984
  source, load_optional_node, load_location, load_location, location)
967
- when 116 then
985
+ when 117 then
968
986
  PinnedExpressionNode.new(
969
987
  source, load_node, load_location, load_location, load_location, location)
970
- when 117 then
988
+ when 118 then
971
989
  PinnedVariableNode.new(
972
990
  source, load_node, load_location, location)
973
- when 118 then
991
+ when 119 then
974
992
  PostExecutionNode.new(
975
993
  source, load_optional_node, load_location, load_location, load_location, location)
976
- when 119 then
994
+ when 120 then
977
995
  PreExecutionNode.new(
978
996
  source, load_optional_node, load_location, load_location, load_location, location)
979
- when 120 then
997
+ when 121 then
980
998
  ProgramNode.new(
981
999
  source, Array.new(load_varuint) { load_required_constant }, load_node, location)
982
- when 121 then
1000
+ when 122 then
983
1001
  RangeNode.new(
984
1002
  source, load_varuint, load_optional_node, load_optional_node, load_location, location)
985
- when 122 then
986
- RationalNode.new(
987
- source, load_node, location)
988
1003
  when 123 then
1004
+ RationalNode.new(
1005
+ source, load_varuint, load_integer, load_integer, location)
1006
+ when 124 then
989
1007
  RedoNode.new(
990
1008
  source, location)
991
- when 124 then
1009
+ when 125 then
992
1010
  RegularExpressionNode.new(
993
1011
  source, load_varuint, load_location, load_location, load_location, load_string, location)
994
- when 125 then
1012
+ when 126 then
995
1013
  RequiredKeywordParameterNode.new(
996
1014
  source, load_varuint, load_required_constant, load_location, location)
997
- when 126 then
1015
+ when 127 then
998
1016
  RequiredParameterNode.new(
999
1017
  source, load_varuint, load_required_constant, location)
1000
- when 127 then
1018
+ when 128 then
1001
1019
  RescueModifierNode.new(
1002
1020
  source, load_node, load_location, load_node, location)
1003
- when 128 then
1021
+ when 129 then
1004
1022
  RescueNode.new(
1005
1023
  source, load_location, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_node, load_optional_node, load_optional_node, location)
1006
- when 129 then
1024
+ when 130 then
1007
1025
  RestParameterNode.new(
1008
1026
  source, load_varuint, load_optional_constant, load_optional_location, load_location, location)
1009
- when 130 then
1027
+ when 131 then
1010
1028
  RetryNode.new(
1011
1029
  source, location)
1012
- when 131 then
1030
+ when 132 then
1013
1031
  ReturnNode.new(
1014
1032
  source, load_varuint, load_location, load_optional_node, location)
1015
- when 132 then
1033
+ when 133 then
1016
1034
  SelfNode.new(
1017
1035
  source, location)
1018
- when 133 then
1036
+ when 134 then
1019
1037
  ShareableConstantNode.new(
1020
1038
  source, load_varuint, load_node, location)
1021
- when 134 then
1039
+ when 135 then
1022
1040
  SingletonClassNode.new(
1023
1041
  source, Array.new(load_varuint) { load_required_constant }, load_location, load_location, load_node, load_optional_node, load_location, location)
1024
- when 135 then
1042
+ when 136 then
1025
1043
  SourceEncodingNode.new(
1026
1044
  source, location)
1027
- when 136 then
1045
+ when 137 then
1028
1046
  SourceFileNode.new(
1029
1047
  source, load_varuint, load_string, location)
1030
- when 137 then
1048
+ when 138 then
1031
1049
  SourceLineNode.new(
1032
1050
  source, location)
1033
- when 138 then
1051
+ when 139 then
1034
1052
  SplatNode.new(
1035
1053
  source, load_location, load_optional_node, location)
1036
- when 139 then
1054
+ when 140 then
1037
1055
  StatementsNode.new(
1038
1056
  source, Array.new(load_varuint) { load_node }, location)
1039
- when 140 then
1057
+ when 141 then
1040
1058
  StringNode.new(
1041
1059
  source, load_varuint, load_optional_location, load_location, load_optional_location, load_string, location)
1042
- when 141 then
1060
+ when 142 then
1043
1061
  SuperNode.new(
1044
1062
  source, load_location, load_optional_location, load_optional_node, load_optional_location, load_optional_node, location)
1045
- when 142 then
1063
+ when 143 then
1046
1064
  SymbolNode.new(
1047
1065
  source, load_varuint, load_optional_location, load_optional_location, load_optional_location, load_string, location)
1048
- when 143 then
1066
+ when 144 then
1049
1067
  TrueNode.new(
1050
1068
  source, location)
1051
- when 144 then
1069
+ when 145 then
1052
1070
  UndefNode.new(
1053
1071
  source, Array.new(load_varuint) { load_node }, load_location, location)
1054
- when 145 then
1072
+ when 146 then
1055
1073
  UnlessNode.new(
1056
1074
  source, load_location, load_node, load_optional_location, load_optional_node, load_optional_node, load_optional_location, location)
1057
- when 146 then
1075
+ when 147 then
1058
1076
  UntilNode.new(
1059
1077
  source, load_varuint, load_location, load_optional_location, load_node, load_optional_node, location)
1060
- when 147 then
1078
+ when 148 then
1061
1079
  WhenNode.new(
1062
1080
  source, load_location, Array.new(load_varuint) { load_node }, load_optional_location, load_optional_node, location)
1063
- when 148 then
1081
+ when 149 then
1064
1082
  WhileNode.new(
1065
1083
  source, load_varuint, load_location, load_optional_location, load_node, load_optional_node, location)
1066
- when 149 then
1084
+ when 150 then
1067
1085
  XStringNode.new(
1068
1086
  source, load_varuint, load_location, load_location, load_location, load_string, location)
1069
- when 150 then
1087
+ when 151 then
1070
1088
  YieldNode.new(
1071
1089
  source, load_location, load_optional_location, load_optional_node, load_optional_location, location)
1072
1090
  end
@@ -1516,6 +1534,11 @@ module Prism
1516
1534
  InterpolatedXStringNode.new(
1517
1535
  source, load_location, Array.new(load_varuint) { load_node }, load_location, location)
1518
1536
  },
1537
+ -> {
1538
+ location = load_location
1539
+ ItLocalVariableReadNode.new(
1540
+ source, location)
1541
+ },
1519
1542
  -> {
1520
1543
  location = load_location
1521
1544
  ItParametersNode.new(
@@ -1689,7 +1712,7 @@ module Prism
1689
1712
  -> {
1690
1713
  location = load_location
1691
1714
  RationalNode.new(
1692
- source, load_node, location)
1715
+ source, load_varuint, load_integer, load_integer, location)
1693
1716
  },
1694
1717
  -> {
1695
1718
  location = load_location