]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Resolved a regression in 2.9 with macro call scoping
authorArmin Ronacher <armin.ronacher@active-4.com>
Sat, 7 Jan 2017 15:54:57 +0000 (16:54 +0100)
committerArmin Ronacher <armin.ronacher@active-4.com>
Sat, 7 Jan 2017 15:54:57 +0000 (16:54 +0100)
jinja2/compiler.py
tests/test_regression.py

index 0e15d0136032f0235ab4ef09d8bd82ea07a79d5c..a9042a50873d7b1e52633e3b70f3ff4a25bab26f 100644 (file)
@@ -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):
index b8c8ac337a67b06ef88ab636d4f1bd70a726c333..d185cd95fe93754a831cabf169ae11e7658de419 100644 (file)
@@ -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 -%}
+            <p><span class="fa fa-fw fa-{{ icon }}"></span>
+                {%- if caller is undefined -%}
+                    {{ value }}
+                {%- else -%}
+                    {{ caller(value, *varargs) }}
+                {%- endif -%}</p>
+          {%- endif %}
+        {%- endmacro %}
+
+
+        {% macro link_detail(icon, value, href) -%}
+          {% call(value, href) detail(icon, value, href) -%}
+            <a href="{{ href }}">{{ value }}</a>
+          {%- endcall %}
+        {%- endmacro %}
+        ''')
+
+        assert t.module.link_detail('circle', 'Index', '/') == (
+            '<p><span class="fa fa-fw fa-circle">'
+            '</span><a href="/">Index</a></p>')