From: Armin Ronacher Date: Sat, 7 Jan 2017 15:54:57 +0000 (+0100) Subject: Resolved a regression in 2.9 with macro call scoping X-Git-Tag: 2.9.1~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c74f2468b371ec91e437bce67ab64378da8570a;p=thirdparty%2Fjinja.git Resolved a regression in 2.9 with macro call scoping --- diff --git a/jinja2/compiler.py b/jinja2/compiler.py index 0e15d013..a9042a50 100644 --- a/jinja2/compiler.py +++ b/jinja2/compiler.py @@ -1129,7 +1129,7 @@ class CodeGenerator(NodeVisitor): self.writeline('caller = ') self.macro_def(macro_ref, call_frame) self.start_write(frame, node) - self.visit_Call(node.call, call_frame, forward_caller=True) + self.visit_Call(node.call, frame, forward_caller=True) self.end_write(frame) def visit_FilterBlock(self, node, frame): diff --git a/tests/test_regression.py b/tests/test_regression.py index b8c8ac33..d185cd95 100644 --- a/tests/test_regression.py +++ b/tests/test_regression.py @@ -387,3 +387,28 @@ class TestBug(object): })) t = env.get_template('child.html') assert t.render() == '42' + + def test_caller_scoping(self, env): + t = env.from_string(''' + {% macro detail(icon, value) -%} + {% if value -%} +

+ {%- if caller is undefined -%} + {{ value }} + {%- else -%} + {{ caller(value, *varargs) }} + {%- endif -%}

+ {%- endif %} + {%- endmacro %} + + + {% macro link_detail(icon, value, href) -%} + {% call(value, href) detail(icon, value, href) -%} + {{ value }} + {%- endcall %} + {%- endmacro %} + ''') + + assert t.module.link_detail('circle', 'Index', '/') == ( + '

' + 'Index

')