w000t. first template

--HG--
branch : trunk
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index 6175916..ba9b5ed 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -279,7 +279,7 @@
             self.writeline('l_%s = context[%r]' % (name, name))
         for name, count in frame.identifiers.undeclared_filter.iteritems():
             if count > 1:
-                self.writeline('f_%s = context[%r]' % (name, name))
+                self.writeline('f_%s = environment.filters[%r]' % (name, name))
         if not no_indent:
             self.outdent()
 
@@ -714,13 +714,13 @@
         if node.name in frame.identifiers.declared_filter:
             self.write('f_%s(' % node.name)
         else:
-            self.write('context.filter[%r](' % node.name)
+            self.write('environment.filters[%r](' % node.name)
         self.visit(node.node, frame)
         self.signature(node, frame)
         self.write(')')
 
     def visit_Test(self, node, frame):
-        self.write('context.tests[%r](')
+        self.write('environment.tests[%r](')
         self.visit(node.node, frame)
         self.signature(node, frame)
         self.write(')')
diff --git a/jinja2/environment.py b/jinja2/environment.py
index a350620..977e8d1 100644
--- a/jinja2/environment.py
+++ b/jinja2/environment.py
@@ -104,9 +104,10 @@
         if isinstance(source, basestring):
             source = self.parse(source, filename)
         node = optimize(source, self)
-        source = generate(node, self)
+        source = generate(node, self, filename)
         if raw:
             return source
+        print source
         if isinstance(filename, unicode):
             filename = filename.encode('utf-8')
         return compile(source, filename, 'exec')
@@ -125,6 +126,10 @@
             name = self.join_path(name, parent)
         return self.loader.load(self, name)
 
+    def from_string(self, source, filename='<string>'):
+        """Load a template from a string."""
+        return Template(self, self.compile(source, filename))
+
 
 class Template(object):
     """Represents a template."""
diff --git a/jinja2/loaders.py b/jinja2/loaders.py
index 796b49f..95edfbc 100644
--- a/jinja2/loaders.py
+++ b/jinja2/loaders.py
@@ -14,6 +14,7 @@
 
 
 class BaseLoader(object):
+    """Baseclass for all loaders."""
 
     def get_source(self, environment, template):
         raise TemplateNotFound()
diff --git a/test.py b/test.py
new file mode 100644
index 0000000..edacc9c
--- /dev/null
+++ b/test.py
@@ -0,0 +1,12 @@
+from jinja2 import Environment
+
+env = Environment()
+tmpl = env.from_string("""
+<ul>
+{% for item in seq %}
+    <li>{{ item|e }}</li>
+{% endfor %}
+</ul>
+""")
+
+print tmpl.render(seq=range(10))