aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/vendor/symfony/expression-language
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-09 10:55:03 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-09 13:09:38 +0100
commit04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa (patch)
tree5c691241355c943a3c68ddb06b8cf8c60aa11319 /srcs/phpmyadmin/vendor/symfony/expression-language
parent7e0d85db834d6351ed85d01e5126ac31dc510b86 (diff)
downloadft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.gz
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.tar.bz2
ft_server-04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa.zip
phpmyadmin working
Diffstat (limited to 'srcs/phpmyadmin/vendor/symfony/expression-language')
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/CHANGELOG.md20
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Compiler.php148
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Expression.php37
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionFunction.php98
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionFunctionProviderInterface.php23
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionLanguage.php166
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/LICENSE19
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Lexer.php103
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Node/ArgumentsNode.php40
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Node/ArrayNode.php118
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Node/BinaryNode.php170
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Node/ConditionalNode.php56
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Node/ConstantNode.php81
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Node/FunctionNode.php67
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Node/GetAttrNode.php114
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Node/NameNode.php45
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Node/Node.php113
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Node/UnaryNode.php66
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/ParsedExpression.php36
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Parser.php379
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/README.md15
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/SerializedParsedExpression.php37
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/SyntaxError.php41
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/Token.php66
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/TokenStream.php91
-rw-r--r--srcs/phpmyadmin/vendor/symfony/expression-language/composer.json35
26 files changed, 2184 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/CHANGELOG.md b/srcs/phpmyadmin/vendor/symfony/expression-language/CHANGELOG.md
new file mode 100644
index 0000000..6c50b2e
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/expression-language/CHANGELOG.md
@@ -0,0 +1,20 @@
+CHANGELOG
+=========
+
+4.0.0
+-----
+
+ * the first argument of the `ExpressionLanguage` constructor must be an instance
+ of `CacheItemPoolInterface`
+ * removed the `ArrayParserCache` and `ParserCacheAdapter` classes
+ * removed the `ParserCacheInterface`
+
+2.6.0
+-----
+
+ * Added ExpressionFunction and ExpressionFunctionProviderInterface
+
+2.4.0
+-----
+
+ * added the component
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/Compiler.php b/srcs/phpmyadmin/vendor/symfony/expression-language/Compiler.php
new file mode 100644
index 0000000..604f04c
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/expression-language/Compiler.php
@@ -0,0 +1,148 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\ExpressionLanguage;
+
+use Symfony\Contracts\Service\ResetInterface;
+
+/**
+ * Compiles a node to PHP code.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Compiler implements ResetInterface
+{
+ private $source;
+ private $functions;
+
+ public function __construct(array $functions)
+ {
+ $this->functions = $functions;
+ }
+
+ public function getFunction($name)
+ {
+ return $this->functions[$name];
+ }
+
+ /**
+ * Gets the current PHP code after compilation.
+ *
+ * @return string The PHP code
+ */
+ public function getSource()
+ {
+ return $this->source;
+ }
+
+ public function reset()
+ {
+ $this->source = '';
+
+ return $this;
+ }
+
+ /**
+ * Compiles a node.
+ *
+ * @return $this
+ */
+ public function compile(Node\Node $node)
+ {
+ $node->compile($this);
+
+ return $this;
+ }
+
+ public function subcompile(Node\Node $node)
+ {
+ $current = $this->source;
+ $this->source = '';
+
+ $node->compile($this);
+
+ $source = $this->source;
+ $this->source = $current;
+
+ return $source;
+ }
+
+ /**
+ * Adds a raw string to the compiled code.
+ *
+ * @param string $string The string
+ *
+ * @return $this
+ */
+ public function raw($string)
+ {
+ $this->source .= $string;
+
+ return $this;
+ }
+
+ /**
+ * Adds a quoted string to the compiled code.
+ *
+ * @param string $value The string
+ *
+ * @return $this
+ */
+ public function string($value)
+ {
+ $this->source .= sprintf('"%s"', addcslashes($value, "\0\t\"\$\\"));
+
+ return $this;
+ }
+
+ /**
+ * Returns a PHP representation of a given value.
+ *
+ * @param mixed $value The value to convert
+ *
+ * @return $this
+ */
+ public function repr($value)
+ {
+ if (\is_int($value) || \is_float($value)) {
+ if (false !== $locale = setlocale(LC_NUMERIC, 0)) {
+ setlocale(LC_NUMERIC, 'C');
+ }
+
+ $this->raw($value);
+
+ if (false !== $locale) {
+ setlocale(LC_NUMERIC, $locale);
+ }
+ } elseif (null === $value) {
+ $this->raw('null');
+ } elseif (\is_bool($value)) {
+ $this->raw($value ? 'true' : 'false');
+ } elseif (\is_array($value)) {
+ $this->raw('[');
+ $first = true;
+ foreach ($value as $key => $value) {
+ if (!$first) {
+ $this->raw(', ');
+ }
+ $first = false;
+ $this->repr($key);
+ $this->raw(' => ');
+ $this->repr($value);
+ }
+ $this->raw(']');
+ } else {
+ $this->string($value);
+ }
+
+ return $this;
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/Expression.php b/srcs/phpmyadmin/vendor/symfony/expression-language/Expression.php
new file mode 100644
index 0000000..59d0e2a
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/expression-language/Expression.php
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\ExpressionLanguage;
+
+/**
+ * Represents an expression.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Expression
+{
+ protected $expression;
+
+ public function __construct(string $expression)
+ {
+ $this->expression = $expression;
+ }
+
+ /**
+ * Gets the expression.
+ *
+ * @return string The expression
+ */
+ public function __toString()
+ {
+ return $this->expression;
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionFunction.php b/srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionFunction.php
new file mode 100644
index 0000000..2bc91e8
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionFunction.php
@@ -0,0 +1,98 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\ExpressionLanguage;
+
+/**
+ * Represents a function that can be used in an expression.
+ *
+ * A function is defined by two PHP callables. The callables are used
+ * by the language to compile and/or evaluate the function.
+ *
+ * The "compiler" function is used at compilation time and must return a
+ * PHP representation of the function call (it receives the function
+ * arguments as arguments).
+ *
+ * The "evaluator" function is used for expression evaluation and must return
+ * the value of the function call based on the values defined for the
+ * expression (it receives the values as a first argument and the function
+ * arguments as remaining arguments).
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class ExpressionFunction
+{
+ private $name;
+ private $compiler;
+ private $evaluator;
+
+ /**
+ * @param string $name The function name
+ * @param callable $compiler A callable able to compile the function
+ * @param callable $evaluator A callable able to evaluate the function
+ */
+ public function __construct(string $name, callable $compiler, callable $evaluator)
+ {
+ $this->name = $name;
+ $this->compiler = $compiler;
+ $this->evaluator = $evaluator;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ public function getCompiler()
+ {
+ return $this->compiler;
+ }
+
+ public function getEvaluator()
+ {
+ return $this->evaluator;
+ }
+
+ /**
+ * Creates an ExpressionFunction from a PHP function name.
+ *
+ * @param string $phpFunctionName The PHP function name
+ * @param string|null $expressionFunctionName The expression function name (default: same than the PHP function name)
+ *
+ * @return self
+ *
+ * @throws \InvalidArgumentException if given PHP function name does not exist
+ * @throws \InvalidArgumentException if given PHP function name is in namespace
+ * and expression function name is not defined
+ */
+ public static function fromPhp($phpFunctionName, $expressionFunctionName = null)
+ {
+ $phpFunctionName = ltrim($phpFunctionName, '\\');
+ if (!\function_exists($phpFunctionName)) {
+ throw new \InvalidArgumentException(sprintf('PHP function "%s" does not exist.', $phpFunctionName));
+ }
+
+ $parts = explode('\\', $phpFunctionName);
+ if (!$expressionFunctionName && \count($parts) > 1) {
+ throw new \InvalidArgumentException(sprintf('An expression function name must be defined when PHP function "%s" is namespaced.', $phpFunctionName));
+ }
+
+ $compiler = function () use ($phpFunctionName) {
+ return sprintf('\%s(%s)', $phpFunctionName, implode(', ', \func_get_args()));
+ };
+
+ $evaluator = function () use ($phpFunctionName) {
+ return $phpFunctionName(...\array_slice(\func_get_args(), 1));
+ };
+
+ return new self($expressionFunctionName ?: end($parts), $compiler, $evaluator);
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionFunctionProviderInterface.php b/srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionFunctionProviderInterface.php
new file mode 100644
index 0000000..414b013
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionFunctionProviderInterface.php
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\ExpressionLanguage;
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+interface ExpressionFunctionProviderInterface
+{
+ /**
+ * @return ExpressionFunction[] An array of Function instances
+ */
+ public function getFunctions();
+}
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionLanguage.php b/srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionLanguage.php
new file mode 100644
index 0000000..a257ec7
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/expression-language/ExpressionLanguage.php
@@ -0,0 +1,166 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\ExpressionLanguage;
+
+use Psr\Cache\CacheItemPoolInterface;
+use Symfony\Component\Cache\Adapter\ArrayAdapter;
+
+/**
+ * Allows to compile and evaluate expressions written in your own DSL.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class ExpressionLanguage
+{
+ private $cache;
+ private $lexer;
+ private $parser;
+ private $compiler;
+
+ protected $functions = [];
+
+ /**
+ * @param ExpressionFunctionProviderInterface[] $providers
+ */
+ public function __construct(CacheItemPoolInterface $cache = null, array $providers = [])
+ {
+ $this->cache = $cache ?: new ArrayAdapter();
+ $this->registerFunctions();
+ foreach ($providers as $provider) {
+ $this->registerProvider($provider);
+ }
+ }
+
+ /**
+ * Compiles an expression source code.
+ *
+ * @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 = [])
+ {
+ return $this->getCompiler()->compile($this->parse($expression, $names)->getNodes())->getSource();
+ }
+
+ /**
+ * Evaluate an expression.
+ *
+ * @param Expression|string $expression The expression to compile
+ * @param array $values An array of values
+ *
+ * @return mixed The result of the evaluation of the expression
+ */
+ public function evaluate($expression, $values = [])
+ {
+ return $this->parse($expression, array_keys($values))->getNodes()->evaluate($this->functions, $values);
+ }
+
+ /**
+ * Parses an expression.
+ *
+ * @param Expression|string $expression The expression to parse
+ * @param array $names An array of valid names
+ *
+ * @return ParsedExpression A ParsedExpression instance
+ */
+ public function parse($expression, $names)
+ {
+ if ($expression instanceof ParsedExpression) {
+ return $expression;
+ }
+
+ asort($names);
+ $cacheKeyItems = [];
+
+ foreach ($names as $nameKey => $name) {
+ $cacheKeyItems[] = \is_int($nameKey) ? $name : $nameKey.':'.$name;
+ }
+
+ $cacheItem = $this->cache->getItem(rawurlencode($expression.'//'.implode('|', $cacheKeyItems)));
+
+ if (null === $parsedExpression = $cacheItem->get()) {
+ $nodes = $this->getParser()->parse($this->getLexer()->tokenize((string) $expression), $names);
+ $parsedExpression = new ParsedExpression((string) $expression, $nodes);
+
+ $cacheItem->set($parsedExpression);
+ $this->cache->save($cacheItem);
+ }
+
+ return $parsedExpression;
+ }
+
+ /**
+ * Registers a function.
+ *
+ * @param string $name The function name
+ * @param callable $compiler A callable able to compile the function
+ * @param callable $evaluator A callable able to evaluate the function
+ *
+ * @throws \LogicException when registering a function after calling evaluate(), compile() or parse()
+ *
+ * @see ExpressionFunction
+ */
+ public function register($name, callable $compiler, callable $evaluator)
+ {
+ if (null !== $this->parser) {
+ throw new \LogicException('Registering functions after calling evaluate(), compile() or parse() is not supported.');
+ }
+
+ $this->functions[$name] = ['compiler' => $compiler, 'evaluator' => $evaluator];
+ }
+
+ public function addFunction(ExpressionFunction $function)
+ {
+ $this->register($function->getName(), $function->getCompiler(), $function->getEvaluator());
+ }
+
+ public function registerProvider(ExpressionFunctionProviderInterface $provider)
+ {
+ foreach ($provider->getFunctions() as $function) {
+ $this->addFunction($function);
+ }
+ }
+
+ protected function registerFunctions()
+ {
+ $this->addFunction(ExpressionFunction::fromPhp('constant'));
+ }
+
+ private function getLexer(): Lexer
+ {
+ if (null === $this->lexer) {
+ $this->lexer = new Lexer();
+ }
+
+ return $this->lexer;
+ }
+
+ private function getParser(): Parser
+ {
+ if (null === $this->parser) {
+ $this->parser = new Parser($this->functions);
+ }
+
+ return $this->parser;
+ }
+
+ private function getCompiler(): Compiler
+ {
+ if (null === $this->compiler) {
+ $this->compiler = new Compiler($this->functions);
+ }
+
+ return $this->compiler->reset();
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/LICENSE b/srcs/phpmyadmin/vendor/symfony/expression-language/LICENSE
new file mode 100644
index 0000000..a677f43
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/expression-language/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2004-2019 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/Lexer.php b/srcs/phpmyadmin/vendor/symfony/expression-language/Lexer.php
new file mode 100644
index 0000000..95b9070
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/expression-language/Lexer.php
@@ -0,0 +1,103 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\ExpressionLanguage;
+
+/**
+ * Lexes an expression.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Lexer
+{
+ /**
+ * Tokenizes an expression.
+ *
+ * @param string $expression The expression to tokenize
+ *
+ * @return TokenStream A token stream instance
+ *
+ * @throws SyntaxError
+ */
+ public function tokenize($expression)
+ {
+ $expression = str_replace(["\r", "\n", "\t", "\v", "\f"], ' ', $expression);
+ $cursor = 0;
+ $tokens = [];
+ $brackets = [];
+ $end = \strlen($expression);
+
+ while ($cursor < $end) {
+ if (' ' == $expression[$cursor]) {
+ ++$cursor;
+
+ continue;
+ }
+
+ if (preg_match('/[0-9]+(?:\.[0-9]+)?([Ee][\+\-][0-9]+)?/A', $expression, $match, 0, $cursor)) {
+ // numbers
+ $number = (float) $match[0]; // floats
+ if (preg_match('/^[0-9]+$/', $match[0]) && $number <= PHP_INT_MAX) {
+ $number = (int) $match[0]; // integers lower than the maximum
+ }
+ $tokens[] = new Token(Token::NUMBER_TYPE, $number, $cursor + 1);
+ $cursor += \strlen($match[0]);
+ } elseif (false !== strpos('([{', $expression[$cursor])) {
+ // opening bracket
+ $brackets[] = [$expression[$cursor], $cursor];
+
+ $tokens[] = new Token(Token::PUNCTUATION_TYPE, $expression[$cursor], $cursor + 1);
+ ++$cursor;
+ } elseif (false !== strpos(')]}', $expression[$cursor])) {
+ // closing bracket
+ if (empty($brackets)) {
+ throw new SyntaxError(sprintf('Unexpected "%s"', $expression[$cursor]), $cursor, $expression);
+ }
+
+ list($expect, $cur) = array_pop($brackets);
+ if ($expression[$cursor] != strtr($expect, '([{', ')]}')) {
+ throw new SyntaxError(sprintf('Unclosed "%s"', $expect), $cur, $expression);
+ }
+
+ $tokens[] = new Token(Token::PUNCTUATION_TYPE, $expression[$cursor], $cursor + 1);
+ ++$cursor;
+ } elseif (preg_match('/"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/As', $expression, $match, 0, $cursor)) {
+ // strings
+ $tokens[] = new Token(Token::STRING_TYPE, stripcslashes(substr($match[0], 1, -1)), $cursor + 1);
+ $cursor += \strlen($match[0]);
+ } elseif (preg_match('/not in(?=[\s(])|\!\=\=|not(?=[\s(])|and(?=[\s(])|\=\=\=|\>\=|or(?=[\s(])|\<\=|\*\*|\.\.|in(?=[\s(])|&&|\|\||matches|\=\=|\!\=|\*|~|%|\/|\>|\||\!|\^|&|\+|\<|\-/A', $expression, $match, 0, $cursor)) {
+ // operators
+ $tokens[] = new Token(Token::OPERATOR_TYPE, $match[0], $cursor + 1);
+ $cursor += \strlen($match[0]);
+ } elseif (false !== strpos('.,?:', $expression[$cursor])) {
+ // punctuation
+ $tokens[] = new Token(Token::PUNCTUATION_TYPE, $expression[$cursor], $cursor + 1);
+ ++$cursor;
+ } elseif (preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/A', $expression, $match, 0, $cursor)) {
+ // names
+ $tokens[] = new Token(Token::NAME_TYPE, $match[0], $cursor + 1);
+ $cursor += \strlen($match[0]);
+ } else {
+ // unlexable
+ throw new SyntaxError(sprintf('Unexpected character "%s"', $expression[$cursor]), $cursor, $expression);
+ }
+ }
+
+ $tokens[] = new Token(Token::EOF_TYPE, null, $cursor + 1);
+
+ if (!empty($brackets)) {
+ list($expect, $cur) = array_pop($brackets);
+ throw new SyntaxError(sprintf('Unclosed "%s"', $expect), $cur, $expression);
+ }
+
+ return new TokenStream($tokens, $expression);
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/Node/ArgumentsNode.php b/srcs/phpmyadmin/vendor/symfony/expression-language/Node/ArgumentsNode.php
new file mode 100644
index 0000000..e9849a4
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/expression-language/Node/ArgumentsNode.php
@@ -0,0 +1,40 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\ExpressionLanguage\Node;
+
+use Symfony\Component\ExpressionLanguage\Compiler;
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @internal
+ */
+class ArgumentsNode extends ArrayNode
+{
+ public function compile(Compiler $compiler)
+ {
+ $this->compileArguments($compiler, false);
+ }
+
+ public function toArray()
+ {
+ $array = [];
+
+ foreach ($this->getKeyValuePairs() as $pair) {
+ $array[] = $pair['value'];
+ $array[] = ', ';
+ }
+ array_pop($array);
+
+ return $array;
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/Node/ArrayNode.php b/srcs/phpmyadmin/vendor/symfony/expression-language/Node/ArrayNode.php
new file mode 100644
index 0000000..921319a
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/expression-language/Node/ArrayNode.php
@@ -0,0 +1,118 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\ExpressionLanguage\Node;
+
+use Symfony\Component\ExpressionLanguage\Compiler;
+
+/**
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @internal
+ */
+class ArrayNode extends Node
+{
+ protected $index;
+
+ public function __construct()
+ {
+ $this->index = -1;
+ }
+
+ public function addElement(Node $value, Node $key = null)
+ {
+ if (null === $key) {
+ $key = new ConstantNode(++$this->index);
+ }
+
+ array_push($this->nodes, $key, $value);
+ }
+
+ /**
+ * Compiles the node to PHP.
+ */
+ public function compile(Compiler $compiler)
+ {
+ $compiler->raw('[');
+ $this->compileArguments($compiler);
+ $compiler->raw(']');
+ }
+
+ public function evaluate($functions, $values)
+ {
+ $result = [];
+ foreach ($this->getKeyValuePairs() as $pair) {
+ $result[$pair['key']->evaluate($functions, $values)] = $pair['value']->evaluate($functions, $values);
+ }
+
+ return $result;
+ }
+
+ public function toArray()
+ {
+ $value = [];
+ foreach ($this->getKeyValuePairs() as $pair) {
+ $value[$pair['key']->attributes['value']] = $pair['value'];
+ }
+
+ $array = [];
+
+ if ($this->isHash($value)) {
+ foreach ($value as $k => $v) {
+ $array[] = ', ';
+ $array[] = new ConstantNode($k);
+ $array[] = ': ';
+ $array[] = $v;
+ }
+ $array[0] = '{';
+ $array[] = '}';
+ } else {
+ foreach ($value as $v) {
+ $array[] = ', ';
+ $array[] = $v;
+ }
+ $array[0] = '[';
+ $array[] = ']';
+ }
+
+ return $array;
+ }
+
+ protected function getKeyValuePairs()
+ {
+ $pairs = [];
+ foreach (array_chunk($this->nodes, 2) as $pair) {
+ $pairs[] = ['key' => $pair[0], 'value' => $pair[1]];
+ }
+
+ return $pairs;
+ }
+
+ protected function compileArguments(Compiler $compiler, $withKeys = true)
+ {
+ $first = true;
+ foreach ($this->getKeyValuePairs() as $pair) {
+ if (!$first) {
+ $compiler->raw(', ');
+ }
+ $first = false;
+
+ if ($withKeys) {
+ $compiler
+ ->compile($pair['key'])
+ ->raw(' => ')
+ ;
+ }
+
+ $compiler->compile($pair['value']);
+ }
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/symfony/expression-language/Node/BinaryNode.php b/srcs/phpmyadmin/vendor/symfony/expression-language/Node/BinaryNode.php
new file mode 100644
i