[ExpressionLanguage] made ExpressionLanguage::parse return an ParsedExpression instance

This commit is contained in:
Fabien Potencier 2013-09-20 15:35:54 +02:00
parent 77d3a857da
commit 60b9f856fd
2 changed files with 12 additions and 13 deletions

View File

@ -615,7 +615,7 @@ class SecurityExtension extends Extension
->register($id, 'Symfony\Component\ExpressionLanguage\SerializedParsedExpression') ->register($id, 'Symfony\Component\ExpressionLanguage\SerializedParsedExpression')
->setPublic(false) ->setPublic(false)
->addArgument($expression) ->addArgument($expression)
->addArgument(serialize($this->getExpressionLanguage()->parse($expression, array('token', 'user', 'object', 'roles', 'request')))) ->addArgument(serialize($this->getExpressionLanguage()->parse($expression, array('token', 'user', 'object', 'roles', 'request'))->getNodes()))
; ;
return $this->expressions[$id] = new Reference($id); return $this->expressions[$id] = new Reference($id);

View File

@ -36,14 +36,14 @@ class ExpressionLanguage
/** /**
* Compiles an expression source code. * Compiles an expression source code.
* *
* @param string $expression The expression to compile * @param Expression|string $expression The expression to compile
* @param array $names An array of valid names * @param array $names An array of valid names
* *
* @return string The compiled PHP source code * @return string The compiled PHP source code
*/ */
public function compile($expression, $names = array()) public function compile($expression, $names = array())
{ {
return $this->getCompiler()->compile($this->parse($expression, $names))->getSource(); return $this->getCompiler()->compile($this->parse($expression, $names)->getNodes())->getSource();
} }
/** /**
@ -56,13 +56,7 @@ class ExpressionLanguage
*/ */
public function evaluate($expression, $values = array()) public function evaluate($expression, $values = array())
{ {
if ($expression instanceof ParsedExpression) { return $this->parse($expression, array_keys($values))->getNodes()->evaluate($this->functions, $values);
$expression = $expression->getNodes();
} else {
$expression = $this->parse($expression, array_keys($values));
}
return $expression->evaluate($this->functions, $values);
} }
/** /**
@ -70,14 +64,19 @@ class ExpressionLanguage
* *
* @param Expression|string $expression The expression to parse * @param Expression|string $expression The expression to parse
* *
* @return Node A Node tree * @return ParsedExpression A ParsedExpression instance
*/ */
public function parse($expression, $names) public function parse($expression, $names)
{ {
if ($expression instanceof ParsedExpression) {
return $expression;
}
$key = $expression.'//'.implode('-', $names); $key = $expression.'//'.implode('-', $names);
if (!isset($this->cache[$key])) { if (!isset($this->cache[$key])) {
$this->cache[$key] = $this->getParser()->parse($this->getLexer()->tokenize((string) $expression), $names); $nodes = $this->getParser()->parse($this->getLexer()->tokenize((string) $expression), $names);
$this->cache[$key] = new ParsedExpression((string) $expression, $nodes);
} }
return $this->cache[$key]; return $this->cache[$key];