diff --git a/extra/intl-extra/composer.json b/extra/intl-extra/composer.json index d37db4f7f..ced48273c 100644 --- a/extra/intl-extra/composer.json +++ b/extra/intl-extra/composer.json @@ -16,7 +16,7 @@ ], "require": { "php": ">=8.2", - "twig/twig": "^3.0", + "twig/twig": "^3.9", "symfony/intl": "^5.4|^6.4|^7.0" }, "require-dev": { diff --git a/src/Node/MacroNode.php b/src/Node/MacroNode.php index e44150f52..761ef55d2 100644 --- a/src/Node/MacroNode.php +++ b/src/Node/MacroNode.php @@ -79,6 +79,9 @@ class MacroNode extends Node ; } + $node = new CaptureNode($this->getNode('body'), $this->getNode('body')->lineno, $this->getNode('body')->tag); + $node->setAttribute('with_blocks', true); + $compiler ->write('') ->string(self::VARARGS_NAME) @@ -88,7 +91,7 @@ class MacroNode extends Node ->write("]);\n\n") ->write("\$blocks = [];\n\n") ->write('return ') - ->subcompile(new CaptureNode($this->getNode('body'), $this->getNode('body')->lineno, $this->getNode('body')->tag)) + ->subcompile($node) ->raw("\n") ->outdent() ->write("}\n\n") diff --git a/src/Node/ModuleNode.php b/src/Node/ModuleNode.php index 6aa4f8fb2..8ad58ea7a 100644 --- a/src/Node/ModuleNode.php +++ b/src/Node/ModuleNode.php @@ -336,12 +336,15 @@ final class ModuleNode extends Node $compiler->raw('$this->getParent($context)'); } $compiler->raw("->unwrap()->yield(\$context, array_merge(\$this->blocks, \$blocks));\n"); - } else { + } + + $compiler->subcompile($this->getNode('display_end')); + + if (!$this->hasNode('parent')) { $compiler->write("return; yield '';\n"); // ensure at least one yield call even for templates with no output } $compiler - ->subcompile($this->getNode('display_end')) ->outdent() ->write("}\n\n") ; diff --git a/tests/Fixtures/macros/macro_with_capture.test b/tests/Fixtures/macros/macro_with_capture.test new file mode 100644 index 000000000..f67a7fcdb --- /dev/null +++ b/tests/Fixtures/macros/macro_with_capture.test @@ -0,0 +1,14 @@ +--TEST-- +macro +--TEMPLATE-- +{{ _self.some_macro() }} + +{% macro some_macro() %} + {% apply spaceless %} + {% if true %}foo{% endif %} + {% endapply %} +{% endmacro %} +--DATA-- +return [] +--EXPECT-- +foo