diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-12-16 20:32:34 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-12-16 20:32:34 +0000 |
commit | 4d3dbb32855df3458f2e50119f2ae5ddce6c5294 (patch) | |
tree | 61de853cb220497cdce6d85a299b10fbdd2d483b /lib/mako/codegen.py | |
parent | daea93472a83a20d66f074b801ff96188630d11b (diff) | |
download | external_python_mako-4d3dbb32855df3458f2e50119f2ae5ddce6c5294.tar.gz external_python_mako-4d3dbb32855df3458f2e50119f2ae5ddce6c5294.tar.bz2 external_python_mako-4d3dbb32855df3458f2e50119f2ae5ddce6c5294.zip |
took out the whole "auto-propigation of **kwargs" thing,
implemented "args" for <%page> tag. still has a default
"**_extra_pageargs" catchall for now...
Diffstat (limited to 'lib/mako/codegen.py')
-rw-r--r-- | lib/mako/codegen.py | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py index e744ee7..0c538cd 100644 --- a/lib/mako/codegen.py +++ b/lib/mako/codegen.py @@ -47,16 +47,20 @@ class _GenerateRenderMethod(object): else: (pagetag, defs) = self.write_toplevel() name = "render_body" - args = None + if pagetag is not None: + args = pagetag.body_decl.get_argument_expressions() + if not pagetag.body_decl.kwargs: + args += ['**_extra_pageargs'] + cached = eval(pagetag.attributes.get('cached', 'False')) + else: + args = ['**_extra_pageargs'] + cached = False buffered = filtered = False self.compiler.pagetag = pagetag - cached = pagetag is not None and eval(pagetag.attributes.get('cached', 'False')) if args is None: args = ['context'] else: args = [a for a in ['context'] + args] - if not self.in_def: - args.append('**kwargs') self.write_render_callable(pagetag or node, name, args, buffered, filtered, cached) @@ -137,10 +141,8 @@ class _GenerateRenderMethod(object): self.identifier_stack.append(self.compiler.identifiers.branch(self.node)) - if not self.in_def: - self.printer.writeline("context = context.locals_(kwargs)") - if not self.in_def and len(self.identifiers.locally_assigned) > 0: - self.printer.writeline("__locals = {}") + if not self.in_def and (len(self.identifiers.locally_assigned) > 0 or len(self.identifiers.argument_declared)>0): + self.printer.writeline("__locals = dict(%s)" % ','.join("%s=%s" % (x, x) for x in self.identifiers.argument_declared)) self.write_variable_declares(self.identifiers, toplevel=True) @@ -244,7 +246,7 @@ class _GenerateRenderMethod(object): # (this is used for the caching decorator) if limit is not None: to_write = to_write.intersection(limit) - + if toplevel and getattr(self.compiler, 'has_ns_imports', False): self.printer.writeline("_import_ns = {}") self.compiler.has_imports = True @@ -278,7 +280,7 @@ class _GenerateRenderMethod(object): funcname = node.function_decl.funcname namedecls = node.function_decl.get_argument_expressions() nameargs = node.function_decl.get_argument_expressions(include_defaults=False) - if not self.in_def and len(self.identifiers.locally_assigned) > 0: + if not self.in_def and (len(self.identifiers.locally_assigned) > 0 or len(self.identifiers.argument_declared) > 0): nameargs.insert(0, 'context.locals_(__locals)') else: nameargs.insert(0, 'context') @@ -568,7 +570,10 @@ class _Identifiers(object): def visitIncludeTag(self, node): self.check_declared(node) def visitPageTag(self, node): - self.check_declared(node) + for ident in node.declared_identifiers(): + self.argument_declared.add(ident) + self.check_declared(node) + def visitCallTag(self, node): if node is self.node: for ident in node.undeclared_identifiers(): |