Index: genshi/template/eval.py
===================================================================
--- genshi/template/eval.py	(revision 803)
+++ genshi/template/eval.py	(working copy)
@@ -54,21 +54,7 @@
                       if `None`, the appropriate transformation is chosen
                       depending on the mode
         """
-        if isinstance(source, basestring):
-            self.source = source
-            node = _parse(source, mode=self.mode)
-        else:
-            assert isinstance(source, ast.Node), \
-                'Expected string or AST node, but got %r' % source
-            self.source = '?'
-            if self.mode == 'eval':
-                node = ast.Expression(source)
-            else:
-                node = ast.Module(None, source)
-
-        self.ast = node
-        self.code = _compile(node, self.source, mode=self.mode,
-                             filename=filename, lineno=lineno, xform=xform)
+        self.code = compile(source, filename or '?', self.mode)
         if lookup is None:
             lookup = LenientLookup
         elif isinstance(lookup, basestring):
@@ -140,8 +126,7 @@
         """
         __traceback_hide__ = 'before_and_this'
         _globals = self._globals()
-        _globals['__data__'] = data
-        return eval(self.code, _globals, {'__data__': data})
+        return eval(self.code, _globals, data)
 
 
 class Suite(Code):
@@ -162,7 +147,6 @@
         """
         __traceback_hide__ = 'before_and_this'
         _globals = self._globals()
-        _globals['__data__'] = data
         exec self.code in _globals, data
 
 
@@ -403,7 +387,6 @@
         if len(lines) > 1:
             extract += ' ...'
         name = '<Suite %r>' % (extract)
-    gen.optimized = True
     code = gen.getCode()
 
     # We'd like to just set co_firstlineno, but it's readonly. So we need to
@@ -487,11 +470,10 @@
         return self._clone(node, self.visit(node.expr), node.attrname)
 
     def visitLambda(self, node):
-        node = self._clone(node, node.argnames,
+        return self._clone(node, node.argnames,
             [self.visit(x) for x in node.defaults], node.flags,
             self.visit(node.code)
         )
-        return node
 
     def visitSubscript(self, node):
         return self._clone(node, self.visit(node.expr), node.flags,
@@ -729,7 +711,7 @@
             return ASTTransformer.visitLambda(self, node)
         finally:
             self.locals.pop()
-
+ 
     def visitListComp(self, node):
         self.locals.append(set())
         try:
