From 2412115f41104be5c5649d547b547c90c4afe905 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Mon, 8 May 2023 17:26:22 -0600 Subject: [PATCH] TwigDeferredExtension updates --- CHANGELOG.md | 9 ++++--- .../DeferredExtension/DeferredDeclareNode.php | 27 +++++++++++++++++++ ...ionNode.php => DeferredInitializeNode.php} | 2 +- .../DeferredExtension/DeferredNodeVisitor.php | 5 ++-- .../DeferredNodeVisitorCompat.php | 5 ++-- .../DeferredExtension/DeferredResolveNode.php | 27 +++++++++++++++++++ 6 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 system/src/Twig/DeferredExtension/DeferredDeclareNode.php rename system/src/Twig/DeferredExtension/{DeferredExtensionNode.php => DeferredInitializeNode.php} (92%) create mode 100644 system/src/Twig/DeferredExtension/DeferredResolveNode.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e7c86555..5a7a7c6f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,12 @@ ## mm/dd/2023 1. [](#improved) - * Removed `FILTER_SANITIZE_STRING` input filter in favor of `htmlspecialchars(strip_tags())` - * Added `GRAV_SANITIZE_STRING` constant to replace `FILTER_SANITIZE_STRING` - * Support non-deprecated style dynamic properties in `Parsedown` class via `ParseDownGravTrait` + * Removed `FILTER_SANITIZE_STRING` input filter in favor of `htmlspecialchars(strip_tags())` for PHP 8.2+ + * Added `GRAV_SANITIZE_STRING` constant to replace `FILTER_SANITIZE_STRING` for PHP 8.2+ + * Support non-deprecated style dynamic properties in `Parsedown` class via `ParseDownGravTrait` for PHP 8.2+ + * Modified `Truncator` to not use deprecated `mb_convert_encoding()` for PHP 8.2+ + * Fixed passing null into `mb_strpos()` deprecated for PHP 8.2+ + * Updated internal `TwigDeferredExtension` to be PHP 8.2+ compatible # v1.7.40 ## 03/22/2023 diff --git a/system/src/Twig/DeferredExtension/DeferredDeclareNode.php b/system/src/Twig/DeferredExtension/DeferredDeclareNode.php new file mode 100644 index 000000000..ba0512128 --- /dev/null +++ b/system/src/Twig/DeferredExtension/DeferredDeclareNode.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Twig\DeferredExtension; + +use Twig\Compiler; +use Twig\Node\Node; + +final class DeferredDeclareNode extends Node +{ + public function compile(Compiler $compiler) : void + { + $compiler + ->write("private \$deferred;\n") + ; + } +} \ No newline at end of file diff --git a/system/src/Twig/DeferredExtension/DeferredExtensionNode.php b/system/src/Twig/DeferredExtension/DeferredInitializeNode.php similarity index 92% rename from system/src/Twig/DeferredExtension/DeferredExtensionNode.php rename to system/src/Twig/DeferredExtension/DeferredInitializeNode.php index 1b851b4c2..0653f5c1d 100644 --- a/system/src/Twig/DeferredExtension/DeferredExtensionNode.php +++ b/system/src/Twig/DeferredExtension/DeferredInitializeNode.php @@ -16,7 +16,7 @@ namespace Twig\DeferredExtension; use Twig\Compiler; use Twig\Node\Node; -final class DeferredExtensionNode extends Node +final class DeferredInitializeNode extends Node { public function compile(Compiler $compiler) : void { diff --git a/system/src/Twig/DeferredExtension/DeferredNodeVisitor.php b/system/src/Twig/DeferredExtension/DeferredNodeVisitor.php index aef739943..6f614875c 100644 --- a/system/src/Twig/DeferredExtension/DeferredNodeVisitor.php +++ b/system/src/Twig/DeferredExtension/DeferredNodeVisitor.php @@ -34,8 +34,9 @@ final class DeferredNodeVisitor implements NodeVisitorInterface public function leaveNode(Node $node, Environment $env) : ?Node { if ($this->hasDeferred && $node instanceof ModuleNode) { - $node->setNode('constructor_end', new Node([new DeferredExtensionNode(), $node->getNode('constructor_end')])); - $node->setNode('display_end', new Node([new DeferredNode(), $node->getNode('display_end')])); + $node->getNode('constructor_end')->setNode('deferred_initialize', new DeferredInitializeNode()); + $node->getNode('display_end')->setNode('deferred_resolve', new DeferredResolveNode()); + $node->getNode('class_end')->setNode('deferred_declare', new DeferredDeclareNode()); $this->hasDeferred = false; } diff --git a/system/src/Twig/DeferredExtension/DeferredNodeVisitorCompat.php b/system/src/Twig/DeferredExtension/DeferredNodeVisitorCompat.php index 1ff7fd421..aa61b724a 100644 --- a/system/src/Twig/DeferredExtension/DeferredNodeVisitorCompat.php +++ b/system/src/Twig/DeferredExtension/DeferredNodeVisitorCompat.php @@ -46,8 +46,9 @@ final class DeferredNodeVisitorCompat implements NodeVisitorInterface public function leaveNode(\Twig_NodeInterface $node, Environment $env): ?Node { if ($this->hasDeferred && $node instanceof ModuleNode) { - $node->setNode('constructor_end', new Node([new DeferredExtensionNode(), $node->getNode('constructor_end')])); - $node->setNode('display_end', new Node([new DeferredNode(), $node->getNode('display_end')])); + $node->getNode('constructor_end')->setNode('deferred_initialize', new DeferredInitializeNode()); + $node->getNode('display_end')->setNode('deferred_resolve', new DeferredResolveNode()); + $node->getNode('class_end')->setNode('deferred_declare', new DeferredDeclareNode()); $this->hasDeferred = false; } diff --git a/system/src/Twig/DeferredExtension/DeferredResolveNode.php b/system/src/Twig/DeferredExtension/DeferredResolveNode.php new file mode 100644 index 000000000..72e0e297e --- /dev/null +++ b/system/src/Twig/DeferredExtension/DeferredResolveNode.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Twig\DeferredExtension; + +use Twig\Compiler; +use Twig\Node\Node; + +final class DeferredResolveNode extends Node +{ + public function compile(Compiler $compiler) : void + { + $compiler + ->write("\$this->deferred->resolve(\$this, \$context, \$blocks);\n") + ; + } +}