[ruby/yarp] Add closing_loc to WhileNode
https://github.com/ruby/yarp/commit/b4132b876d
This commit is contained in:
parent
df11a08d93
commit
b112e89bb1
@ -1369,6 +1369,7 @@ ProgramNode(0...1237)(
|
|||||||
[SymbolNode(1067...1069)((1067...1068), (1068...1069), nil, "a"),
|
[SymbolNode(1067...1069)((1067...1068), (1068...1069), nil, "a"),
|
||||||
WhileNode(1073...1117)(
|
WhileNode(1073...1117)(
|
||||||
(1073...1078),
|
(1073...1078),
|
||||||
|
(1114...1117),
|
||||||
CallNode(1079...1080)(
|
CallNode(1079...1080)(
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
|
@ -3,6 +3,7 @@ ProgramNode(0...30)(
|
|||||||
StatementsNode(0...30)(
|
StatementsNode(0...30)(
|
||||||
[WhileNode(0...30)(
|
[WhileNode(0...30)(
|
||||||
(0...5),
|
(0...5),
|
||||||
|
(27...30),
|
||||||
CallNode(6...18)(
|
CallNode(6...18)(
|
||||||
CallNode(10...18)(
|
CallNode(10...18)(
|
||||||
CallNode(10...13)(
|
CallNode(10...13)(
|
||||||
|
@ -3,6 +3,7 @@ ProgramNode(0...30)(
|
|||||||
StatementsNode(0...30)(
|
StatementsNode(0...30)(
|
||||||
[WhileNode(0...30)(
|
[WhileNode(0...30)(
|
||||||
(0...5),
|
(0...5),
|
||||||
|
(27...30),
|
||||||
CallNode(6...18)(
|
CallNode(6...18)(
|
||||||
CallNode(10...18)(
|
CallNode(10...18)(
|
||||||
CallNode(10...13)(
|
CallNode(10...13)(
|
||||||
|
@ -308,6 +308,7 @@ ProgramNode(0...999)(
|
|||||||
CallNode(273...290)(
|
CallNode(273...290)(
|
||||||
WhileNode(273...286)(
|
WhileNode(273...286)(
|
||||||
(273...278),
|
(273...278),
|
||||||
|
(283...286),
|
||||||
CallNode(279...282)(
|
CallNode(279...282)(
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
|
@ -32,6 +32,7 @@ ProgramNode(0...620)(
|
|||||||
StatementsNode(27...60)(
|
StatementsNode(27...60)(
|
||||||
[WhileNode(27...60)(
|
[WhileNode(27...60)(
|
||||||
(27...32),
|
(27...32),
|
||||||
|
(57...60),
|
||||||
CallNode(33...36)(
|
CallNode(33...36)(
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
@ -72,6 +73,7 @@ ProgramNode(0...620)(
|
|||||||
StatementsNode(80...106)(
|
StatementsNode(80...106)(
|
||||||
[WhileNode(80...106)(
|
[WhileNode(80...106)(
|
||||||
(90...95),
|
(90...95),
|
||||||
|
nil,
|
||||||
CallNode(96...106)(
|
CallNode(96...106)(
|
||||||
LocalVariableReadNode(96...99)(:foo, 0),
|
LocalVariableReadNode(96...99)(:foo, 0),
|
||||||
nil,
|
nil,
|
||||||
@ -132,6 +134,7 @@ ProgramNode(0...620)(
|
|||||||
StatementsNode(123...142)(
|
StatementsNode(123...142)(
|
||||||
[WhileNode(123...142)(
|
[WhileNode(123...142)(
|
||||||
(133...138),
|
(133...138),
|
||||||
|
nil,
|
||||||
LocalVariableReadNode(139...142)(:foo, 0),
|
LocalVariableReadNode(139...142)(:foo, 0),
|
||||||
StatementsNode(123...132)(
|
StatementsNode(123...132)(
|
||||||
[LocalVariableWriteNode(123...132)(
|
[LocalVariableWriteNode(123...132)(
|
||||||
@ -199,6 +202,7 @@ ProgramNode(0...620)(
|
|||||||
StatementsNode(195...224)(
|
StatementsNode(195...224)(
|
||||||
[WhileNode(195...224)(
|
[WhileNode(195...224)(
|
||||||
(195...200),
|
(195...200),
|
||||||
|
(221...224),
|
||||||
CallNode(201...204)(
|
CallNode(201...204)(
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
@ -266,6 +270,7 @@ ProgramNode(0...620)(
|
|||||||
StatementsNode(258...291)(
|
StatementsNode(258...291)(
|
||||||
[WhileNode(258...291)(
|
[WhileNode(258...291)(
|
||||||
(258...263),
|
(258...263),
|
||||||
|
(288...291),
|
||||||
CallNode(264...267)(
|
CallNode(264...267)(
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
@ -340,6 +345,7 @@ ProgramNode(0...620)(
|
|||||||
StatementsNode(329...362)(
|
StatementsNode(329...362)(
|
||||||
[WhileNode(329...362)(
|
[WhileNode(329...362)(
|
||||||
(329...334),
|
(329...334),
|
||||||
|
(359...362),
|
||||||
LocalVariableReadNode(335...338)(:foo, 0),
|
LocalVariableReadNode(335...338)(:foo, 0),
|
||||||
StatementsNode(345...354)(
|
StatementsNode(345...354)(
|
||||||
[LocalVariableWriteNode(345...354)(
|
[LocalVariableWriteNode(345...354)(
|
||||||
@ -380,6 +386,7 @@ ProgramNode(0...620)(
|
|||||||
StatementsNode(376...401)(
|
StatementsNode(376...401)(
|
||||||
[WhileNode(376...401)(
|
[WhileNode(376...401)(
|
||||||
(392...397),
|
(392...397),
|
||||||
|
nil,
|
||||||
CallNode(398...401)(
|
CallNode(398...401)(
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
@ -424,6 +431,7 @@ ProgramNode(0...620)(
|
|||||||
),
|
),
|
||||||
WhileNode(403...428)(
|
WhileNode(403...428)(
|
||||||
(419...424),
|
(419...424),
|
||||||
|
nil,
|
||||||
CallNode(425...428)(
|
CallNode(425...428)(
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
@ -510,6 +518,7 @@ ProgramNode(0...620)(
|
|||||||
),
|
),
|
||||||
WhileNode(461...492)(
|
WhileNode(461...492)(
|
||||||
(483...488),
|
(483...488),
|
||||||
|
nil,
|
||||||
CallNode(489...492)(
|
CallNode(489...492)(
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
@ -556,15 +565,23 @@ ProgramNode(0...620)(
|
|||||||
),
|
),
|
||||||
1
|
1
|
||||||
),
|
),
|
||||||
WhileNode(493...508)((493...498), FalseNode(499...504)(), nil, 0),
|
WhileNode(493...508)(
|
||||||
|
(493...498),
|
||||||
|
(505...508),
|
||||||
|
FalseNode(499...504)(),
|
||||||
|
nil,
|
||||||
|
0
|
||||||
|
),
|
||||||
WhileNode(509...528)(
|
WhileNode(509...528)(
|
||||||
(509...514),
|
(509...514),
|
||||||
|
(525...528),
|
||||||
FalseNode(515...520)(),
|
FalseNode(515...520)(),
|
||||||
StatementsNode(523...524)([IntegerNode(523...524)()]),
|
StatementsNode(523...524)([IntegerNode(523...524)()]),
|
||||||
0
|
0
|
||||||
),
|
),
|
||||||
WhileNode(529...556)(
|
WhileNode(529...556)(
|
||||||
(529...534),
|
(529...534),
|
||||||
|
(553...556),
|
||||||
ParenthesesNode(535...544)(
|
ParenthesesNode(535...544)(
|
||||||
StatementsNode(536...543)(
|
StatementsNode(536...543)(
|
||||||
[CallNode(536...543)(
|
[CallNode(536...543)(
|
||||||
|
@ -41,6 +41,7 @@ ProgramNode(0...188)(
|
|||||||
),
|
),
|
||||||
WhileNode(36...55)(
|
WhileNode(36...55)(
|
||||||
(46...51),
|
(46...51),
|
||||||
|
nil,
|
||||||
LocalVariableReadNode(52...55)(:foo, 0),
|
LocalVariableReadNode(52...55)(:foo, 0),
|
||||||
StatementsNode(36...45)(
|
StatementsNode(36...45)(
|
||||||
[LocalVariableWriteNode(36...45)(
|
[LocalVariableWriteNode(36...45)(
|
||||||
@ -88,6 +89,7 @@ ProgramNode(0...188)(
|
|||||||
),
|
),
|
||||||
WhileNode(77...96)(
|
WhileNode(77...96)(
|
||||||
(77...82),
|
(77...82),
|
||||||
|
(93...96),
|
||||||
LocalVariableWriteNode(83...88)(
|
LocalVariableWriteNode(83...88)(
|
||||||
:a,
|
:a,
|
||||||
0,
|
0,
|
||||||
@ -159,6 +161,7 @@ ProgramNode(0...188)(
|
|||||||
),
|
),
|
||||||
WhileNode(155...184)(
|
WhileNode(155...184)(
|
||||||
(155...160),
|
(155...160),
|
||||||
|
(181...184),
|
||||||
LocalVariableReadNode(161...164)(:foo, 0),
|
LocalVariableReadNode(161...164)(:foo, 0),
|
||||||
StatementsNode(169...178)(
|
StatementsNode(169...178)(
|
||||||
[LocalVariableWriteNode(169...178)(
|
[LocalVariableWriteNode(169...178)(
|
||||||
|
@ -3,36 +3,42 @@ ProgramNode(0...314)(
|
|||||||
StatementsNode(0...314)(
|
StatementsNode(0...314)(
|
||||||
[WhileNode(0...18)(
|
[WhileNode(0...18)(
|
||||||
(0...5),
|
(0...5),
|
||||||
|
(15...18),
|
||||||
TrueNode(6...10)(),
|
TrueNode(6...10)(),
|
||||||
StatementsNode(12...13)([IntegerNode(12...13)()]),
|
StatementsNode(12...13)([IntegerNode(12...13)()]),
|
||||||
0
|
0
|
||||||
),
|
),
|
||||||
WhileNode(20...32)(
|
WhileNode(20...32)(
|
||||||
(22...27),
|
(22...27),
|
||||||
|
nil,
|
||||||
TrueNode(28...32)(),
|
TrueNode(28...32)(),
|
||||||
StatementsNode(20...21)([IntegerNode(20...21)()]),
|
StatementsNode(20...21)([IntegerNode(20...21)()]),
|
||||||
0
|
0
|
||||||
),
|
),
|
||||||
WhileNode(34...50)(
|
WhileNode(34...50)(
|
||||||
(40...45),
|
(40...45),
|
||||||
|
nil,
|
||||||
TrueNode(46...50)(),
|
TrueNode(46...50)(),
|
||||||
StatementsNode(34...39)([BreakNode(34...39)(nil, (34...39))]),
|
StatementsNode(34...39)([BreakNode(34...39)(nil, (34...39))]),
|
||||||
0
|
0
|
||||||
),
|
),
|
||||||
WhileNode(52...67)(
|
WhileNode(52...67)(
|
||||||
(57...62),
|
(57...62),
|
||||||
|
nil,
|
||||||
TrueNode(63...67)(),
|
TrueNode(63...67)(),
|
||||||
StatementsNode(52...56)([NextNode(52...56)(nil, (52...56))]),
|
StatementsNode(52...56)([NextNode(52...56)(nil, (52...56))]),
|
||||||
0
|
0
|
||||||
),
|
),
|
||||||
WhileNode(69...86)(
|
WhileNode(69...86)(
|
||||||
(76...81),
|
(76...81),
|
||||||
|
nil,
|
||||||
TrueNode(82...86)(),
|
TrueNode(82...86)(),
|
||||||
StatementsNode(69...75)([ReturnNode(69...75)((69...75), nil)]),
|
StatementsNode(69...75)([ReturnNode(69...75)((69...75), nil)]),
|
||||||
0
|
0
|
||||||
),
|
),
|
||||||
WhileNode(88...109)(
|
WhileNode(88...109)(
|
||||||
(99...104),
|
(99...104),
|
||||||
|
nil,
|
||||||
CallNode(105...109)(
|
CallNode(105...109)(
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
@ -64,6 +70,7 @@ ProgramNode(0...314)(
|
|||||||
),
|
),
|
||||||
WhileNode(111...161)(
|
WhileNode(111...161)(
|
||||||
(111...116),
|
(111...116),
|
||||||
|
(158...161),
|
||||||
DefNode(117...149)(
|
DefNode(117...149)(
|
||||||
(126...129),
|
(126...129),
|
||||||
SelfNode(121...125)(),
|
SelfNode(121...125)(),
|
||||||
@ -105,6 +112,7 @@ ProgramNode(0...314)(
|
|||||||
),
|
),
|
||||||
WhileNode(163...210)(
|
WhileNode(163...210)(
|
||||||
(163...168),
|
(163...168),
|
||||||
|
(207...210),
|
||||||
ClassNode(169...198)(
|
ClassNode(169...198)(
|
||||||
[:a],
|
[:a],
|
||||||
(169...174),
|
(169...174),
|
||||||
@ -138,6 +146,7 @@ ProgramNode(0...314)(
|
|||||||
),
|
),
|
||||||
WhileNode(212...260)(
|
WhileNode(212...260)(
|
||||||
(212...217),
|
(212...217),
|
||||||
|
(257...260),
|
||||||
SingletonClassNode(218...248)(
|
SingletonClassNode(218...248)(
|
||||||
[],
|
[],
|
||||||
(218...223),
|
(218...223),
|
||||||
@ -163,6 +172,7 @@ ProgramNode(0...314)(
|
|||||||
),
|
),
|
||||||
WhileNode(262...314)(
|
WhileNode(262...314)(
|
||||||
(262...267),
|
(262...267),
|
||||||
|
(311...314),
|
||||||
SingletonClassNode(268...302)(
|
SingletonClassNode(268...302)(
|
||||||
[:a],
|
[:a],
|
||||||
(268...273),
|
(268...273),
|
||||||
|
@ -3,6 +3,7 @@ ProgramNode(0...23)(
|
|||||||
StatementsNode(0...23)(
|
StatementsNode(0...23)(
|
||||||
[WhileNode(0...23)(
|
[WhileNode(0...23)(
|
||||||
(0...5),
|
(0...5),
|
||||||
|
(20...23),
|
||||||
CallNode(6...16)(
|
CallNode(6...16)(
|
||||||
ParenthesesNode(10...16)(
|
ParenthesesNode(10...16)(
|
||||||
StatementsNode(11...15)([TrueNode(11...15)()]),
|
StatementsNode(11...15)([TrueNode(11...15)()]),
|
||||||
|
@ -3,6 +3,7 @@ ProgramNode(0...197)(
|
|||||||
StatementsNode(0...197)(
|
StatementsNode(0...197)(
|
||||||
[WhileNode(0...52)(
|
[WhileNode(0...52)(
|
||||||
(0...5),
|
(0...5),
|
||||||
|
(49...52),
|
||||||
SingletonClassNode(6...40)(
|
SingletonClassNode(6...40)(
|
||||||
[:a],
|
[:a],
|
||||||
(6...11),
|
(6...11),
|
||||||
@ -34,6 +35,7 @@ ProgramNode(0...197)(
|
|||||||
),
|
),
|
||||||
WhileNode(54...102)(
|
WhileNode(54...102)(
|
||||||
(54...59),
|
(54...59),
|
||||||
|
(99...102),
|
||||||
SingletonClassNode(60...90)(
|
SingletonClassNode(60...90)(
|
||||||
[],
|
[],
|
||||||
(60...65),
|
(60...65),
|
||||||
@ -59,6 +61,7 @@ ProgramNode(0...197)(
|
|||||||
),
|
),
|
||||||
WhileNode(104...151)(
|
WhileNode(104...151)(
|
||||||
(104...109),
|
(104...109),
|
||||||
|
(148...151),
|
||||||
ClassNode(110...139)(
|
ClassNode(110...139)(
|
||||||
[:a],
|
[:a],
|
||||||
(110...115),
|
(110...115),
|
||||||
@ -92,6 +95,7 @@ ProgramNode(0...197)(
|
|||||||
),
|
),
|
||||||
WhileNode(153...197)(
|
WhileNode(153...197)(
|
||||||
(153...158),
|
(153...158),
|
||||||
|
(194...197),
|
||||||
ClassNode(159...185)(
|
ClassNode(159...185)(
|
||||||
[],
|
[],
|
||||||
(159...164),
|
(159...164),
|
||||||
|
@ -27,6 +27,7 @@ ProgramNode(0...178)(
|
|||||||
ConstantPathNode(46...82)(
|
ConstantPathNode(46...82)(
|
||||||
WhileNode(46...74)(
|
WhileNode(46...74)(
|
||||||
(46...51),
|
(46...51),
|
||||||
|
(71...74),
|
||||||
TrueNode(52...56)(),
|
TrueNode(52...56)(),
|
||||||
StatementsNode(58...70)(
|
StatementsNode(58...70)(
|
||||||
[BreakNode(58...70)(
|
[BreakNode(58...70)(
|
||||||
@ -69,6 +70,7 @@ ProgramNode(0...178)(
|
|||||||
ConstantPathNode(137...173)(
|
ConstantPathNode(137...173)(
|
||||||
WhileNode(137...165)(
|
WhileNode(137...165)(
|
||||||
(137...142),
|
(137...142),
|
||||||
|
(162...165),
|
||||||
TrueNode(143...147)(),
|
TrueNode(143...147)(),
|
||||||
StatementsNode(149...161)(
|
StatementsNode(149...161)(
|
||||||
[BreakNode(149...161)(
|
[BreakNode(149...161)(
|
||||||
|
@ -3,6 +3,7 @@ ProgramNode(0...190)(
|
|||||||
StatementsNode(0...190)(
|
StatementsNode(0...190)(
|
||||||
[WhileNode(0...45)(
|
[WhileNode(0...45)(
|
||||||
(0...5),
|
(0...5),
|
||||||
|
(42...45),
|
||||||
DefNode(6...33)(
|
DefNode(6...33)(
|
||||||
(10...13),
|
(10...13),
|
||||||
nil,
|
nil,
|
||||||
@ -44,6 +45,7 @@ ProgramNode(0...190)(
|
|||||||
),
|
),
|
||||||
WhileNode(47...89)(
|
WhileNode(47...89)(
|
||||||
(47...52),
|
(47...52),
|
||||||
|
(86...89),
|
||||||
DefNode(53...77)(
|
DefNode(53...77)(
|
||||||
(57...60),
|
(57...60),
|
||||||
nil,
|
nil,
|
||||||
@ -74,6 +76,7 @@ ProgramNode(0...190)(
|
|||||||
),
|
),
|
||||||
WhileNode(91...141)(
|
WhileNode(91...141)(
|
||||||
(91...96),
|
(91...96),
|
||||||
|
(138...141),
|
||||||
DefNode(97...129)(
|
DefNode(97...129)(
|
||||||
(106...109),
|
(106...109),
|
||||||
SelfNode(101...105)(),
|
SelfNode(101...105)(),
|
||||||
@ -115,6 +118,7 @@ ProgramNode(0...190)(
|
|||||||
),
|
),
|
||||||
WhileNode(143...190)(
|
WhileNode(143...190)(
|
||||||
(143...148),
|
(143...148),
|
||||||
|
(187...190),
|
||||||
DefNode(149...178)(
|
DefNode(149...178)(
|
||||||
(158...161),
|
(158...161),
|
||||||
SelfNode(153...157)(),
|
SelfNode(153...157)(),
|
||||||
|
@ -3,6 +3,7 @@ ProgramNode(0...42)(
|
|||||||
StatementsNode(0...42)(
|
StatementsNode(0...42)(
|
||||||
[WhileNode(0...21)(
|
[WhileNode(0...21)(
|
||||||
(0...5),
|
(0...5),
|
||||||
|
(18...21),
|
||||||
CallNode(6...9)(nil, nil, (6...9), nil, nil, nil, nil, 2, "foo"),
|
CallNode(6...9)(nil, nil, (6...9), nil, nil, nil, nil, 2, "foo"),
|
||||||
StatementsNode(13...17)(
|
StatementsNode(13...17)(
|
||||||
[CallNode(13...17)(
|
[CallNode(13...17)(
|
||||||
@ -21,6 +22,7 @@ ProgramNode(0...42)(
|
|||||||
),
|
),
|
||||||
WhileNode(23...42)(
|
WhileNode(23...42)(
|
||||||
(23...28),
|
(23...28),
|
||||||
|
(39...42),
|
||||||
CallNode(29...32)(nil, nil, (29...32), nil, nil, nil, nil, 2, "foo"),
|
CallNode(29...32)(nil, nil, (29...32), nil, nil, nil, nil, 2, "foo"),
|
||||||
StatementsNode(34...38)(
|
StatementsNode(34...38)(
|
||||||
[CallNode(34...38)(
|
[CallNode(34...38)(
|
||||||
|
@ -3,6 +3,7 @@ ProgramNode(0...14)(
|
|||||||
StatementsNode(0...14)(
|
StatementsNode(0...14)(
|
||||||
[WhileNode(0...14)(
|
[WhileNode(0...14)(
|
||||||
(5...10),
|
(5...10),
|
||||||
|
nil,
|
||||||
CallNode(11...14)(nil, nil, (11...14), nil, nil, nil, nil, 2, "foo"),
|
CallNode(11...14)(nil, nil, (11...14), nil, nil, nil, nil, 2, "foo"),
|
||||||
StatementsNode(0...4)(
|
StatementsNode(0...4)(
|
||||||
[CallNode(0...4)(nil, nil, (0...4), nil, nil, nil, nil, 2, "meth")]
|
[CallNode(0...4)(nil, nil, (0...4), nil, nil, nil, nil, 2, "meth")]
|
||||||
|
@ -3,6 +3,7 @@ ProgramNode(0...24)(
|
|||||||
StatementsNode(0...24)(
|
StatementsNode(0...24)(
|
||||||
[WhileNode(0...24)(
|
[WhileNode(0...24)(
|
||||||
(15...20),
|
(15...20),
|
||||||
|
nil,
|
||||||
CallNode(21...24)(nil, nil, (21...24), nil, nil, nil, nil, 2, "foo"),
|
CallNode(21...24)(nil, nil, (21...24), nil, nil, nil, nil, 2, "foo"),
|
||||||
StatementsNode(0...14)(
|
StatementsNode(0...14)(
|
||||||
[BeginNode(0...14)(
|
[BeginNode(0...14)(
|
||||||
|
@ -2180,6 +2180,8 @@ nodes:
|
|||||||
child_nodes:
|
child_nodes:
|
||||||
- name: keyword_loc
|
- name: keyword_loc
|
||||||
type: location
|
type: location
|
||||||
|
- name: closing_loc
|
||||||
|
type: location?
|
||||||
- name: predicate
|
- name: predicate
|
||||||
type: node
|
type: node
|
||||||
- name: statements
|
- name: statements
|
||||||
|
53
yarp/yarp.c
53
yarp/yarp.c
@ -4293,34 +4293,43 @@ yp_when_node_statements_set(yp_when_node_t *node, yp_statements_node_t *statemen
|
|||||||
|
|
||||||
// Allocate a new WhileNode node.
|
// Allocate a new WhileNode node.
|
||||||
static yp_while_node_t *
|
static yp_while_node_t *
|
||||||
yp_while_node_create(yp_parser_t *parser, const yp_token_t *keyword, yp_node_t *predicate, yp_statements_node_t *statements, yp_node_flags_t flags) {
|
yp_while_node_create(yp_parser_t *parser, const yp_token_t *keyword, const yp_token_t *closing, yp_node_t *predicate, yp_statements_node_t *statements, yp_node_flags_t flags) {
|
||||||
yp_while_node_t *node = YP_ALLOC_NODE(parser, yp_while_node_t);
|
yp_while_node_t *node = YP_ALLOC_NODE(parser, yp_while_node_t);
|
||||||
|
|
||||||
const char *start = NULL;
|
|
||||||
bool has_statements = (statements != NULL) && (statements->body.size != 0);
|
|
||||||
if (has_statements && (keyword->start > statements->base.location.start)) {
|
|
||||||
start = statements->base.location.start;
|
|
||||||
} else {
|
|
||||||
start = keyword->start;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *end = NULL;
|
|
||||||
if (has_statements && (predicate->location.end < statements->base.location.end)) {
|
|
||||||
end = statements->base.location.end;
|
|
||||||
} else {
|
|
||||||
end = predicate->location.end;
|
|
||||||
}
|
|
||||||
|
|
||||||
*node = (yp_while_node_t) {
|
*node = (yp_while_node_t) {
|
||||||
{
|
{
|
||||||
.type = YP_NODE_WHILE_NODE,
|
.type = YP_NODE_WHILE_NODE,
|
||||||
.flags = flags,
|
.flags = flags,
|
||||||
.location = {
|
.location = {
|
||||||
.start = start,
|
.start = keyword->start,
|
||||||
.end = end,
|
.end = closing->end
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.keyword_loc = YP_LOCATION_TOKEN_VALUE(keyword),
|
.keyword_loc = YP_LOCATION_TOKEN_VALUE(keyword),
|
||||||
|
.closing_loc = YP_OPTIONAL_LOCATION_TOKEN_VALUE(closing),
|
||||||
|
.predicate = predicate,
|
||||||
|
.statements = statements
|
||||||
|
};
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate a new WhileNode node.
|
||||||
|
static yp_while_node_t *
|
||||||
|
yp_while_node_modifier_create(yp_parser_t *parser, const yp_token_t *keyword, yp_node_t *predicate, yp_statements_node_t *statements, yp_node_flags_t flags) {
|
||||||
|
yp_while_node_t *node = YP_ALLOC_NODE(parser, yp_while_node_t);
|
||||||
|
|
||||||
|
*node = (yp_while_node_t) {
|
||||||
|
{
|
||||||
|
.type = YP_NODE_WHILE_NODE,
|
||||||
|
.flags = flags,
|
||||||
|
.location = {
|
||||||
|
.start = statements->base.location.start,
|
||||||
|
.end = predicate->location.end
|
||||||
|
},
|
||||||
|
},
|
||||||
|
.keyword_loc = YP_LOCATION_TOKEN_VALUE(keyword),
|
||||||
|
.closing_loc = YP_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE,
|
||||||
.predicate = predicate,
|
.predicate = predicate,
|
||||||
.statements = statements
|
.statements = statements
|
||||||
};
|
};
|
||||||
@ -11912,11 +11921,7 @@ parse_expression_prefix(yp_parser_t *parser, yp_binding_power_t binding_power) {
|
|||||||
expect(parser, YP_TOKEN_KEYWORD_END, "Expected `end` to close `while` statement.");
|
expect(parser, YP_TOKEN_KEYWORD_END, "Expected `end` to close `while` statement.");
|
||||||
}
|
}
|
||||||
|
|
||||||
yp_while_node_t *while_node = yp_while_node_create(parser, &keyword, predicate, statements, 0);
|
return (yp_node_t *) yp_while_node_create(parser, &keyword, &parser->previous, predicate, statements, 0);
|
||||||
if (parser->previous.type == YP_TOKEN_KEYWORD_END) {
|
|
||||||
while_node->base.location.end = parser->previous.end;
|
|
||||||
}
|
|
||||||
return (yp_node_t *) while_node;
|
|
||||||
}
|
}
|
||||||
case YP_TOKEN_PERCENT_LOWER_I: {
|
case YP_TOKEN_PERCENT_LOWER_I: {
|
||||||
parser_lex(parser);
|
parser_lex(parser);
|
||||||
@ -13197,7 +13202,7 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
|
|||||||
yp_statements_node_body_append(statements, node);
|
yp_statements_node_body_append(statements, node);
|
||||||
|
|
||||||
yp_node_t *predicate = parse_expression(parser, binding_power, "Expected a predicate after 'while'");
|
yp_node_t *predicate = parse_expression(parser, binding_power, "Expected a predicate after 'while'");
|
||||||
return (yp_node_t *) yp_while_node_create(parser, &token, predicate, statements, YP_NODE_TYPE_P(node, YP_NODE_BEGIN_NODE) ? YP_LOOP_FLAGS_BEGIN_MODIFIER : 0);
|
return (yp_node_t *) yp_while_node_modifier_create(parser, &token, predicate, statements, YP_NODE_TYPE_P(node, YP_NODE_BEGIN_NODE) ? YP_LOOP_FLAGS_BEGIN_MODIFIER : 0);
|
||||||
}
|
}
|
||||||
case YP_TOKEN_QUESTION_MARK: {
|
case YP_TOKEN_QUESTION_MARK: {
|
||||||
parser_lex(parser);
|
parser_lex(parser);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user