From 3288d8d98d58e5dc09e225db500cc149abe173be Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 3 Feb 2025 12:37:23 +0100 Subject: [PATCH] Reimplement the cache tag in an adhoc way --- .../TokenParser/CacheTokenParser.php | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/extra/cache-extra/TokenParser/CacheTokenParser.php b/extra/cache-extra/TokenParser/CacheTokenParser.php index b5fa3b87a..dcc2ddd28 100644 --- a/extra/cache-extra/TokenParser/CacheTokenParser.php +++ b/extra/cache-extra/TokenParser/CacheTokenParser.php @@ -31,24 +31,26 @@ class CacheTokenParser extends AbstractTokenParser $tags = null; while ($stream->test(Token::NAME_TYPE)) { $k = $stream->getCurrent()->getValue(); - $stream->next(); - $args = $expressionParser->parseNamedArguments(); + if (!in_array($k, ['ttl', 'tags'])) { + throw new SyntaxError(\sprintf('Unknown "%s" configuration.', $k), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } - switch ($k) { - case 'ttl': - if (1 !== \count($args)) { - throw new SyntaxError(\sprintf('The "ttl" modifier takes exactly one argument (%d given).', \count($args)), $stream->getCurrent()->getLine(), $stream->getSourceContext()); - } - $ttl = $args->getNode('0'); - break; - case 'tags': - if (1 !== \count($args)) { - throw new SyntaxError(\sprintf('The "tags" modifier takes exactly one argument (%d given).', \count($args)), $stream->getCurrent()->getLine(), $stream->getSourceContext()); - } - $tags = $args->getNode('0'); - break; - default: - throw new SyntaxError(\sprintf('Unknown "%s" configuration.', $k), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + $stream->next(); + $stream->expect(Token::PUNCTUATION_TYPE, '('); + $line = $stream->getCurrent()->getLine(); + if ($stream->test(Token::PUNCTUATION_TYPE, ')')) { + throw new SyntaxError(\sprintf('The "%s" modifier takes exactly one argument (0 given).', $k), $line, $stream->getSourceContext()); + } + $arg = $expressionParser->parseExpression(); + if ($stream->test(Token::PUNCTUATION_TYPE, ',')) { + throw new SyntaxError(\sprintf('The "%s" modifier takes exactly one argument (2 given).', $k), $line, $stream->getSourceContext()); + } + $stream->expect(Token::PUNCTUATION_TYPE, ')'); + + if ('ttl' === $k) { + $ttl = $arg; + } elseif ('tags' === $k) { + $tags = $arg; } }