prism 0.28.0 → 0.30.0

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