Fix '~=' operator

This commit is contained in:
bzick 2014-06-08 23:50:43 +04:00
parent f6c4da8297
commit f3de50813e
2 changed files with 15 additions and 8 deletions

View File

@ -724,16 +724,21 @@ class Template extends Render
break;
}
} elseif ($tokens->is('~')) { // string concatenation operator: 'asd' ~ $var
$concat = array(array_pop($exp));
while ($tokens->is('~')) {
$tokens->next();
if ($tokens->is(T_LNUMBER, T_DNUMBER)) {
$concat[] = "strval(" . $this->parseTerm($tokens) . ")";
} else {
$concat[] = $this->parseTerm($tokens);
if($tokens->isNext('=')) { // ~=
$exp[] = ".=";
$tokens->next()->next();
} else {
$concat = array(array_pop($exp));
while ($tokens->is('~')) {
$tokens->next();
if ($tokens->is(T_LNUMBER, T_DNUMBER)) {
$concat[] = "strval(" . $this->parseTerm($tokens) . ")";
} else {
$concat[] = $this->parseTerm($tokens);
}
}
$exp[] = "(" . implode(".", $concat) . ")";
}
$exp[] = "(" . implode(".", $concat) . ")";
} else {
break;
}

View File

@ -1170,6 +1170,7 @@ class TemplateTest extends TestCase
array('{"string" ~ ++$one ~ "end"}', "string2end"),
array('{"string" ~ "one" ~ "end"}', "stringoneend"),
array('{"string" ~ 1 ~ "end"}', "string1end"),
array('{$one ~= "string"} is {$one}', "1string is 1string"),
);
}
@ -1536,6 +1537,7 @@ class TemplateTest extends TestCase
/**
* @dataProvider providerConcat
* @group testConcat
*/
public function testConcat($code, $result)
{