diff options
Diffstat (limited to 'mako/codegen.py')
-rw-r--r-- | mako/codegen.py | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/mako/codegen.py b/mako/codegen.py index c8da0c7..f42c17d 100644 --- a/mako/codegen.py +++ b/mako/codegen.py @@ -29,6 +29,7 @@ def compile(node, generate_magic_comment=True, disable_unicode=False, strict_undefined=False, + enable_loop=True, reserved_names=()): """Generate module source code given a parsetree node, @@ -55,6 +56,7 @@ def compile(node, generate_magic_comment, disable_unicode, strict_undefined, + enable_loop, reserved_names), node) return buf.getvalue() @@ -70,6 +72,7 @@ class _CompileContext(object): generate_magic_comment, disable_unicode, strict_undefined, + enable_loop, reserved_names): self.uri = uri self.filename = filename @@ -80,6 +83,7 @@ class _CompileContext(object): self.generate_magic_comment = generate_magic_comment self.disable_unicode = disable_unicode self.strict_undefined = strict_undefined + self.enable_loop = enable_loop self.reserved_names = reserved_names class _GenerateRenderMethod(object): @@ -115,6 +119,10 @@ class _GenerateRenderMethod(object): if not pagetag.body_decl.kwargs: args += ['**pageargs'] cached = eval(pagetag.attributes.get('cached', 'False')) + self.compiler.enable_loop = self.compiler.enable_loop or eval( + pagetag.attributes.get( + 'enable_loop', 'False') + ) else: args = ['**pageargs'] cached = False @@ -185,6 +193,7 @@ class _GenerateRenderMethod(object): self.printer.writeline("__M_locals_builtin = locals") self.printer.writeline("_magic_number = %r" % MAGIC_NUMBER) self.printer.writeline("_modified_time = %r" % time.time()) + self.printer.writeline("_enable_loop = %r" % self.compiler.enable_loop) self.printer.writeline( "_template_filename = %r" % self.compiler.filename) self.printer.writeline("_template_uri = %r" % self.compiler.uri) @@ -433,8 +442,11 @@ class _GenerateRenderMethod(object): # which cannot be referenced beforehand. to_write = to_write.difference(identifiers.locally_declared) - has_loop = "loop" in to_write - to_write.discard("loop") + if self.compiler.enable_loop: + has_loop = "loop" in to_write + to_write.discard("loop") + else: + has_loop = False # if a limiting set was sent, constraint to those items in that list # (this is used for the caching decorator) @@ -759,7 +771,7 @@ class _GenerateRenderMethod(object): self.printer.writeline(None) else: self.write_source_comment(node) - if node.keyword == 'for': + if self.compiler.enable_loop and node.keyword == 'for': text = mangle_mako_loop(node, self.printer) else: text = node.text @@ -791,8 +803,6 @@ class _GenerateRenderMethod(object): ) def visitCode(self, node): - # mangle loop variables within the scope of a loop context, - # if applicable if not node.ismodule: self.write_source_comment(node) self.printer.write_indented_block(node.text) |