simplified from imports
--HG--
branch : trunk
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index 2839264..0b8ae96 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -841,6 +841,9 @@
self.write('make_module(context.parent, True)')
else:
self.write('module')
+
+ var_names = []
+ discarded_names = []
for name in node.names:
if isinstance(name, tuple):
name, alias = name
@@ -857,9 +860,25 @@
'the requested name ' + repr(name), name))
self.outdent()
if frame.toplevel:
- self.writeline('context.vars[%r] = l_%s' % (alias, alias))
+ var_names.append(alias)
if not alias.startswith('__'):
- self.writeline('context.exported_vars.discard(%r)' % alias)
+ discarded_names.append(alias)
+
+ if var_names:
+ if len(var_names) == 1:
+ name = var_names[0]
+ self.writeline('context.vars[%r] = l_%s' % (name, name))
+ else:
+ self.writeline('context.vars.update({%s})' % ', '.join(
+ '%r: l_%s' % (name, name) for name in var_names
+ ))
+ if discarded_names:
+ if len(discarded_names) == 1:
+ self.writeline('context.exported_vars.discard(%r)' %
+ discarded_names[0])
+ else:
+ self.writeline('context.exported_vars.difference_'
+ 'update((%s))' % ', '.join(map(repr, discarded_names)))
def visit_For(self, node, frame):
# when calculating the nodes for the inner frame we have to exclude