loops and `tests` tests pass now
--HG--
branch : trunk
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index b7aae46..871728f 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -76,6 +76,9 @@
# frames or because they are special for the frame)
self.declared = set()
+ # undeclared variables from outer scopes
+ self.outer_undeclared = set()
+
# names that are accessed without being explicitly declared by
# this one or any of the outer scopes. Names can appear both in
# declared and undeclared.
@@ -106,7 +109,8 @@
def find_shadowed(self):
"""Find all the shadowed names."""
- return self.declared & (self.declared_locally | self.declared_parameter)
+ return (self.declared | self.outer_undeclared) & \
+ (self.declared_locally | self.declared_parameter)
class Frame(object):
@@ -145,6 +149,10 @@
parent.identifiers.declared_locally |
parent.identifiers.declared_parameter
)
+ self.identifiers.outer_undeclared.update(
+ parent.identifiers.undeclared -
+ self.identifiers.declared
+ )
self.buffer = parent.buffer
self.name_overrides = parent.name_overrides.copy()