]> granicus.if.org Git - python/commitdiff
bpo-37484: use _PyObject_Vectorcall for __exit__ (GH-14557)
authorJeroen Demeyer <J.Demeyer@UGent.be>
Wed, 3 Jul 2019 10:52:21 +0000 (12:52 +0200)
committerInada Naoki <songofacandy@gmail.com>
Wed, 3 Jul 2019 10:52:21 +0000 (19:52 +0900)
Python/ceval.c

index 5d29d41cf80c3a9dc77bcfd3a3b370b254941985..888749b699e93afaaa142baf99654fbbac72dcd6 100644 (file)
@@ -3314,7 +3314,6 @@ main_loop:
 
                Finally we push the result of the call.
             */
-            PyObject *stack[3];
             PyObject *exit_func;
             PyObject *exc, *val, *tb, *res;
 
@@ -3351,10 +3350,9 @@ main_loop:
                 block->b_level--;
             }
 
-            stack[0] = exc;
-            stack[1] = val;
-            stack[2] = tb;
-            res = _PyObject_FastCall(exit_func, stack, 3);
+            PyObject *stack[4] = {NULL, exc, val, tb};
+            res = _PyObject_Vectorcall(exit_func, stack + 1,
+                    3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
             Py_DECREF(exit_func);
             if (res == NULL)
                 goto error;