Correct the order of application for decorators.  Meant to be bottom-up and not
top-down.  Now matches the PEP.
diff --git a/Lib/test/test_decorators.py b/Lib/test/test_decorators.py
index dbe45cf..8010ea3 100644
--- a/Lib/test/test_decorators.py
+++ b/Lib/test/test_decorators.py
@@ -129,7 +129,8 @@
         # XXX: This doesn't work unless memoize is the last decorator -
         #      see the comment in countcalls.
         counts = {}
-        @countcalls(counts) @memoize
+        @memoize
+        @countcalls(counts)
         def double(x):
             return x * 2
 
@@ -186,12 +187,20 @@
         self.assertEqual(C.foo.booh, 42)
 
     def test_order(self):
-        class C(object):
-            @funcattrs(abc=1) @staticmethod
-            def foo(): return 42
-        # This wouldn't work if staticmethod was called first
-        self.assertEqual(C.foo(), 42)
-        self.assertEqual(C().foo(), 42)
+        # Test that decorators are conceptually applied right-recursively;
+        # that means bottom-up
+        def ordercheck(num):
+            def deco(func):
+                return lambda: num
+            return deco
+
+        # Should go ordercheck(1)(ordercheck(2)(blah)) which should lead to
+        # blah() == 1
+        @ordercheck(1)
+        @ordercheck(2)
+        def blah(): pass
+        self.assertEqual(blah(), 1, "decorators are meant to be applied "
+                                    "bottom-up")
 
 def test_main():
     test_support.run_unittest(TestDecorators)
diff --git a/Misc/NEWS b/Misc/NEWS
index 43e7553..e564c2b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 Core and builtins
 -----------------
 
+- Fix the order of application of decorators.  The proper order is bottom-up;
+  the first decorator listed is the last one called.
+
 - SF patch #1005778.  Fix a seg fault if the list size changed while
   calling list.index().  This could happen if a rich comparison function
   modified the list.
diff --git a/Python/compile.c b/Python/compile.c
index de29536..79620c2 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -4132,7 +4132,10 @@
 	REQ(CHILD(n, nch - 1), NEWLINE);
 
 	ndecorators = 0;
-	for (i = NCH(n) - 1; i >= 0; --i) {
+	/* the application order for decorators is the reverse of how they are
+	   listed; bottom-up */
+	nch -= 1;
+	for (i = 0; i < nch; i+=1) {
 		node *ch = CHILD(n, i);
 		if (TYPE(ch) != NEWLINE) {
 			com_decorator(c, ch);