- fixed codegen bug when defining <%def> within <%call> within <%call>
diff --git a/CHANGES b/CHANGES index 26539d3..70cdea3 100644 --- a/CHANGES +++ b/CHANGES
@@ -18,6 +18,7 @@ encoding_errors='htmlentityreplace' [ticket:37] - control lines, i.e. % lines, support backslashes to continue long lines (#32) +- fixed codegen bug when defining <%def> within <%call> within <%call> 0.1.5 - AST expression generation - added in just about everything
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py index 379cb4c..71df6b8 100644 --- a/lib/mako/codegen.py +++ b/lib/mako/codegen.py
@@ -525,7 +525,8 @@ export.append(node.name) # remove defs that are within the <%call> from the "closuredefs" defined # in the body, so they dont render twice - del body_identifiers.closuredefs[node.name] + if node.name in body_identifiers.closuredefs: + del body_identifiers.closuredefs[node.name] vis = DefVisitor() for n in node.nodes:
diff --git a/test/call.py b/test/call.py index 3dfdbe3..8de429c 100644 --- a/test/call.py +++ b/test/call.py
@@ -1,7 +1,7 @@ from mako.template import Template from mako import util import unittest -from util import result_lines +from util import result_lines, flatten_result class CallTest(unittest.TestCase): def test_call(self): @@ -213,6 +213,27 @@ "bar:", "this is bar body: 10" ] + + def test_nested_call_3(self): + template = Template('''\ + <%def name="A()"> + ${caller.body()} + </%def> + + <%def name="B()"> + ${caller.foo()} + </%def> + + <%call expr="A()"> + <%call expr="B()"> + <%def name="foo()"> + foo + </%def> + </%call> + </%call> + + ''') + assert flatten_result(template.render()) == "foo" def test_chained_call_in_nested(self): t = Template("""