summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2023-08-21 21:12:52 -0400
committergit <svn-admin@ruby-lang.org>2023-08-25 21:10:13 +0000
commita31b069a8a0194ef589f0c81ff5da1b11374d7fd (patch)
treeaf7a51886a39dafde53b77ae26f89afdd049740c
parentb9a2c96747cfac2bcc2883335b40f2a2d61d34cb (diff)
[ruby/yarp] Track block opening and closing locations
https://github.com/ruby/yarp/commit/7984e4ddc7
-rw-r--r--test/yarp/errors_test.rb4
-rw-r--r--test/yarp/snapshots/lambda.txt6
-rw-r--r--test/yarp/snapshots/patterns.txt12
-rw-r--r--test/yarp/snapshots/procs.txt22
-rw-r--r--test/yarp/snapshots/seattlerb/call_array_lambda_block_call.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/call_stabby_do_end_with_block.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/call_stabby_with_braces_block.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/case_in.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/difficult3_5.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/difficult6_.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/do_lambda.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/lambda_do_vs_brace.txt12
-rw-r--r--test/yarp/snapshots/seattlerb/stabby_arg_no_paren.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/stabby_arg_opt_splat_arg_block_omfg.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/stabby_block_iter_call.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/stabby_block_iter_call_no_target_with_arg.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/stabby_block_kw.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/stabby_block_kw__required.txt2
-rw-r--r--test/yarp/snapshots/seattlerb/stabby_proc_scope.txt2
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/lambda.txt8
-rw-r--r--test/yarp/snapshots/unparser/corpus/literal/since/27.txt2
-rw-r--r--test/yarp/snapshots/whitequark/bug_435.txt2
-rw-r--r--test/yarp/snapshots/whitequark/bug_cmdarg.txt2
-rw-r--r--test/yarp/snapshots/whitequark/bug_lambda_leakage.txt2
-rw-r--r--test/yarp/snapshots/whitequark/kwnilarg.txt2
-rw-r--r--test/yarp/snapshots/whitequark/numbered_args_after_27.txt4
-rw-r--r--test/yarp/snapshots/whitequark/parser_bug_507.txt2
-rw-r--r--test/yarp/snapshots/whitequark/parser_bug_645.txt2
-rw-r--r--test/yarp/snapshots/whitequark/rescue_in_lambda_block.txt2
-rw-r--r--test/yarp/snapshots/whitequark/ruby_bug_11107.txt2
-rw-r--r--test/yarp/snapshots/whitequark/ruby_bug_11380.txt2
-rw-r--r--test/yarp/snapshots/whitequark/ruby_bug_15789.txt8
-rw-r--r--test/yarp/snapshots/whitequark/send_lambda.txt6
-rw-r--r--test/yarp/snapshots/whitequark/send_lambda_args.txt4
-rw-r--r--test/yarp/snapshots/whitequark/send_lambda_args_noparen.txt4
-rw-r--r--test/yarp/snapshots/whitequark/send_lambda_args_shadow.txt2
-rw-r--r--test/yarp/snapshots/whitequark/send_lambda_legacy.txt4
-rw-r--r--yarp/config.yml4
-rw-r--r--yarp/yarp.c25
39 files changed, 159 insertions, 14 deletions
diff --git a/test/yarp/errors_test.rb b/test/yarp/errors_test.rb
index d58fd27448..7b20ceadab 100644
--- a/test/yarp/errors_test.rb
+++ b/test/yarp/errors_test.rb
@@ -581,6 +581,8 @@ class ErrorsTest < Test::Unit::TestCase
expected = LambdaNode(
[:a, :b],
Location(),
+ Location(),
+ Location(),
BlockParametersNode(
ParametersNode([RequiredParameterNode(:a), RequiredParameterNode(:b)], [], [], nil, [], nil, nil),
[],
@@ -924,6 +926,8 @@ class ErrorsTest < Test::Unit::TestCase
expected = LambdaNode(
[:"..."],
Location(),
+ Location(),
+ Location(),
BlockParametersNode(ParametersNode([], [], [], nil, [], ForwardingParameterNode(), nil), [], Location(), Location()),
nil
)
diff --git a/test/yarp/snapshots/lambda.txt b/test/yarp/snapshots/lambda.txt
index 23c4ebc072..0832abf4e8 100644
--- a/test/yarp/snapshots/lambda.txt
+++ b/test/yarp/snapshots/lambda.txt
@@ -4,6 +4,8 @@ ProgramNode(0...92)(
[LambdaNode(0...14)(
[:foo],
(0...2),
+ (12...13),
+ (13...14),
BlockParametersNode(2...11)(
ParametersNode(6...9)(
[RequiredParameterNode(6...9)(:foo)],
@@ -23,6 +25,8 @@ ProgramNode(0...92)(
LambdaNode(16...34)(
[:x],
(16...18),
+ (31...32),
+ (33...34),
BlockParametersNode(18...30)(
ParametersNode(19...29)(
[],
@@ -66,6 +70,8 @@ ProgramNode(0...92)(
LambdaNode(36...51)(
[:a],
(36...38),
+ (49...50),
+ (50...51),
BlockParametersNode(38...48)(
ParametersNode(39...47)(
[],
diff --git a/test/yarp/snapshots/patterns.txt b/test/yarp/snapshots/patterns.txt
index d5d37f8665..de5946a7cf 100644
--- a/test/yarp/snapshots/patterns.txt
+++ b/test/yarp/snapshots/patterns.txt
@@ -323,6 +323,8 @@ ProgramNode(0...3743)(
LambdaNode(343...353)(
[],
(343...345),
+ (346...347),
+ (352...353),
nil,
StatementsNode(348...351)([LocalVariableReadNode(348...351)(:bar, 1)])
),
@@ -868,6 +870,8 @@ ProgramNode(0...3743)(
LambdaNode(916...926)(
[],
(916...918),
+ (919...920),
+ (925...926),
nil,
StatementsNode(921...924)(
[LocalVariableReadNode(921...924)(:bar, 1)]
@@ -876,6 +880,8 @@ ProgramNode(0...3743)(
LambdaNode(930...940)(
[],
(930...932),
+ (933...934),
+ (939...940),
nil,
StatementsNode(935...938)(
[LocalVariableReadNode(935...938)(:bar, 1)]
@@ -2268,6 +2274,8 @@ ProgramNode(0...3743)(
LambdaNode(1991...2001)(
[],
(1991...1993),
+ (1994...1995),
+ (2000...2001),
nil,
StatementsNode(1996...1999)(
[LocalVariableReadNode(1996...1999)(:bar, 1)]
@@ -2898,6 +2906,8 @@ ProgramNode(0...3743)(
LambdaNode(2727...2737)(
[],
(2727...2729),
+ (2730...2731),
+ (2736...2737),
nil,
StatementsNode(2732...2735)(
[LocalVariableReadNode(2732...2735)(:bar, 1)]
@@ -3727,6 +3737,8 @@ ProgramNode(0...3743)(
[LambdaNode(3647...3657)(
[],
(3647...3649),
+ (3650...3651),
+ (3656...3657),
nil,
StatementsNode(3652...3655)(
[LocalVariableReadNode(3652...3655)(:bar, 1)]
diff --git a/test/yarp/snapshots/procs.txt b/test/yarp/snapshots/procs.txt
index 3db8ec5b13..adfb063707 100644
--- a/test/yarp/snapshots/procs.txt
+++ b/test/yarp/snapshots/procs.txt
@@ -4,6 +4,8 @@ ProgramNode(0...266)(
[LambdaNode(0...21)(
[:a, :b, :c, :d],
(0...2),
+ (16...17),
+ (20...21),
BlockParametersNode(3...15)(
ParametersNode(4...5)(
[RequiredParameterNode(4...5)(:a)],
@@ -23,6 +25,8 @@ ProgramNode(0...266)(
LambdaNode(23...39)(
[],
(23...25),
+ (26...28),
+ (36...39),
nil,
BeginNode(29...39)(
nil,
@@ -36,6 +40,8 @@ ProgramNode(0...266)(
LambdaNode(41...69)(
[],
(41...43),
+ (44...46),
+ (66...69),
nil,
BeginNode(47...69)(
nil,
@@ -49,6 +55,8 @@ ProgramNode(0...266)(
LambdaNode(71...81)(
[],
(71...73),
+ (74...75),
+ (80...81),
nil,
StatementsNode(76...79)(
[CallNode(76...79)(nil, nil, (76...79), nil, nil, nil, nil, 2, "foo")]
@@ -57,6 +65,8 @@ ProgramNode(0...266)(
LambdaNode(83...98)(
[],
(83...85),
+ (86...88),
+ (95...98),
nil,
StatementsNode(90...93)(
[CallNode(90...93)(nil, nil, (90...93), nil, nil, nil, nil, 2, "foo")]
@@ -65,6 +75,8 @@ ProgramNode(0...266)(
LambdaNode(100...129)(
[:a, :b, :c, :d, :e],
(100...102),
+ (124...125),
+ (128...129),
BlockParametersNode(103...123)(
ParametersNode(103...123)(
[RequiredParameterNode(103...104)(:a)],
@@ -90,6 +102,8 @@ ProgramNode(0...266)(
LambdaNode(131...171)(
[:a, :b, :c, :d, :e, :f, :g],
(131...133),
+ (166...167),
+ (170...171),
BlockParametersNode(134...165)(
ParametersNode(135...164)(
[RequiredParameterNode(135...136)(:a)],
@@ -115,6 +129,8 @@ ProgramNode(0...266)(
LambdaNode(173...218)(
[:a, :b, :c, :d, :e, :f, :g],
(173...175),
+ (208...210),
+ (215...218),
BlockParametersNode(176...207)(
ParametersNode(177...206)(
[RequiredParameterNode(177...178)(:a)],
@@ -140,6 +156,8 @@ ProgramNode(0...266)(
LambdaNode(220...245)(
[:a],
(220...222),
+ (227...228),
+ (244...245),
BlockParametersNode(223...226)(
ParametersNode(224...225)(
[RequiredParameterNode(224...225)(:a)],
@@ -158,6 +176,8 @@ ProgramNode(0...266)(
[LambdaNode(229...243)(
[:b],
(229...231),
+ (234...235),
+ (242...243),
BlockParametersNode(232...233)(
ParametersNode(232...233)(
[RequiredParameterNode(232...233)(:b)],
@@ -193,6 +213,8 @@ ProgramNode(0...266)(
LambdaNode(247...266)(
[:a, :b, :c],
(247...249),
+ (263...264),
+ (265...266),
BlockParametersNode(250...262)(
ParametersNode(251...261)(
[RequiredDestructuredParameterNode(251...257)(
diff --git a/test/yarp/snapshots/seattlerb/call_array_lambda_block_call.txt b/test/yarp/snapshots/seattlerb/call_array_lambda_block_call.txt
index 1d8c2f1472..c83adb235f 100644
--- a/test/yarp/snapshots/seattlerb/call_array_lambda_block_call.txt
+++ b/test/yarp/snapshots/seattlerb/call_array_lambda_block_call.txt
@@ -11,6 +11,8 @@ ProgramNode(0...18)(
[LambdaNode(3...10)(
[],
(3...5),
+ (8...9),
+ (9...10),
BlockParametersNode(5...7)(nil, [], (5...6), (6...7)),
nil
)],
diff --git a/test/yarp/snapshots/seattlerb/call_stabby_do_end_with_block.txt b/test/yarp/snapshots/seattlerb/call_stabby_do_end_with_block.txt
index e48578da2a..f541c52985 100644
--- a/test/yarp/snapshots/seattlerb/call_stabby_do_end_with_block.txt
+++ b/test/yarp/snapshots/seattlerb/call_stabby_do_end_with_block.txt
@@ -10,6 +10,8 @@ ProgramNode(0...22)(
[LambdaNode(2...13)(
[],
(2...4),
+ (5...7),
+ (10...13),
nil,
StatementsNode(8...9)([IntegerNode(8...9)()])
)]
diff --git a/test/yarp/snapshots/seattlerb/call_stabby_with_braces_block.txt b/test/yarp/snapshots/seattlerb/call_stabby_with_braces_block.txt
index 36fbd7fb1a..83c62571fd 100644
--- a/test/yarp/snapshots/seattlerb/call_stabby_with_braces_block.txt
+++ b/test/yarp/snapshots/seattlerb/call_stabby_with_braces_block.txt
@@ -10,6 +10,8 @@ ProgramNode(0...19)(
[LambdaNode(2...10)(
[],
(2...4),
+ (5...6),
+ (9...10),
nil,
StatementsNode(7...8)([IntegerNode(7...8)()])
)]
diff --git a/test/yarp/snapshots/seattlerb/case_in.txt b/test/yarp/snapshots/seattlerb/case_in.txt
index b83e196ece..8a5fafdf74 100644
--- a/test/yarp/snapshots/seattlerb/case_in.txt
+++ b/test/yarp/snapshots/seattlerb/case_in.txt
@@ -313,6 +313,8 @@ ProgramNode(0...747)(
[LambdaNode(446...460)(
[:b],
(446...448),
+ (452...453),
+ (459...460),
BlockParametersNode(448...451)(
ParametersNode(449...450)(
[RequiredParameterNode(449...450)(:b)],
diff --git a/test/yarp/snapshots/seattlerb/difficult3_5.txt b/test/yarp/snapshots/seattlerb/difficult3_5.txt
index e7aaafc87a..746786b8a5 100644
--- a/test/yarp/snapshots/seattlerb/difficult3_5.txt
+++ b/test/yarp/snapshots/seattlerb/difficult3_5.txt
@@ -10,6 +10,8 @@ ProgramNode(0...19)(
[LambdaNode(2...19)(
[],
(2...4),
+ (7...8),
+ (18...19),
BlockParametersNode(4...6)(nil, [], (4...5), (5...6)),
StatementsNode(9...17)(
[CallNode(9...17)(
diff --git a/test/yarp/snapshots/seattlerb/difficult6_.txt b/test/yarp/snapshots/seattlerb/difficult6_.txt
index 20e419bbc4..2d1677e108 100644
--- a/test/yarp/snapshots/seattlerb/difficult6_.txt
+++ b/test/yarp/snapshots/seattlerb/difficult6_.txt
@@ -4,6 +4,8 @@ ProgramNode(0...25)(
[LambdaNode(0...25)(
[:a, :b],
(0...2),
+ (13...14),
+ (24...25),
BlockParametersNode(2...12)(
ParametersNode(3...11)(
[RequiredParameterNode(3...4)(:a)],
diff --git a/test/yarp/snapshots/seattlerb/do_lambda.txt b/test/yarp/snapshots/seattlerb/do_lambda.txt
index 86b3548eb4..a7eb211623 100644
--- a/test/yarp/snapshots/seattlerb/do_lambda.txt
+++ b/test/yarp/snapshots/seattlerb/do_lambda.txt
@@ -4,6 +4,8 @@ ProgramNode(0...11)(
[LambdaNode(0...11)(
[],
(0...2),
+ (5...7),
+ (8...11),
BlockParametersNode(2...4)(nil, [], (2...3), (3...4)),
nil
)]
diff --git a/test/yarp/snapshots/seattlerb/lambda_do_vs_brace.txt b/test/yarp/snapshots/seattlerb/lambda_do_vs_brace.txt
index 1c9e2efc33..c7f83a9b51 100644
--- a/test/yarp/snapshots/seattlerb/lambda_do_vs_brace.txt
+++ b/test/yarp/snapshots/seattlerb/lambda_do_vs_brace.txt
@@ -6,7 +6,9 @@ ProgramNode(0...46)(
nil,
(0...1),
nil,
- ArgumentsNode(2...11)([LambdaNode(2...11)([], (2...4), nil, nil)]),
+ ArgumentsNode(2...11)(
+ [LambdaNode(2...11)([], (2...4), (5...7), (8...11), nil, nil)]
+ ),
nil,
nil,
0,
@@ -17,7 +19,9 @@ ProgramNode(0...46)(
nil,
(13...14),
nil,
- ArgumentsNode(15...20)([LambdaNode(15...20)([], (15...17), nil, nil)]),
+ ArgumentsNode(15...20)(
+ [LambdaNode(15...20)([], (15...17), (18...19), (19...20), nil, nil)]
+ ),
nil,
nil,
0,
@@ -32,6 +36,8 @@ ProgramNode(0...46)(
[LambdaNode(24...35)(
[],
(24...26),
+ (29...31),
+ (32...35),
BlockParametersNode(26...28)(nil, [], (26...27), (27...28)),
nil
)]
@@ -50,6 +56,8 @@ ProgramNode(0...46)(
[LambdaNode(39...46)(
[],
(39...41),
+ (44...45),
+ (45...46),
BlockParametersNode(41...43)(nil, [], (41...42), (42...43)),
nil
)]
diff --git a/test/yarp/snapshots/seattlerb/stabby_arg_no_paren.txt b/test/yarp/snapshots/seattlerb/stabby_arg_no_paren.txt
index bbbd0a3fcf..d999e4ea47 100644
--- a/test/yarp/snapshots/seattlerb/stabby_arg_no_paren.txt
+++ b/test/yarp/snapshots/seattlerb/stabby_arg_no_paren.txt
@@ -4,6 +4,8 @@ ProgramNode(0...5)(
[LambdaNode(0...5)(
[:a],
(0...2),
+ (3...4),
+ (4...5),
BlockParametersNode(2...3)(
ParametersNode(2...3)(
[RequiredParameterNode(2...3)(:a)],
diff --git a/test/yarp/snapshots/seattlerb/stabby_arg_opt_splat_arg_block_omfg.txt b/test/yarp/snapshots/seattlerb/stabby_arg_opt_splat_arg_block_omfg.txt
index 9475ba9c3f..0f64173a92 100644
--- a/test/yarp/snapshots/seattlerb/stabby_arg_opt_splat_arg_block_omfg.txt
+++ b/test/yarp/snapshots/seattlerb/stabby_arg_opt_splat_arg_block_omfg.txt
@@ -4,6 +4,8 @@ ProgramNode(0...23)(
[LambdaNode(0...23)(
[:b, :c, :d, :e, :f],
(0...2),
+ (21...22),
+ (22...23),
BlockParametersNode(2...21)(
ParametersNode(3...20)(
[RequiredParameterNode(3...4)(:b)],
diff --git a/test/yarp/snapshots/seattlerb/stabby_block_iter_call.txt b/test/yarp/snapshots/seattlerb/stabby_block_iter_call.txt
index f84e8227f9..719c895b99 100644
--- a/test/yarp/snapshots/seattlerb/stabby_block_iter_call.txt
+++ b/test/yarp/snapshots/seattlerb/stabby_block_iter_call.txt
@@ -10,6 +10,8 @@ ProgramNode(0...25)(
[LambdaNode(2...25)(
[],
(2...4),
+ (8...10),
+ (22...25),
BlockParametersNode(5...7)(nil, [], (5...6), (6...7)),
StatementsNode(11...21)(
[CallNode(11...21)(
diff --git a/test/yarp/snapshots/seattlerb/stabby_block_iter_call_no_target_with_arg.txt b/test/yarp/snapshots/seattlerb/stabby_block_iter_call_no_target_with_arg.txt
index c24b3c63c7..14b7a3eb98 100644
--- a/test/yarp/snapshots/seattlerb/stabby_block_iter_call_no_target_with_arg.txt
+++ b/test/yarp/snapshots/seattlerb/stabby_block_iter_call_no_target_with_arg.txt
@@ -10,6 +10,8 @@ ProgramNode(0...26)(
[LambdaNode(2...26)(
[],
(2...4),
+ (8...10),
+ (23...26),
BlockParametersNode(5...7)(nil, [], (5...6), (6...7)),
StatementsNode(11...22)(
[CallNode(11...22)(
diff --git a/test/yarp/snapshots/seattlerb/stabby_block_kw.txt b/test/yarp/snapshots/seattlerb/stabby_block_kw.txt
index 9554c9d37a..8df95715c9 100644
--- a/test/yarp/snapshots/seattlerb/stabby_block_kw.txt
+++ b/test/yarp/snapshots/seattlerb/stabby_block_kw.txt
@@ -4,6 +4,8 @@ ProgramNode(0...13)(
[LambdaNode(0...13)(
[:k],
(0...2),
+ (10...11),
+ (12...13),
BlockParametersNode(3...9)(
ParametersNode(4...8)(
[],
diff --git a/test/yarp/snapshots/seattlerb/stabby_block_kw__required.txt b/test/yarp/snapshots/seattlerb/stabby_block_kw__required.txt
index e2bdaf8124..8d3e73af8b 100644
--- a/test/yarp/snapshots/seattlerb/stabby_block_kw__required.txt
+++ b/test/yarp/snapshots/seattlerb/stabby_block_kw__required.txt
@@ -4,6 +4,8 @@ ProgramNode(0...11)(
[LambdaNode(0...11)(
[:k],
(0...2),
+ (8...9),
+ (10...11),
BlockParametersNode(3...7)(
ParametersNode(4...6)(
[],
diff --git a/test/yarp/snapshots/seattlerb/stabby_proc_scope.txt b/test/yarp/snapshots/seattlerb/stabby_proc_scope.txt
index d8aef65941..c4594997eb 100644
--- a/test/yarp/snapshots/seattlerb/stabby_proc_scope.txt
+++ b/test/yarp/snapshots/seattlerb/stabby_proc_scope.txt
@@ -4,6 +4,8 @@ ProgramNode(0...11)(
[LambdaNode(0...11)(
[:a, :b],
(0...2),
+ (9...10),
+ (10...11),
BlockParametersNode(2...8)(
ParametersNode(3...4)(
[RequiredParameterNode(3...4)(:a)],
diff --git a/test/yarp/snapshots/unparser/corpus/literal/lambda.txt b/test/yarp/snapshots/unparser/corpus/literal/lambda.txt
index 66300fd726..13161f9c88 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/lambda.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/lambda.txt
@@ -46,12 +46,16 @@ ProgramNode(0...80)(
LambdaNode(33...41)(
[],
(33...35),
+ (38...39),
+ (40...41),
BlockParametersNode(35...37)(nil, [], (35...36), (36...37)),
nil
),
LambdaNode(42...51)(
[:a],
(42...44),
+ (48...49),
+ (50...51),
BlockParametersNode(44...47)(
ParametersNode(45...46)(
[RequiredParameterNode(45...46)(:a)],
@@ -71,6 +75,8 @@ ProgramNode(0...80)(
LambdaNode(52...64)(
[:a, :b],
(52...54),
+ (61...62),
+ (63...64),
BlockParametersNode(54...60)(
ParametersNode(55...59)(
[RequiredParameterNode(55...56)(:a),
@@ -91,6 +97,8 @@ ProgramNode(0...80)(
LambdaNode(65...80)(
[:a, :b, :c],
(65...67),
+ (77...78),
+ (79...80),
BlockParametersNode(67...76)(
ParametersNode(68...72)(
[RequiredParameterNode(68...69)(:a),
diff --git a/test/yarp/snapshots/unparser/corpus/literal/since/27.txt b/test/yarp/snapshots/unparser/corpus/literal/since/27.txt
index cccfbc64b4..f8709ae21a 100644
--- a/test/yarp/snapshots/unparser/corpus/literal/since/27.txt
+++ b/test/yarp/snapshots/unparser/corpus/literal/since/27.txt
@@ -4,6 +4,8 @@ ProgramNode(0...22)(
[LambdaNode(0...16)(
[],
(0...2),
+ (3...4),
+ (15...16),
nil,
StatementsNode(7...14)(
[CallNode(7...14)(
diff --git a/test/yarp/snapshots/whitequark/bug_435.txt b/test/yarp/snapshots/whitequark/bug_435.txt
index ed5a985e3a..7d74c8c8a2 100644
--- a/test/yarp/snapshots/whitequark/bug_435.txt
+++ b/test/yarp/snapshots/whitequark/bug_435.txt
@@ -9,6 +9,8 @@ ProgramNode(0...14)(
[LambdaNode(3...12)(
[:foo],
(3...5),
+ (10...11),
+ (11...12),
BlockParametersNode(6...9)(
ParametersNode(6...9)(
[RequiredParameterNode(6...9)(:foo)],
diff --git a/test/yarp/snapshots/whitequark/bug_cmdarg.txt b/test/yarp/snapshots/whitequark/bug_cmdarg.txt
index f953e56145..b3f79aafd4 100644
--- a/test/yarp/snapshots/whitequark/bug_cmdarg.txt
+++ b/test/yarp/snapshots/whitequark/bug_cmdarg.txt
@@ -55,6 +55,8 @@ ProgramNode(0...56)(
LambdaNode(35...56)(
[],
(35...37),
+ (38...40),
+ (53...56),
nil,
StatementsNode(41...52)(
[CallNode(41...52)(
diff --git a/test/yarp/snapshots/whitequark/bug_lambda_leakage.txt b/test/yarp/snapshots/whitequark/bug_lambda_leakage.txt
index c59109d0a9..7792fa495a 100644
--- a/test/yarp/snapshots/whitequark/bug_lambda_leakage.txt
+++ b/test/yarp/snapshots/whitequark/bug_lambda_leakage.txt
@@ -4,6 +4,8 @@ ProgramNode(0...19)(
[LambdaNode(0...12)(
[:scope],
(0...2),
+ (10...11),
+ (11...12),
BlockParametersNode(2...9)(
ParametersNode(3...8)(
[RequiredParameterNode(3...8)(:scope)],
diff --git a/test/yarp/snapshots/whitequark/kwnilarg.txt b/test/yarp/snapshots/whitequark/kwnilarg.txt
index d7ca269299..0995a597c2 100644
--- a/test/yarp/snapshots/whitequark/kwnilarg.txt
+++ b/test/yarp/snapshots/whitequark/kwnilarg.txt
@@ -4,6 +4,8 @@ ProgramNode(0...46)(
[LambdaNode(0...12)(
[],
(0...2),
+ (10...11),
+ (11...12),
BlockParametersNode(2...9)(
ParametersNode(3...8)(
[],
diff --git a/test/yarp/snapshots/whitequark/numbered_args_after_27.txt b/test/yarp/snapshots/whitequark/numbered_args_after_27.txt
index 45decfc3b7..c2a67b4cc3 100644
--- a/test/yarp/snapshots/whitequark/numbered_args_after_27.txt
+++ b/test/yarp/snapshots/whitequark/numbered_args_after_27.txt
@@ -4,6 +4,8 @@ ProgramNode(0...65)(
[LambdaNode(0...17)(
[],
(0...2),
+ (3...5),
+ (14...17),
nil,
StatementsNode(6...13)(
[CallNode(6...13)(
@@ -34,6 +36,8 @@ ProgramNode(0...65)(
LambdaNode(19...32)(
[],
(19...21),
+ (22...23),
+ (31...32),
nil,
StatementsNode(24...31)(
[CallNode(24...31)(
diff --git a/test/yarp/snapshots/whitequark/parser_bug_507.txt b/test/yarp/snapshots/whitequark/parser_bug_507.txt
index e0b69e4c8b..4d6d91a763 100644
--- a/test/yarp/snapshots/whitequark/parser_bug_507.txt
+++ b/test/yarp/snapshots/whitequark/parser_bug_507.txt
@@ -7,6 +7,8 @@ ProgramNode(0...19)(
LambdaNode(4...19)(
[:args],
(4...6),
+ (13...15),
+ (16...19),
BlockParametersNode(7...12)(
ParametersNode(7...12)(
[],
diff --git a/test/yarp/snapshots/whitequark/parser_bug_645.txt b/test/yarp/snapshots/whitequark/parser_bug_645.txt
index 22ae40a011..27680b00ae 100644
--- a/test/yarp/snapshots/whitequark/parser_bug_645.txt
+++ b/test/yarp/snapshots/whitequark/parser_bug_645.txt
@@ -4,6 +4,8 @@ ProgramNode(0...14)(
[LambdaNode(0...14)(
[:arg],
(0...2),
+ (12...13),
+ (13...14),
BlockParametersNode(3...11)(
ParametersNode(4...10)(
[],
diff --git a/test/yarp/snapshots/whitequark/rescue_in_lambda_block.txt b/test/yarp/snapshots/whitequark/rescue_in_lambda_block.txt
index 475b72dbe8..89825a7ac4 100644
--- a/test/yarp/snapshots/whitequark/rescue_in_lambda_block.txt
+++ b/test/yarp/snapshots/whitequark/rescue_in_lambda_block.txt
@@ -4,6 +4,8 @@ ProgramNode(0...17)(
[LambdaNode(0...17)(
[],
(0...2),
+ (3...5),
+ (14...17),
nil,
BeginNode(6...17)(
nil,
diff --git a/test/yarp/snapshots/whitequark/ruby_bug_11107.txt b/test/yarp/snapshots/whitequark/ruby_bug_11107.txt
index 0f5b129c5c..c61ee9ef80 100644
--- a/test/yarp/snapshots/whitequark/ruby_bug_11107.txt
+++ b/test/yarp/snapshots/whitequark/ruby_bug_11107.txt
@@ -10,6 +10,8 @@ ProgramNode(0...24)(
[LambdaNode(2...24)(
[],
(2...4),
+ (7...9),
+ (21...24),
BlockParametersNode(4...6)(nil, [], (4...5), (5...6)),
StatementsNode(10...20)(
[CallNode(10...20)(
diff --git a/test/yarp/snapshots/whitequark/ruby_bug_11380.txt b/test/yarp/snapshots/whitequark/ruby_bug_11380.txt
index 5962097a6a..9e89161e78 100644
--- a/test/yarp/snapshots/whitequark/ruby_bug_11380.txt
+++ b/test/yarp/snapshots/whitequark/ruby_bug_11380.txt
@@ -10,6 +10,8 @@ ProgramNode(0...28)(
[LambdaNode(2...15)(
[],
(2...4),
+ (5...6),
+ (14...15),
nil,
StatementsNode(7...13)(
[SymbolNode(7...13)((7...8), (8...13), nil, "hello")]
diff --git a/test/yarp/snapshots/whitequark/ruby_bug_15789.txt b/test/yarp/snapshots/whitequark/ruby_bug_15789.txt
index 331c1e5cd8..0621e71c8c 100644
--- a/test/yarp/snapshots/whitequark/ruby_bug_15789.txt
+++ b/test/yarp/snapshots/whitequark/ruby_bug_15789.txt
@@ -10,6 +10,8 @@ ProgramNode(0...41)(
[LambdaNode(2...20)(
[:a],
(2...4),
+ (17...18),
+ (19...20),
BlockParametersNode(4...16)(
ParametersNode(5...15)(
[],
@@ -20,6 +22,8 @@ ProgramNode(0...41)(
LambdaNode(9...15)(
[],
(9...11),
+ (11...12),
+ (14...15),
nil,
StatementsNode(12...14)(
[CallNode(12...14)(
@@ -63,6 +67,8 @@ ProgramNode(0...41)(
[LambdaNode(24...41)(
[:a],
(24...26),
+ (38...39),
+ (40...41),
BlockParametersNode(26...37)(
ParametersNode(27...36)(
[],
@@ -74,6 +80,8 @@ ProgramNode(0...41)(
LambdaNode(30...36)(
[],
(30...32),
+ (32...33),
+ (35...36),
nil,
StatementsNode(33...35)(
[CallNode(33...35)(
diff --git a/test/yarp/snapshots/whitequark/send_lambda.txt b/test/yarp/snapshots/whitequark/send_lambda.txt
index 3c9f4f56cb..c30ec09249 100644
--- a/test/yarp/snapshots/whitequark/send_lambda.txt
+++ b/test/yarp/snapshots/whitequark/send_lambda.txt
@@ -4,6 +4,8 @@ ProgramNode(0...26)(
[LambdaNode(0...8)(
[:*],
(0...2),
+ (5...6),
+ (7...8),
BlockParametersNode(3...4)(
ParametersNode(3...4)(
[],
@@ -20,7 +22,7 @@ ProgramNode(0...26)(
),
nil
),
- LambdaNode(10...19)([], (10...12), nil, nil),
- LambdaNode(21...26)([], (21...23), nil, nil)]
+ LambdaNode(10...19)([], (10...12), (13...15), (16...19), nil, nil),
+ LambdaNode(21...26)([], (21...23), (23...24), (25...26), nil, nil)]
)
)
diff --git a/test/yarp/snapshots/whitequark/send_lambda_args.txt b/test/yarp/snapshots/whitequark/send_lambda_args.txt
index f904384781..ae41cfa463 100644
--- a/test/yarp/snapshots/whitequark/send_lambda_args.txt
+++ b/test/yarp/snapshots/whitequark/send_lambda_args.txt
@@ -4,6 +4,8 @@ ProgramNode(0...21)(
[LambdaNode(0...10)(
[:a],
(0...2),
+ (7...8),
+ (9...10),
BlockParametersNode(3...6)(
ParametersNode(4...5)(
[RequiredParameterNode(4...5)(:a)],
@@ -23,6 +25,8 @@ ProgramNode(0...21)(
LambdaNode(12...21)(
[:a],
(12...14),
+ (18...19),
+ (20...21),
BlockParametersNode(14...17)(
ParametersNode(15...16)(
[RequiredParameterNode(15...16)(:a)],
diff --git a/test/yarp/snapshots/whitequark/send_lambda_args_noparen.txt b/test/yarp/snapshots/whitequark/send_lambda_args_noparen.txt
index 8767cf48fa..ebb6fb1065 100644
--- a/test/yarp/snapshots/whitequark/send_lambda_args_noparen.txt
+++ b/test/yarp/snapshots/whitequark/send_lambda_args_noparen.txt
@@ -4,6 +4,8 @@ ProgramNode(0...22)(
[LambdaNode(0...11)(
[:a],
(0...2),
+ (8...9),
+ (10...11),
BlockParametersNode(3...7)(
ParametersNode(3...7)(
[],
@@ -23,6 +25,8 @@ ProgramNode(0...22)(
LambdaNode(13...22)(
[:a],
(13...15),
+ (19...20),
+ (21...22),
BlockParametersNode(16...18)(
ParametersNode(16...18)(
[],
diff --git a/test/yarp/snapshots/whitequark/send_lambda_args_shadow.txt b/test/yarp/snapshots/whitequark/send_lambda_args_shadow.txt
index a2e92a67dc..9a6c888a93 100644
--- a/test/yarp/snapshots/whitequark/send_lambda_args_shadow.txt
+++ b/test/yarp/snapshots/whitequark/send_lambda_args_shadow.txt
@@ -4,6 +4,8 @@ ProgramNode(0...19)(
[LambdaNode(0...19)(
[:a, :foo, :bar],
(0...2),
+ (16...17),
+ (18...19),
BlockParametersNode(2...15)(
ParametersNode(3...4)(
[RequiredParameterNode(3...4)(:a)],
diff --git a/test/yarp/snapshots/whitequark/send_lambda_legacy.txt b/test/yarp/snapshots/whitequark/send_lambda_legacy.txt
index fdc30c30dc..57b827cb7e 100644
--- a/test/yarp/snapshots/whitequark/send_lambda_legacy.txt
+++ b/test/yarp/snapshots/whitequark/send_lambda_legacy.txt
@@ -1,4 +1,6 @@
ProgramNode(0...5)(
[],
- StatementsNode(0...5)([LambdaNode(0...5)([], (0...2), nil, nil)])
+ StatementsNode(0...5)(
+ [LambdaNode(0...5)([], (0...2), (2...3), (4...5), nil, nil)]
+ )
)
diff --git a/yarp/config.yml b/yarp/config.yml
index 62a3c2249c..c7fec6f846 100644
--- a/yarp/config.yml
+++ b/yarp/config.yml
@@ -1468,8 +1468,12 @@ nodes:
child_nodes:
- name: locals
type: constant[]
+ - name: operator_loc
+ type: location
- name: opening_loc
type: location
+ - name: closing_loc
+ type: location
- name: parameters
type: node?
kind: BlockParametersNode
diff --git a/yarp/yarp.c b/yarp/yarp.c
index 46a57fe4e2..87d6a16cfa 100644
--- a/yarp/yarp.c
+++ b/yarp/yarp.c
@@ -2931,10 +2931,11 @@ static yp_lambda_node_t *
yp_lambda_node_create(
yp_parser_t *parser,
yp_constant_id_list_t *locals,
+ const yp_token_t *operator,
const yp_token_t *opening,
+ const yp_token_t *closing,
yp_block_parameters_node_t *parameters,
- yp_node_t *body,
- const yp_token_t *closing
+ yp_node_t *body
) {
yp_lambda_node_t *node = YP_ALLOC_NODE(parser, yp_lambda_node_t);
@@ -2942,12 +2943,14 @@ yp_lambda_node_create(
{
.type = YP_NODE_LAMBDA_NODE,
.location = {
- .start = opening->start,
+ .start = operator->start,
.end = closing->end
},
},
.locals = *locals,
+ .operator_loc = YP_LOCATION_TOKEN_VALUE(operator),
.opening_loc = YP_LOCATION_TOKEN_VALUE(opening),
+ .closing_loc = YP_LOCATION_TOKEN_VALUE(closing),
.parameters = parameters,
.body = body
};
@@ -12424,25 +12427,25 @@ parse_expression_prefix(yp_parser_t *parser, yp_binding_power_t binding_power) {
yp_accepts_block_stack_push(parser, true);
parser_lex(parser);
- yp_token_t opening = parser->previous;
+ yp_token_t operator = parser->previous;
yp_parser_scope_push(parser, false);
yp_block_parameters_node_t *params;
switch (parser->current.type) {
case YP_TOKEN_PARENTHESIS_LEFT: {
- yp_token_t block_parameters_opening = parser->current;
+ yp_token_t opening = parser->current;
parser_lex(parser);
if (match_type_p(parser, YP_TOKEN_PARENTHESIS_RIGHT)) {
- params = yp_block_parameters_node_create(parser, NULL, &block_parameters_opening);
+ params = yp_block_parameters_node_create(parser, NULL, &opening);
} else {
- params = parse_block_parameters(parser, false, &block_parameters_opening, true);
+ params = parse_block_parameters(parser, false, &opening, true);
}
accept(parser, YP_TOKEN_NEWLINE);
expect(parser, YP_TOKEN_PARENTHESIS_RIGHT, "Expected ')' after left parenthesis.");
- yp_block_parameters_node_closing_set(params, &parser->previous);
+ yp_block_parameters_node_closing_set(params, &parser->previous);
break;
}
case YP_CASE_PARAMETER: {
@@ -12458,16 +12461,20 @@ parse_expression_prefix(yp_parser_t *parser, yp_binding_power_t binding_power) {
}
}
+ yp_token_t opening;
yp_node_t *body = NULL;
parser->lambda_enclosure_nesting = previous_lambda_enclosure_nesting;
if (accept(parser, YP_TOKEN_LAMBDA_BEGIN)) {
+ opening = parser->previous;
+
if (!accept(parser, YP_TOKEN_BRACE_RIGHT)) {
body = (yp_node_t *) parse_statements(parser, YP_CONTEXT_LAMBDA_BRACES);
expect(parser, YP_TOKEN_BRACE_RIGHT, "Expecting '}' to close lambda block.");
}
} else {
expect(parser, YP_TOKEN_KEYWORD_DO, "Expected a 'do' keyword or a '{' to open lambda block.");
+ opening = parser->previous;
if (!match_any_type_p(parser, 3, YP_TOKEN_KEYWORD_END, YP_TOKEN_KEYWORD_RESCUE, YP_TOKEN_KEYWORD_ENSURE)) {
body = (yp_node_t *) parse_statements(parser, YP_CONTEXT_LAMBDA_DO_END);
@@ -12484,7 +12491,7 @@ parse_expression_prefix(yp_parser_t *parser, yp_binding_power_t binding_power) {
yp_constant_id_list_t locals = parser->current_scope->locals;
yp_parser_scope_pop(parser);
yp_accepts_block_stack_pop(parser);
- return (yp_node_t *) yp_lambda_node_create(parser, &locals, &opening, params, body, &parser->previous);
+ return (yp_node_t *) yp_lambda_node_create(parser, &locals, &operator, &opening, &parser->previous, params, body);
}
case YP_TOKEN_UPLUS: {
parser_lex(parser);