From 60b9f856fdbe796acaeac19801712afdd544c082 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 20 Sep 2013 15:35:54 +0200 Subject: [PATCH] [ExpressionLanguage] made ExpressionLanguage::parse return an ParsedExpression instance --- .../DependencyInjection/SecurityExtension.php | 2 +- .../ExpressionLanguage/ExpressionLanguage.php | 23 +++++++++---------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index 3047136283..aaa3a73152 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -615,7 +615,7 @@ class SecurityExtension extends Extension ->register($id, 'Symfony\Component\ExpressionLanguage\SerializedParsedExpression') ->setPublic(false) ->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); diff --git a/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php b/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php index 0a45ca14dd..1db479cd87 100644 --- a/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php +++ b/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php @@ -36,14 +36,14 @@ class ExpressionLanguage /** * Compiles an expression source code. * - * @param string $expression The expression to compile - * @param array $names An array of valid names + * @param Expression|string $expression The expression to compile + * @param array $names An array of valid names * * @return string The compiled PHP source code */ 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()) { - if ($expression instanceof ParsedExpression) { - $expression = $expression->getNodes(); - } else { - $expression = $this->parse($expression, array_keys($values)); - } - - return $expression->evaluate($this->functions, $values); + return $this->parse($expression, array_keys($values))->getNodes()->evaluate($this->functions, $values); } /** @@ -70,14 +64,19 @@ class ExpressionLanguage * * @param Expression|string $expression The expression to parse * - * @return Node A Node tree + * @return ParsedExpression A ParsedExpression instance */ public function parse($expression, $names) { + if ($expression instanceof ParsedExpression) { + return $expression; + } + $key = $expression.'//'.implode('-', $names); 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];