removed unused imports

--HG--
branch : trunk
diff --git a/jinja2/optimizer.py b/jinja2/optimizer.py
index 283d1fa..5b95c99 100644
--- a/jinja2/optimizer.py
+++ b/jinja2/optimizer.py
@@ -17,65 +17,14 @@
     :license: GNU GPL.
 """
 from jinja2 import nodes
-from jinja2.visitor import NodeVisitor, NodeTransformer
-from jinja2.runtime import LoopContext
-from jinja2.utils import concat
+from jinja2.visitor import NodeTransformer
 
 
-def optimize(node, environment, context_hint=None):
+def optimize(node, environment):
     """The context hint can be used to perform an static optimization
     based on the context given."""
     optimizer = Optimizer(environment)
-    return optimizer.visit(node, ContextStack(context_hint))
-
-
-class ContextStack(object):
-    """Simple compile time context implementation."""
-    undefined = object()
-
-    def __init__(self, initial=None):
-        self.stack = [{}]
-        if initial is not None:
-            self.stack.insert(0, initial)
-
-    def push(self):
-        self.stack.append({})
-
-    def pop(self):
-        self.stack.pop()
-
-    def get(self, key, default=None):
-        try:
-            return self[key]
-        except KeyError:
-            return default
-
-    def undef(self, name):
-        if name in self:
-            self[name] = self.undefined
-
-    def __contains__(self, key):
-        try:
-            self[key]
-        except KeyError:
-            return False
-        return True
-
-    def __getitem__(self, key):
-        for level in reversed(self.stack):
-            if key in level:
-                rv = level[key]
-                if rv is self.undefined:
-                    raise KeyError(key)
-                return rv
-        raise KeyError(key)
-
-    def __setitem__(self, key, value):
-        self.stack[-1][key] = value
-
-    def blank(self):
-        """Return a new context with nothing but the root scope."""
-        return ContextStack(self.stack[0])
+    return optimizer.visit(node)
 
 
 class Optimizer(NodeTransformer):
@@ -83,90 +32,24 @@
     def __init__(self, environment):
         self.environment = environment
 
-    def visit_Block(self, node, context):
-        block_context = context.blank()
-        for name in 'super', 'self':
-            block_context.undef(name)
-        return self.generic_visit(node, block_context)
-
-    def visit_For(self, node, context):
-        context.push()
-        context.undef('loop')
+    def visit_If(self, node):
+        """Eliminate dead code."""
         try:
-            return self.generic_visit(node, context)
-        finally:
-            context.pop()
-
-    def visit_Macro(self, node, context):
-        context.push()
-        for name in 'varargs', 'kwargs', 'caller':
-            context.undef(name)
-        try:
-            return self.generic_visit(node, context)
-        finally:
-            context.pop()
-
-    def visit_CallBlock(self, node, context):
-        context.push()
-        for name in 'varargs', 'kwargs':
-            context.undef(name)
-        try:
-            return self.generic_visit(node, context)
-        finally:
-            context.pop()
-
-    def visit_FilterBlock(self, node, context):
-        """Try to filter a block at compile time."""
-        context.push()
-        try:
-            return self.generic_visit(node, context)
-        finally:
-            context.pop()
-
-    def visit_If(self, node, context):
-        try:
-            val = self.visit(node.test, context).as_const()
+            val = self.visit(node.test).as_const()
         except nodes.Impossible:
-            return self.generic_visit(node, context)
+            return self.generic_visit(node)
         if val:
             body = node.body
         else:
             body = node.else_
         result = []
         for node in body:
-            result.extend(self.visit_list(node, context))
+            result.extend(self.visit_list(node))
         return result
 
-    def visit_Name(self, node, context):
-        if node.ctx != 'load':
-            # something overwrote the variable, we can no longer use
-            # the constant from the context
-            context.undef(node.name)
-            return node
-        try:
-            return nodes.Const.from_untrusted(context[node.name],
-                                              lineno=node.lineno,
-                                              environment=self.environment)
-        except (KeyError, nodes.Impossible):
-            return node
-
-    def visit_Import(self, node, context):
-        rv = self.generic_visit(node, context)
-        context.undef(node.target)
-        return rv
-
-    def visit_FromImport(self, node, context):
-        rv = self.generic_visit(node, context)
-        for name in node.names:
-            if isinstance(name, tuple):
-                context.undef(name[1])
-            else:
-                context.undef(name)
-        return rv
-
-    def fold(self, node, context):
+    def fold(self, node):
         """Do constant folding."""
-        node = self.generic_visit(node, context)
+        node = self.generic_visit(node)
         try:
             return nodes.Const.from_untrusted(node.as_const(),
                                               lineno=node.lineno,