{
public function compile(Twig_Compiler $compiler)
{
+ $left = $compiler->getVarName();
+ $right = $compiler->getVarName();
$compiler
- ->raw('(0 === substr_compare(')
+ ->raw(sprintf('(is_string($%s = ', $left))
->subcompile($this->getNode('left'))
- ->raw(', ')
+ ->raw(sprintf(') && is_string($%s = ', $right))
->subcompile($this->getNode('right'))
- ->raw(', -strlen(')
- ->subcompile($this->getNode('right'))
- ->raw(')))')
+ ->raw(sprintf(') && (\'\' === $%2$s || $%2$s === substr($%1$s, -strlen($%2$s))))', $left, $right))
;
}
{
public function compile(Twig_Compiler $compiler)
{
- $varName = $compiler->getVarName();
+ $left = $compiler->getVarName();
+ $right = $compiler->getVarName();
$compiler
- ->raw(sprintf("(('' === (\$%s = ", $varName))
- ->subcompile($this->getNode('right'))
- ->raw(')) ? true : 0 === strpos(')
+ ->raw(sprintf('(is_string($%s = ', $left))
->subcompile($this->getNode('left'))
- ->raw(sprintf(', $%s))', $varName))
+ ->raw(sprintf(') && is_string($%s = ', $right))
+ ->subcompile($this->getNode('right'))
+ ->raw(sprintf(') && (\'\' === $%2$s || 0 === strpos($%1$s, $%2$s)))', $left, $right))
;
}
{{ 'foo' ends with 'o' ? 'OK' : 'KO' }}
{{ not ('foo' ends with 'f') ? 'OK' : 'KO' }}
{{ not ('foo' ends with 'foowaytoolong') ? 'OK' : 'KO' }}
+{{ 'foo' ends with '' ? 'OK' : 'KO' }}
+{{ '1' ends with true ? 'OK' : 'KO' }}
+{{ 1 ends with true ? 'OK' : 'KO' }}
+{{ 0 ends with false ? 'OK' : 'KO' }}
+{{ '' ends with false ? 'OK' : 'KO' }}
+{{ false ends with false ? 'OK' : 'KO' }}
+{{ false ends with '' ? 'OK' : 'KO' }}
--DATA--
return array()
--EXPECT--
OK
OK
OK
+OK
+KO
+KO
+KO
+KO
+KO
+KO
{{ '1' starts with true ? 'OK' : 'KO' }}
{{ '' starts with false ? 'OK' : 'KO' }}
{{ 'a' starts with false ? 'OK' : 'KO' }}
+{{ false starts with '' ? 'OK' : 'KO' }}
--DATA--
return array()
--EXPECT--
KO
KO
KO
+KO