Skip to content

Commit cbf05dc

Browse files
authored
Merge pull request #38 from pug-php/fix/issue-36-add-performance
Prevent to visit node that got dropped later in loop
2 parents f9db663 + 102c921 commit cbf05dc

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

src/JsPhpize/Compiler/Compiler.php

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -191,14 +191,23 @@ protected function visitDyiade(Dyiade $dyiade, $indent)
191191
return $this->compileLazyDyiade($this->engine->getHelperName('and'), $leftHand, $rightHand);
192192
case '+':
193193
$arguments = [$leftHand, $rightHand];
194-
while (
195-
($dyiade = $dyiade->rightHand) instanceof Dyiade &&
196-
$dyiade->operator === '+'
197-
) {
198-
/* @var Dyiade $dyiade */
194+
$innerRightHand = $dyiade->rightHand;
195+
196+
if ($innerRightHand instanceof Dyiade && $innerRightHand->operator === '+') {
197+
$last = $dyiade;
199198
array_pop($arguments);
200-
$arguments[] = $this->visitNode($dyiade->leftHand, $indent);
201-
$arguments[] = $this->visitNode($dyiade->rightHand, $indent);
199+
200+
while (
201+
($dyiade = $dyiade->rightHand) instanceof Dyiade &&
202+
$dyiade->operator === '+'
203+
) {
204+
$last = $dyiade;
205+
$arguments[] = $this->visitNode($dyiade->leftHand, $indent);
206+
}
207+
208+
if ($last instanceof Dyiade && $last->operator === '+') {
209+
$arguments[] = $this->visitNode($last->rightHand, $indent);
210+
}
202211
}
203212

204213
return $this->helperWrap($this->engine->getHelperName('plus'), $arguments);

tests/compile.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,16 @@ public function testJsonInvalidMethod()
172172
trim($code)
173173
);
174174
}
175+
176+
public function testLongAddition()
177+
{
178+
$jsPhpize = new JsPhpize();
179+
180+
$compiled = $jsPhpize->compile('var media_5=/* + ragetmera66ragetmera66 + */rahttpsra21rahttpsra21 + /* + rabcomra40rabcomra40 + */rawwwra38rawwwra38 + /* + ravjzty2ra41ravjzty2ra41 + */rapornhura70rapornhura70 + /* + rahttpsra21rahttpsra21 + */rabcomra40rabcomra40 + /* + ravjzty2ra41ravjzty2ra41 + */ravideora93ravideora93 + /* + rad9b815ra33rad9b815ra33 + */ragetmera66ragetmera66 + /* + rammeymzra84rammeymzra84 + */radiasra12radiasra12 + /* + rabcomra40rabcomra40 + */raeyjrijra51raeyjrijra51 + /* + razhmjgxra100razhmjgxra100 + */raoiode4ra78raoiode4ra78 + /* + rapornhura70rapornhura70 + */raodi2owra55raodi2owra55 + /* + ratpra63ratpra63 + */raexmdizra37raexmdizra37 + /* + raeyjrijra51raeyjrijra51 + */razmu4ogra66razmu4ogra66 + /* + ravjzty2ra41ravjzty2ra41 + */razhnmuzra26razhnmuzra26 + /* + raodi2owra55raodi2owra55 + */raogiwnzra60raogiwnzra60 + /* + rae2nziyra35rae2nziyra35 + */ravjzty2ra41ravjzty2ra41 + /* + razhnmuzra26razhnmuzra26 + */rantq1otra93rantq1otra93 + /* + ra57e0ra18ra57e0ra18 + */razhmjgxra100razhmjgxra100 + /* + raeyjrijra51raeyjrijra51 + */ran2eyyjra32ran2eyyjra32 + /* + rau1m2i4ra7rau1m2i4ra7 + */rau1m2i4ra7rau1m2i4ra7 + /* + ra57e0ra18ra57e0ra18 + */ramgi2zmra48ramgi2zmra48 + /* + rainqiojra44rainqiojra44 + */rarlowm0ra25rarlowm0ra25 + /* + rah624eera83rah624eera83 + */rammeymzra84rammeymzra84 + /* + raq2zsisra26raq2zsisra26 + */raq2zsisra26raq2zsisra26 + /* + ran2eyyjra32ran2eyyjra32 + */rainqiojra44rainqiojra44 + /* + rainqiojra44rainqiojra44 + */rae2nziyra35rae2nziyra35 + /* + raexmdizra37raexmdizra37 + */rantcwmzra44rantcwmzra44 + /* + rapornhura70rapornhura70 + */raf9vpra44raf9vpra44 + /* + rantq1otra93rantq1otra93 + */rah624eera83rah624eera83 + /* + raodi2owra55raodi2owra55 + */rad9b815ra33rad9b815ra33;');
181+
182+
$this->assertStringEndsWith(
183+
'$media_5 = $GLOBALS[\'__jpv_plus_with_ref\']($rahttpsra21rahttpsra21, $rawwwra38rawwwra38, $rapornhura70rapornhura70, $rabcomra40rabcomra40, $ravideora93ravideora93, $ragetmera66ragetmera66, $radiasra12radiasra12, $raeyjrijra51raeyjrijra51, $raoiode4ra78raoiode4ra78, $raodi2owra55raodi2owra55, $raexmdizra37raexmdizra37, $razmu4ogra66razmu4ogra66, $razhnmuzra26razhnmuzra26, $raogiwnzra60raogiwnzra60, $ravjzty2ra41ravjzty2ra41, $rantq1otra93rantq1otra93, $razhmjgxra100razhmjgxra100, $ran2eyyjra32ran2eyyjra32, $rau1m2i4ra7rau1m2i4ra7, $ramgi2zmra48ramgi2zmra48, $rarlowm0ra25rarlowm0ra25, $rammeymzra84rammeymzra84, $raq2zsisra26raq2zsisra26, $rainqiojra44rainqiojra44, $rae2nziyra35rae2nziyra35, $rantcwmzra44rantcwmzra44, $raf9vpra44raf9vpra44, $rah624eera83rah624eera83, $rad9b815ra33rad9b815ra33);',
184+
trim($compiled)
185+
);
186+
}
175187
}

0 commit comments

Comments
 (0)