]> granicus.if.org Git - python/commitdiff
evaluate lambda keyword-only defaults after positional defaults (#16967 again)
authorBenjamin Peterson <benjamin@python.org>
Sun, 10 Feb 2013 14:48:22 +0000 (09:48 -0500)
committerBenjamin Peterson <benjamin@python.org>
Sun, 10 Feb 2013 14:48:22 +0000 (09:48 -0500)
Lib/importlib/_bootstrap.py
Lib/test/test_keywordonlyarg.py
Python/compile.c
Python/importlib.h

index 652d0fdd44f1e4378a3a1d5fbff24b86a0f81a1d..a75ddfb2d19f7d677987e90adb00fef490beaf77 100644 (file)
@@ -396,7 +396,7 @@ Known values:
                      3210 (added size modulo 2**32 to the pyc header)
     Python 3.3a1  3220 (changed PEP 380 implementation)
     Python 3.3a4  3230 (revert changes to implicit __class__ closure)
-    Python 3.4a1  3240 (evaluate positional default arguments before
+    Python 3.4a1  3250 (evaluate positional default arguments before
                        keyword-only defaults)
 
 MAGIC must change whenever the bytecode emitted by the compiler may no
@@ -404,7 +404,7 @@ longer be understood by older implementations of the eval loop (usually
 due to the addition of new opcodes).
 
 """
-_RAW_MAGIC_NUMBER = 3240 | ord('\r') << 16 | ord('\n') << 24
+_RAW_MAGIC_NUMBER = 3250 | ord('\r') << 16 | ord('\n') << 24
 _MAGIC_BYTES = bytes(_RAW_MAGIC_NUMBER >> n & 0xff for n in range(0, 25, 8))
 
 _PYCACHE = '__pycache__'
index 7aabdfc462915a0757aba8728013c5b786ca0abf..f0580d368637ab65bb2483287c1a0da37f576d88 100644 (file)
@@ -183,6 +183,10 @@ class KeywordOnlyArgTestCase(unittest.TestCase):
             def f(v=a, x=b, *, y=c, z=d):
                 pass
         self.assertEqual(str(err.exception), "global name 'b' is not defined")
+        with self.assertRaises(NameError) as err:
+            f = lambda v=a, x=b, *, y=c, z=d: None
+        self.assertEqual(str(err.exception), "global name 'b' is not defined")
+
 
 def test_main():
     run_unittest(KeywordOnlyArgTestCase)
index a0df40c323337549d9776e049157617038027cd9..61f35f82cd7730ad2871acc762693ce0d6e6cad5 100644 (file)
@@ -1794,14 +1794,14 @@ compiler_lambda(struct compiler *c, expr_ty e)
             return 0;
     }
 
+    if (args->defaults)
+        VISIT_SEQ(c, expr, args->defaults);
     if (args->kwonlyargs) {
         int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs,
                                                 args->kw_defaults);
         if (res < 0) return 0;
         kw_default_count = res;
     }
-    if (args->defaults)
-        VISIT_SEQ(c, expr, args->defaults);
     if (!compiler_enter_scope(c, name, COMPILER_SCOPE_FUNCTION,
                               (void *)e, e->lineno))
         return 0;
index f7ce167c13a141ab39b2b8e313ce9fab6ceb0726..49ae28d7259481fefe786215de305bc7df83212a 100644 (file)
@@ -756,7 +756,7 @@ unsigned char _Py_M__importlib[] = {
     114,101,109,111,118,101,100,49,1,0,0,115,2,0,0,0,
     0,8,117,25,0,0,0,95,99,97,108,108,95,119,105,116,
     104,95,102,114,97,109,101,115,95,114,101,109,111,118,101,100,
-    105,168,12,0,0,117,1,0,0,0,13,105,16,0,0,0,
+    105,178,12,0,0,117,1,0,0,0,13,105,16,0,0,0,
     117,1,0,0,0,10,105,24,0,0,0,99,1,0,0,0,
     0,0,0,0,2,0,0,0,3,0,0,0,99,0,0,0,
     115,29,0,0,0,124,0,0,93,19,0,125,1,0,116,0,