@@ -127,25 +127,26 @@ private static function string(\Iterator $fragments): \Iterator
127127 $ fragments ->next ();
128128
129129 $ buffer = Buffer::empty ();
130- $ escape = false ;
131130
132131 while ($ fragments ->valid ()) {
133- /** @var Fragment $fragment */
134- $ fragment = $ fragments ->current ();
132+ switch ($ fragments ->current ()->value ) {
133+ case $ delimiter :
134+ yield from $ buffer ->flush (TokenType::STRING_QUOTED );
135+ $ fragments ->next ();
136+ return ;
135137
136- if (!$ escape && $ fragment ->value === $ delimiter ) {
137- yield from $ buffer ->flush (TokenType::STRING_QUOTED );
138- $ fragments ->next ();
139- return ;
140- }
138+ case '\\' :
139+ $ buffer ->append ($ fragments ->current ());
140+ $ fragments ->next ();
141141
142- $ escape = $ fragment ->value === '\\' ;
142+ $ buffer ->append ($ fragments ->current ());
143+ $ fragments ->next ();
144+ break ;
143145
144- if (!$ escape ) {
145- $ buffer ->append ($ fragment );
146+ default :
147+ $ buffer ->append ($ fragments ->current ());
148+ $ fragments ->next ();
146149 }
147-
148- $ fragments ->next ();
149150 }
150151 }
151152
@@ -162,40 +163,40 @@ public static function templateLiteral(\Iterator $fragments): \Iterator
162163
163164 $ fragments ->next ();
164165
165- $ escape = false ;
166-
167166 while ($ fragments ->valid ()) {
168- /** @var Fragment $fragment */
169- $ fragment = $ fragments ->current ();
170167
171- if (! $ escape && $ fragment -> value === ' ` ' ) {
172- yield from $ buffer -> flush (TokenType:: STRING_QUOTED );
173- $ buffer ->append ( $ fragments -> current () );
174- yield from $ buffer ->flush (TokenType:: TEMPLATE_LITERAL_END );
175- $ fragments -> next ( );
176- return ;
177- }
168+ switch ( $ fragments -> current ()-> value ) {
169+ case ' ` ' :
170+ yield from $ buffer ->flush (TokenType:: STRING_QUOTED );
171+ $ buffer ->append ( $ fragments -> current () );
172+ yield from $ buffer -> flush (TokenType:: TEMPLATE_LITERAL_END );
173+ $ fragments -> next () ;
174+ return ;
178175
179- if (! $ escape && $ fragment -> value === '$ ' ) {
180- $ dollarSignBuffer = Buffer::empty ()->append ($ fragments ->current ());
181- $ fragments ->next ();
182- $ nextFragment = $ fragments ->current ();
176+ case '$ ' :
177+ $ dollarSignBuffer = Buffer::empty ()->append ($ fragments ->current ());
178+ $ fragments ->next ();
179+ $ nextFragment = $ fragments ->current ();
183180
184- if ($ nextFragment ->value === '{ ' ) {
185- yield from $ buffer ->flush (TokenType::STRING_QUOTED );
186- yield from $ dollarSignBuffer ->flush (TokenType::DOLLAR );
187- yield from self ::block ($ fragments );
188- continue ;
189- }
190- }
181+ if ($ nextFragment ->value === '{ ' ) {
182+ yield from $ buffer ->flush (TokenType::STRING_QUOTED );
183+ yield from $ dollarSignBuffer ->flush (TokenType::DOLLAR );
184+ yield from self ::block ($ fragments );
185+ }
186+ break ;
191187
192- $ escape = $ fragment ->value === '\\' ;
188+ case '\\' :
189+ $ buffer ->append ($ fragments ->current ());
190+ $ fragments ->next ();
193191
194- if (! $ escape ) {
195- $ buffer -> append ( $ fragment );
196- }
192+ $ buffer -> append ( $ fragments -> current ());
193+ $ fragments -> next ( );
194+ break ;
197195
198- $ fragments ->next ();
196+ default :
197+ $ buffer ->append ($ fragments ->current ());
198+ $ fragments ->next ();
199+ }
199200 }
200201 }
201202
0 commit comments