diff --git a/config.yml b/config.yml index 73320c11181..4672b5ed262 100644 --- a/config.yml +++ b/config.yml @@ -1576,10 +1576,12 @@ nodes: end - name: KeywordRestParameterNode fields: - - name: operator_loc - type: location + - name: name + type: constant? - name: name_loc type: location? + - name: operator_loc + type: location comment: | Represents a keyword rest parameter to a method, block, or lambda definition. diff --git a/src/yarp.c b/src/yarp.c index 5607adc0018..5a9f28440d1 100644 --- a/src/yarp.c +++ b/src/yarp.c @@ -3090,8 +3090,9 @@ yp_keyword_rest_parameter_node_create(yp_parser_t *parser, const yp_token_t *ope .end = (name->type == YP_TOKEN_NOT_PROVIDED ? operator->end : name->end) }, }, - .operator_loc = YP_LOCATION_TOKEN_VALUE(operator), - .name_loc = YP_OPTIONAL_LOCATION_TOKEN_VALUE(name) + .name = yp_parser_optional_constant_id_token(parser, name), + .name_loc = YP_OPTIONAL_LOCATION_TOKEN_VALUE(name), + .operator_loc = YP_LOCATION_TOKEN_VALUE(operator) }; return node; diff --git a/test/yarp/errors_test.rb b/test/yarp/errors_test.rb index 75effa0ed01..4d660ea11cf 100644 --- a/test/yarp/errors_test.rb +++ b/test/yarp/errors_test.rb @@ -744,7 +744,7 @@ def test_rest_keywords_parameters_before_required_parameters [], nil, [KeywordParameterNode(:b, Location(), nil)], - KeywordRestParameterNode(Location(), Location()), + KeywordRestParameterNode(:rest, Location(), Location()), nil ), nil, @@ -791,7 +791,7 @@ def test_multiple_error_in_parameters_order [RequiredParameterNode(:a)], nil, [KeywordParameterNode(:b, Location(), nil)], - KeywordRestParameterNode(Location(), Location()), + KeywordRestParameterNode(:args, Location(), Location()), nil ), nil, @@ -820,7 +820,7 @@ def test_switching_to_optional_arguments_twice [RequiredParameterNode(:a)], nil, [KeywordParameterNode(:b, Location(), nil)], - KeywordRestParameterNode(Location(), Location()), + KeywordRestParameterNode(:args, Location(), Location()), nil ), nil, @@ -849,7 +849,7 @@ def test_switching_to_named_arguments_twice [RequiredParameterNode(:a)], nil, [KeywordParameterNode(:b, Location(), nil)], - KeywordRestParameterNode(Location(), Location()), + KeywordRestParameterNode(:args, Location(), Location()), nil ), nil, @@ -1069,7 +1069,7 @@ def test_duplicated_parameter_names expected = DefNode( Location(), nil, - ParametersNode([RequiredParameterNode(:a), RequiredParameterNode(:b)], [], [], nil, [], KeywordRestParameterNode(Location(), Location()), nil), + ParametersNode([RequiredParameterNode(:a), RequiredParameterNode(:b)], [], [], nil, [], KeywordRestParameterNode(:a, Location(), Location()), nil), nil, [:a, :b], Location(), diff --git a/test/yarp/snapshots/methods.txt b/test/yarp/snapshots/methods.txt index 390522bae4d..ae808aba0da 100644 --- a/test/yarp/snapshots/methods.txt +++ b/test/yarp/snapshots/methods.txt @@ -262,7 +262,7 @@ ProgramNode(0...1194)( [], nil, [], - KeywordRestParameterNode(250...253)((250...252), (252...253)), + KeywordRestParameterNode(250...253)(:b, (252...253), (250...252)), nil ), nil, @@ -283,7 +283,7 @@ ProgramNode(0...1194)( [], nil, [], - KeywordRestParameterNode(266...268)((266...268), nil), + KeywordRestParameterNode(266...268)(nil, nil, (266...268)), nil ), nil, diff --git a/test/yarp/snapshots/non_alphanumeric_methods.txt b/test/yarp/snapshots/non_alphanumeric_methods.txt index a8e9cd798fb..cf87adc48c9 100644 --- a/test/yarp/snapshots/non_alphanumeric_methods.txt +++ b/test/yarp/snapshots/non_alphanumeric_methods.txt @@ -115,7 +115,7 @@ ProgramNode(0...434)( [], nil, [], - KeywordRestParameterNode(110...113)((110...112), (112...113)), + KeywordRestParameterNode(110...113)(:b, (112...113), (110...112)), nil ), nil, diff --git a/test/yarp/snapshots/procs.txt b/test/yarp/snapshots/procs.txt index e825afd8e46..3f6f1d74707 100644 --- a/test/yarp/snapshots/procs.txt +++ b/test/yarp/snapshots/procs.txt @@ -119,7 +119,7 @@ ProgramNode(0...266)( RestParameterNode(145...147)((145...146), (146...147)), [KeywordParameterNode(149...151)(:d, (149...151), nil), KeywordParameterNode(153...155)(:e, (153...155), nil)], - KeywordRestParameterNode(157...160)((157...159), (159...160)), + KeywordRestParameterNode(157...160)(:f, (159...160), (157...159)), BlockParameterNode(162...164)(:g, (163...164), (162...163)) ), [], @@ -146,7 +146,7 @@ ProgramNode(0...266)( RestParameterNode(187...189)((187...188), (188...189)), [KeywordParameterNode(191...193)(:d, (191...193), nil), KeywordParameterNode(195...197)(:e, (195...197), nil)], - KeywordRestParameterNode(199...202)((199...201), (201...202)), + KeywordRestParameterNode(199...202)(:f, (201...202), (199...201)), BlockParameterNode(204...206)(:g, (205...206), (204...205)) ), [], diff --git a/test/yarp/snapshots/seattlerb/block_arg_kwsplat.txt b/test/yarp/snapshots/seattlerb/block_arg_kwsplat.txt index 36b7c9f83cc..196b4d250f2 100644 --- a/test/yarp/snapshots/seattlerb/block_arg_kwsplat.txt +++ b/test/yarp/snapshots/seattlerb/block_arg_kwsplat.txt @@ -17,7 +17,7 @@ ProgramNode(0...11)( [], nil, [], - KeywordRestParameterNode(5...8)((5...7), (7...8)), + KeywordRestParameterNode(5...8)(:b, (7...8), (5...7)), nil ), [], diff --git a/test/yarp/snapshots/seattlerb/block_args_kwargs.txt b/test/yarp/snapshots/seattlerb/block_args_kwargs.txt index f54b1bc55f5..8db4d3f0ea2 100644 --- a/test/yarp/snapshots/seattlerb/block_args_kwargs.txt +++ b/test/yarp/snapshots/seattlerb/block_args_kwargs.txt @@ -17,7 +17,7 @@ ProgramNode(0...23)( [], nil, [], - KeywordRestParameterNode(5...13)((5...7), (7...13)), + KeywordRestParameterNode(5...13)(:kwargs, (7...13), (5...7)), nil ), [], diff --git a/test/yarp/snapshots/seattlerb/defn_kwarg_env.txt b/test/yarp/snapshots/seattlerb/defn_kwarg_env.txt index 5872579ee6e..4364d661881 100644 --- a/test/yarp/snapshots/seattlerb/defn_kwarg_env.txt +++ b/test/yarp/snapshots/seattlerb/defn_kwarg_env.txt @@ -10,7 +10,7 @@ ProgramNode(0...45)( [], nil, [], - KeywordRestParameterNode(9...18)((9...11), (11...18)), + KeywordRestParameterNode(9...18)(:testing, (11...18), (9...11)), nil ), StatementsNode(20...41)( diff --git a/test/yarp/snapshots/seattlerb/defn_kwarg_kwsplat.txt b/test/yarp/snapshots/seattlerb/defn_kwarg_kwsplat.txt index bc4cb7d8a9f..040bca4c5d5 100644 --- a/test/yarp/snapshots/seattlerb/defn_kwarg_kwsplat.txt +++ b/test/yarp/snapshots/seattlerb/defn_kwarg_kwsplat.txt @@ -10,7 +10,7 @@ ProgramNode(0...20)( [], nil, [KeywordParameterNode(6...10)(:b, (6...8), IntegerNode(9...10)())], - KeywordRestParameterNode(12...15)((12...14), (14...15)), + KeywordRestParameterNode(12...15)(:c, (14...15), (12...14)), nil ), nil, diff --git a/test/yarp/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt b/test/yarp/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt index 009b3f0fcae..080b3ed2abc 100644 --- a/test/yarp/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt +++ b/test/yarp/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt @@ -10,7 +10,7 @@ ProgramNode(0...19)( [], nil, [KeywordParameterNode(6...10)(:b, (6...8), IntegerNode(9...10)())], - KeywordRestParameterNode(12...14)((12...14), nil), + KeywordRestParameterNode(12...14)(nil, nil, (12...14)), nil ), nil, diff --git a/test/yarp/snapshots/seattlerb/defn_powarg.txt b/test/yarp/snapshots/seattlerb/defn_powarg.txt index a6d63f56cb4..6965fca97e0 100644 --- a/test/yarp/snapshots/seattlerb/defn_powarg.txt +++ b/test/yarp/snapshots/seattlerb/defn_powarg.txt @@ -10,7 +10,7 @@ ProgramNode(0...17)( [], nil, [], - KeywordRestParameterNode(6...12)((6...8), (8...12)), + KeywordRestParameterNode(6...12)(:opts, (8...12), (6...8)), nil ), nil, diff --git a/test/yarp/snapshots/seattlerb/iter_kwarg_kwsplat.txt b/test/yarp/snapshots/seattlerb/iter_kwarg_kwsplat.txt index b068be0913a..5ade32c4838 100644 --- a/test/yarp/snapshots/seattlerb/iter_kwarg_kwsplat.txt +++ b/test/yarp/snapshots/seattlerb/iter_kwarg_kwsplat.txt @@ -17,7 +17,7 @@ ProgramNode(0...17)( [], nil, [KeywordParameterNode(5...9)(:b, (5...7), IntegerNode(8...9)())], - KeywordRestParameterNode(11...14)((11...13), (13...14)), + KeywordRestParameterNode(11...14)(:c, (13...14), (11...13)), nil ), [], diff --git a/test/yarp/snapshots/unparser/corpus/literal/since/32.txt b/test/yarp/snapshots/unparser/corpus/literal/since/32.txt index 31397bf4687..fd07f072376 100644 --- a/test/yarp/snapshots/unparser/corpus/literal/since/32.txt +++ b/test/yarp/snapshots/unparser/corpus/literal/since/32.txt @@ -10,7 +10,7 @@ ProgramNode(0...90)( [], nil, [], - KeywordRestParameterNode(18...20)((18...20), nil), + KeywordRestParameterNode(18...20)(nil, nil, (18...20)), nil ), StatementsNode(24...41)( diff --git a/test/yarp/snapshots/whitequark/args.txt b/test/yarp/snapshots/whitequark/args.txt index 8d5ce21dcb0..12d18fdaffe 100644 --- a/test/yarp/snapshots/whitequark/args.txt +++ b/test/yarp/snapshots/whitequark/args.txt @@ -340,7 +340,7 @@ ProgramNode(0...690)( (269...273), IntegerNode(274...275)() )], - KeywordRestParameterNode(277...282)((277...279), (279...282)), + KeywordRestParameterNode(277...282)(:baz, (279...282), (277...279)), BlockParameterNode(284...286)(:b, (285...286), (284...285)) ), nil, @@ -361,7 +361,7 @@ ProgramNode(0...690)( [], nil, [], - KeywordRestParameterNode(300...305)((300...302), (302...305)), + KeywordRestParameterNode(300...305)(:baz, (302...305), (300...302)), BlockParameterNode(307...309)(:b, (308...309), (307...308)) ), nil, @@ -382,7 +382,7 @@ ProgramNode(0...690)( [], RestParameterNode(322...323)((322...323), nil), [], - KeywordRestParameterNode(325...327)((325...327), nil), + KeywordRestParameterNode(325...327)(nil, nil, (325...327)), nil ), nil, diff --git a/test/yarp/snapshots/whitequark/blockargs.txt b/test/yarp/snapshots/whitequark/blockargs.txt index 56bf4f49ca3..4c51e4e1a8d 100644 --- a/test/yarp/snapshots/whitequark/blockargs.txt +++ b/test/yarp/snapshots/whitequark/blockargs.txt @@ -75,7 +75,7 @@ ProgramNode(0...550)( [], nil, [], - KeywordRestParameterNode(32...37)((32...34), (34...37)), + KeywordRestParameterNode(32...37)(:baz, (34...37), (32...34)), BlockParameterNode(39...41)(:b, (40...41), (39...40)) ), [], @@ -850,7 +850,11 @@ ProgramNode(0...550)( (430...434), IntegerNode(435...436)() )], - KeywordRestParameterNode(438...443)((438...440), (440...443)), + KeywordRestParameterNode(438...443)( + :baz, + (440...443), + (438...440) + ), BlockParameterNode(445...447)(:b, (446...447), (445...446)) ), [], diff --git a/test/yarp/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt b/test/yarp/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt index a751f923c11..da165e8e71a 100644 --- a/test/yarp/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt +++ b/test/yarp/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt @@ -10,7 +10,7 @@ ProgramNode(0...45)( [], nil, [], - KeywordRestParameterNode(18...20)((18...20), nil), + KeywordRestParameterNode(18...20)(nil, nil, (18...20)), nil ), StatementsNode(23...40)( diff --git a/test/yarp/snapshots/whitequark/forwarded_kwrestarg.txt b/test/yarp/snapshots/whitequark/forwarded_kwrestarg.txt index 0fcac6a2985..51d8720fe6c 100644 --- a/test/yarp/snapshots/whitequark/forwarded_kwrestarg.txt +++ b/test/yarp/snapshots/whitequark/forwarded_kwrestarg.txt @@ -10,7 +10,7 @@ ProgramNode(0...25)( [], nil, [], - KeywordRestParameterNode(8...10)((8...10), nil), + KeywordRestParameterNode(8...10)(nil, nil, (8...10)), nil ), StatementsNode(13...20)( diff --git a/test/yarp/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt b/test/yarp/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt index 65f75e723a1..e0d078128b6 100644 --- a/test/yarp/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt +++ b/test/yarp/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt @@ -10,7 +10,7 @@ ProgramNode(0...41)( [], nil, [], - KeywordRestParameterNode(8...10)((8...10), nil), + KeywordRestParameterNode(8...10)(nil, nil, (8...10)), nil ), StatementsNode(13...36)( diff --git a/test/yarp/snapshots/whitequark/kwoptarg_with_kwrestarg_and_forwarded_args.txt b/test/yarp/snapshots/whitequark/kwoptarg_with_kwrestarg_and_forwarded_args.txt index c9e8989ef35..bd1c1e6e54d 100644 --- a/test/yarp/snapshots/whitequark/kwoptarg_with_kwrestarg_and_forwarded_args.txt +++ b/test/yarp/snapshots/whitequark/kwoptarg_with_kwrestarg_and_forwarded_args.txt @@ -10,7 +10,7 @@ ProgramNode(0...28)( [], nil, [KeywordParameterNode(6...12)(:a, (6...8), NilNode(9...12)())], - KeywordRestParameterNode(14...16)((14...16), nil), + KeywordRestParameterNode(14...16)(nil, nil, (14...16)), nil ), StatementsNode(19...24)( diff --git a/test/yarp/snapshots/whitequark/kwrestarg_named.txt b/test/yarp/snapshots/whitequark/kwrestarg_named.txt index 591c59dfba1..2dd4c0225e9 100644 --- a/test/yarp/snapshots/whitequark/kwrestarg_named.txt +++ b/test/yarp/snapshots/whitequark/kwrestarg_named.txt @@ -10,7 +10,7 @@ ProgramNode(0...17)( [], nil, [], - KeywordRestParameterNode(6...11)((6...8), (8...11)), + KeywordRestParameterNode(6...11)(:foo, (8...11), (6...8)), nil ), nil, diff --git a/test/yarp/snapshots/whitequark/kwrestarg_unnamed.txt b/test/yarp/snapshots/whitequark/kwrestarg_unnamed.txt index 57bf8cc8b45..3fa1dcd7fed 100644 --- a/test/yarp/snapshots/whitequark/kwrestarg_unnamed.txt +++ b/test/yarp/snapshots/whitequark/kwrestarg_unnamed.txt @@ -10,7 +10,7 @@ ProgramNode(0...14)( [], nil, [], - KeywordRestParameterNode(6...8)((6...8), nil), + KeywordRestParameterNode(6...8)(nil, nil, (6...8)), nil ), nil,