fix mako function decorators to preserve the original function's name in all
cases
diff --git a/CHANGES b/CHANGES
index a242785..b9de2ad 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,9 @@
 0.2.6
+
+- Fix mako function decorators to preserve the
+  original function's name in all cases. Patch
+  from Scott Torborg.
+
 - Support the <%namespacename:defname> syntax in
   the babel extractor. [ticket:118]
 
diff --git a/lib/mako/runtime.py b/lib/mako/runtime.py
index a75e6d8..ee6c5be 100644
--- a/lib/mako/runtime.py
+++ b/lib/mako/runtime.py
@@ -288,6 +288,11 @@
         def go(context, *args, **kw):
             def y(*args, **kw):
                 return render_fn(context, *args, **kw)
+            try:
+                y.__name__ = render_fn.__name__[7:]
+            except TypeError:
+                # < Python 2.4
+                pass
             return fn(y)(context, *args, **kw)
         return go
     return decorate_render
diff --git a/test/decorators.py b/test/decorators.py
index cf14fa6..2bd9e0d 100644
--- a/test/decorators.py
+++ b/test/decorators.py
@@ -68,8 +68,46 @@
 
         assert flatten_result(template.render()) == "BAT this is bar BAT"
         
-    
-    
+    def test_toplevel_decorated_name(self):
+        template = Template("""
+            <%!
+                def bar(fn):
+                    def decorate(context, *args, **kw):
+                        return "function " + fn.__name__ + " " + runtime.capture(context, fn, *args, **kw)
+                    return decorate
+            %>
+
+            <%def name="foo(y, x)" decorator="bar">
+                this is foo ${y} ${x}
+            </%def>
+
+            ${foo(1, x=5)}
+        """)
+
+        assert flatten_result(template.render()) == "function foo this is foo 1 5"
+
+    def test_nested_decorated_name(self):
+        template = Template("""
+            <%!
+                def bat(fn):
+                    def decorate(context):
+                        return "function " + fn.__name__ + " " + runtime.capture(context, fn)
+                    return decorate
+            %>
+
+            <%def name="foo()">
+
+                <%def name="bar()" decorator="bat">
+                    this is bar
+                </%def>
+                ${bar()}
+            </%def>
+
+            ${foo()}
+        """)
+
+        assert flatten_result(template.render()) == "function bar this is bar"
+        
+
 if __name__ == '__main__':
     unittest.main()
-    
\ No newline at end of file