LCOV - code coverage report
Current view: top level - Modules/clinic - _asynciomodule.c.h (source / functions) Hit Total Coverage
Test: CPython 3.12 LCOV report [commit acb105a7c1f] Lines: 194 211 91.9 %
Date: 2022-07-20 13:12:14 Functions: 27 27 100.0 %
Branches: 109 182 59.9 %

           Branch data     Line data    Source code
       1                 :            : /*[clinic input]
       2                 :            : preserve
       3                 :            : [clinic start generated code]*/
       4                 :            : 
       5                 :            : PyDoc_STRVAR(_asyncio_Future___init____doc__,
       6                 :            : "Future(*, loop=None)\n"
       7                 :            : "--\n"
       8                 :            : "\n"
       9                 :            : "This class is *almost* compatible with concurrent.futures.Future.\n"
      10                 :            : "\n"
      11                 :            : "    Differences:\n"
      12                 :            : "\n"
      13                 :            : "    - result() and exception() do not take a timeout argument and\n"
      14                 :            : "      raise an exception when the future isn\'t done yet.\n"
      15                 :            : "\n"
      16                 :            : "    - Callbacks registered with add_done_callback() are always called\n"
      17                 :            : "      via the event loop\'s call_soon_threadsafe().\n"
      18                 :            : "\n"
      19                 :            : "    - This class is not compatible with the wait() and as_completed()\n"
      20                 :            : "      methods in the concurrent.futures package.");
      21                 :            : 
      22                 :            : static int
      23                 :            : _asyncio_Future___init___impl(FutureObj *self, PyObject *loop);
      24                 :            : 
      25                 :            : static int
      26                 :      14247 : _asyncio_Future___init__(PyObject *self, PyObject *args, PyObject *kwargs)
      27                 :            : {
      28                 :      14247 :     int return_value = -1;
      29                 :            :     static const char * const _keywords[] = {"loop", NULL};
      30                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "Future", 0};
      31                 :            :     PyObject *argsbuf[1];
      32                 :            :     PyObject * const *fastargs;
      33                 :      14247 :     Py_ssize_t nargs = PyTuple_GET_SIZE(args);
      34         [ +  + ]:      14247 :     Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
      35                 :      14247 :     PyObject *loop = Py_None;
      36                 :            : 
      37   [ +  +  +  -  :      14247 :     fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 0, 0, argsbuf);
             +  -  +  - ]
      38         [ +  + ]:      14247 :     if (!fastargs) {
      39                 :          2 :         goto exit;
      40                 :            :     }
      41         [ +  + ]:      14245 :     if (!noptargs) {
      42                 :         59 :         goto skip_optional_kwonly;
      43                 :            :     }
      44                 :      14186 :     loop = fastargs[0];
      45                 :      14245 : skip_optional_kwonly:
      46                 :      14245 :     return_value = _asyncio_Future___init___impl((FutureObj *)self, loop);
      47                 :            : 
      48                 :      14247 : exit:
      49                 :      14247 :     return return_value;
      50                 :            : }
      51                 :            : 
      52                 :            : PyDoc_STRVAR(_asyncio_Future_result__doc__,
      53                 :            : "result($self, /)\n"
      54                 :            : "--\n"
      55                 :            : "\n"
      56                 :            : "Return the result this future represents.\n"
      57                 :            : "\n"
      58                 :            : "If the future has been cancelled, raises CancelledError.  If the\n"
      59                 :            : "future\'s result isn\'t yet available, raises InvalidStateError.  If\n"
      60                 :            : "the future is done and has an exception set, this exception is raised.");
      61                 :            : 
      62                 :            : #define _ASYNCIO_FUTURE_RESULT_METHODDEF    \
      63                 :            :     {"result", (PyCFunction)_asyncio_Future_result, METH_NOARGS, _asyncio_Future_result__doc__},
      64                 :            : 
      65                 :            : static PyObject *
      66                 :            : _asyncio_Future_result_impl(FutureObj *self);
      67                 :            : 
      68                 :            : static PyObject *
      69                 :       7360 : _asyncio_Future_result(FutureObj *self, PyObject *Py_UNUSED(ignored))
      70                 :            : {
      71                 :       7360 :     return _asyncio_Future_result_impl(self);
      72                 :            : }
      73                 :            : 
      74                 :            : PyDoc_STRVAR(_asyncio_Future_exception__doc__,
      75                 :            : "exception($self, /)\n"
      76                 :            : "--\n"
      77                 :            : "\n"
      78                 :            : "Return the exception that was set on this future.\n"
      79                 :            : "\n"
      80                 :            : "The exception (or None if no exception was set) is returned only if\n"
      81                 :            : "the future is done.  If the future has been cancelled, raises\n"
      82                 :            : "CancelledError.  If the future isn\'t done yet, raises\n"
      83                 :            : "InvalidStateError.");
      84                 :            : 
      85                 :            : #define _ASYNCIO_FUTURE_EXCEPTION_METHODDEF    \
      86                 :            :     {"exception", (PyCFunction)_asyncio_Future_exception, METH_NOARGS, _asyncio_Future_exception__doc__},
      87                 :            : 
      88                 :            : static PyObject *
      89                 :            : _asyncio_Future_exception_impl(FutureObj *self);
      90                 :            : 
      91                 :            : static PyObject *
      92                 :       8134 : _asyncio_Future_exception(FutureObj *self, PyObject *Py_UNUSED(ignored))
      93                 :            : {
      94                 :       8134 :     return _asyncio_Future_exception_impl(self);
      95                 :            : }
      96                 :            : 
      97                 :            : PyDoc_STRVAR(_asyncio_Future_set_result__doc__,
      98                 :            : "set_result($self, result, /)\n"
      99                 :            : "--\n"
     100                 :            : "\n"
     101                 :            : "Mark the future done and set its result.\n"
     102                 :            : "\n"
     103                 :            : "If the future is already done when this method is called, raises\n"
     104                 :            : "InvalidStateError.");
     105                 :            : 
     106                 :            : #define _ASYNCIO_FUTURE_SET_RESULT_METHODDEF    \
     107                 :            :     {"set_result", (PyCFunction)_asyncio_Future_set_result, METH_O, _asyncio_Future_set_result__doc__},
     108                 :            : 
     109                 :            : PyDoc_STRVAR(_asyncio_Future_set_exception__doc__,
     110                 :            : "set_exception($self, exception, /)\n"
     111                 :            : "--\n"
     112                 :            : "\n"
     113                 :            : "Mark the future done and set an exception.\n"
     114                 :            : "\n"
     115                 :            : "If the future is already done when this method is called, raises\n"
     116                 :            : "InvalidStateError.");
     117                 :            : 
     118                 :            : #define _ASYNCIO_FUTURE_SET_EXCEPTION_METHODDEF    \
     119                 :            :     {"set_exception", (PyCFunction)_asyncio_Future_set_exception, METH_O, _asyncio_Future_set_exception__doc__},
     120                 :            : 
     121                 :            : PyDoc_STRVAR(_asyncio_Future_add_done_callback__doc__,
     122                 :            : "add_done_callback($self, fn, /, *, context=<unrepresentable>)\n"
     123                 :            : "--\n"
     124                 :            : "\n"
     125                 :            : "Add a callback to be run when the future becomes done.\n"
     126                 :            : "\n"
     127                 :            : "The callback is called with a single argument - the future object. If\n"
     128                 :            : "the future is already done when this is called, the callback is\n"
     129                 :            : "scheduled with call_soon.");
     130                 :            : 
     131                 :            : #define _ASYNCIO_FUTURE_ADD_DONE_CALLBACK_METHODDEF    \
     132                 :            :     {"add_done_callback", _PyCFunction_CAST(_asyncio_Future_add_done_callback), METH_FASTCALL|METH_KEYWORDS, _asyncio_Future_add_done_callback__doc__},
     133                 :            : 
     134                 :            : static PyObject *
     135                 :            : _asyncio_Future_add_done_callback_impl(FutureObj *self, PyObject *fn,
     136                 :            :                                        PyObject *context);
     137                 :            : 
     138                 :            : static PyObject *
     139                 :       8931 : _asyncio_Future_add_done_callback(FutureObj *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     140                 :            : {
     141                 :       8931 :     PyObject *return_value = NULL;
     142                 :            :     static const char * const _keywords[] = {"", "context", NULL};
     143                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "add_done_callback", 0};
     144                 :            :     PyObject *argsbuf[2];
     145         [ +  + ]:       8931 :     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
     146                 :            :     PyObject *fn;
     147                 :       8931 :     PyObject *context = NULL;
     148                 :            : 
     149   [ +  +  +  -  :       8931 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
             +  -  -  + ]
     150         [ -  + ]:       8931 :     if (!args) {
     151                 :          0 :         goto exit;
     152                 :            :     }
     153                 :       8931 :     fn = args[0];
     154         [ +  + ]:       8931 :     if (!noptargs) {
     155                 :       8275 :         goto skip_optional_kwonly;
     156                 :            :     }
     157                 :        656 :     context = args[1];
     158                 :       8931 : skip_optional_kwonly:
     159                 :       8931 :     return_value = _asyncio_Future_add_done_callback_impl(self, fn, context);
     160                 :            : 
     161                 :       8931 : exit:
     162                 :       8931 :     return return_value;
     163                 :            : }
     164                 :            : 
     165                 :            : PyDoc_STRVAR(_asyncio_Future_remove_done_callback__doc__,
     166                 :            : "remove_done_callback($self, fn, /)\n"
     167                 :            : "--\n"
     168                 :            : "\n"
     169                 :            : "Remove all instances of a callback from the \"call when done\" list.\n"
     170                 :            : "\n"
     171                 :            : "Returns the number of callbacks removed.");
     172                 :            : 
     173                 :            : #define _ASYNCIO_FUTURE_REMOVE_DONE_CALLBACK_METHODDEF    \
     174                 :            :     {"remove_done_callback", (PyCFunction)_asyncio_Future_remove_done_callback, METH_O, _asyncio_Future_remove_done_callback__doc__},
     175                 :            : 
     176                 :            : PyDoc_STRVAR(_asyncio_Future_cancel__doc__,
     177                 :            : "cancel($self, /, msg=None)\n"
     178                 :            : "--\n"
     179                 :            : "\n"
     180                 :            : "Cancel the future and schedule callbacks.\n"
     181                 :            : "\n"
     182                 :            : "If the future is already done or cancelled, return False.  Otherwise,\n"
     183                 :            : "change the future\'s state to cancelled, schedule the callbacks and\n"
     184                 :            : "return True.");
     185                 :            : 
     186                 :            : #define _ASYNCIO_FUTURE_CANCEL_METHODDEF    \
     187                 :            :     {"cancel", _PyCFunction_CAST(_asyncio_Future_cancel), METH_FASTCALL|METH_KEYWORDS, _asyncio_Future_cancel__doc__},
     188                 :            : 
     189                 :            : static PyObject *
     190                 :            : _asyncio_Future_cancel_impl(FutureObj *self, PyObject *msg);
     191                 :            : 
     192                 :            : static PyObject *
     193                 :        494 : _asyncio_Future_cancel(FutureObj *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     194                 :            : {
     195                 :        494 :     PyObject *return_value = NULL;
     196                 :            :     static const char * const _keywords[] = {"msg", NULL};
     197                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "cancel", 0};
     198                 :            :     PyObject *argsbuf[1];
     199         [ +  + ]:        494 :     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     200                 :        494 :     PyObject *msg = Py_None;
     201                 :            : 
     202   [ +  +  +  -  :        494 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
             +  -  -  + ]
     203         [ -  + ]:        494 :     if (!args) {
     204                 :          0 :         goto exit;
     205                 :            :     }
     206         [ +  + ]:        494 :     if (!noptargs) {
     207                 :         90 :         goto skip_optional_pos;
     208                 :            :     }
     209                 :        404 :     msg = args[0];
     210                 :        494 : skip_optional_pos:
     211                 :        494 :     return_value = _asyncio_Future_cancel_impl(self, msg);
     212                 :            : 
     213                 :        494 : exit:
     214                 :        494 :     return return_value;
     215                 :            : }
     216                 :            : 
     217                 :            : PyDoc_STRVAR(_asyncio_Future_cancelled__doc__,
     218                 :            : "cancelled($self, /)\n"
     219                 :            : "--\n"
     220                 :            : "\n"
     221                 :            : "Return True if the future was cancelled.");
     222                 :            : 
     223                 :            : #define _ASYNCIO_FUTURE_CANCELLED_METHODDEF    \
     224                 :            :     {"cancelled", (PyCFunction)_asyncio_Future_cancelled, METH_NOARGS, _asyncio_Future_cancelled__doc__},
     225                 :            : 
     226                 :            : static PyObject *
     227                 :            : _asyncio_Future_cancelled_impl(FutureObj *self);
     228                 :            : 
     229                 :            : static PyObject *
     230                 :      20764 : _asyncio_Future_cancelled(FutureObj *self, PyObject *Py_UNUSED(ignored))
     231                 :            : {
     232                 :      20764 :     return _asyncio_Future_cancelled_impl(self);
     233                 :            : }
     234                 :            : 
     235                 :            : PyDoc_STRVAR(_asyncio_Future_done__doc__,
     236                 :            : "done($self, /)\n"
     237                 :            : "--\n"
     238                 :            : "\n"
     239                 :            : "Return True if the future is done.\n"
     240                 :            : "\n"
     241                 :            : "Done means either that a result / exception are available, or that the\n"
     242                 :            : "future was cancelled.");
     243                 :            : 
     244                 :            : #define _ASYNCIO_FUTURE_DONE_METHODDEF    \
     245                 :            :     {"done", (PyCFunction)_asyncio_Future_done, METH_NOARGS, _asyncio_Future_done__doc__},
     246                 :            : 
     247                 :            : static PyObject *
     248                 :            : _asyncio_Future_done_impl(FutureObj *self);
     249                 :            : 
     250                 :            : static PyObject *
     251                 :       9234 : _asyncio_Future_done(FutureObj *self, PyObject *Py_UNUSED(ignored))
     252                 :            : {
     253                 :       9234 :     return _asyncio_Future_done_impl(self);
     254                 :            : }
     255                 :            : 
     256                 :            : PyDoc_STRVAR(_asyncio_Future_get_loop__doc__,
     257                 :            : "get_loop($self, /)\n"
     258                 :            : "--\n"
     259                 :            : "\n"
     260                 :            : "Return the event loop the Future is bound to.");
     261                 :            : 
     262                 :            : #define _ASYNCIO_FUTURE_GET_LOOP_METHODDEF    \
     263                 :            :     {"get_loop", (PyCFunction)_asyncio_Future_get_loop, METH_NOARGS, _asyncio_Future_get_loop__doc__},
     264                 :            : 
     265                 :            : static PyObject *
     266                 :            : _asyncio_Future_get_loop_impl(FutureObj *self);
     267                 :            : 
     268                 :            : static PyObject *
     269                 :       9745 : _asyncio_Future_get_loop(FutureObj *self, PyObject *Py_UNUSED(ignored))
     270                 :            : {
     271                 :       9745 :     return _asyncio_Future_get_loop_impl(self);
     272                 :            : }
     273                 :            : 
     274                 :            : PyDoc_STRVAR(_asyncio_Future__make_cancelled_error__doc__,
     275                 :            : "_make_cancelled_error($self, /)\n"
     276                 :            : "--\n"
     277                 :            : "\n"
     278                 :            : "Create the CancelledError to raise if the Future is cancelled.\n"
     279                 :            : "\n"
     280                 :            : "This should only be called once when handling a cancellation since\n"
     281                 :            : "it erases the context exception value.");
     282                 :            : 
     283                 :            : #define _ASYNCIO_FUTURE__MAKE_CANCELLED_ERROR_METHODDEF    \
     284                 :            :     {"_make_cancelled_error", (PyCFunction)_asyncio_Future__make_cancelled_error, METH_NOARGS, _asyncio_Future__make_cancelled_error__doc__},
     285                 :            : 
     286                 :            : static PyObject *
     287                 :            : _asyncio_Future__make_cancelled_error_impl(FutureObj *self);
     288                 :            : 
     289                 :            : static PyObject *
     290                 :          5 : _asyncio_Future__make_cancelled_error(FutureObj *self, PyObject *Py_UNUSED(ignored))
     291                 :            : {
     292                 :          5 :     return _asyncio_Future__make_cancelled_error_impl(self);
     293                 :            : }
     294                 :            : 
     295                 :            : PyDoc_STRVAR(_asyncio_Task___init____doc__,
     296                 :            : "Task(coro, *, loop=None, name=None, context=None)\n"
     297                 :            : "--\n"
     298                 :            : "\n"
     299                 :            : "A coroutine wrapped in a Future.");
     300                 :            : 
     301                 :            : static int
     302                 :            : _asyncio_Task___init___impl(TaskObj *self, PyObject *coro, PyObject *loop,
     303                 :            :                             PyObject *name, PyObject *context);
     304                 :            : 
     305                 :            : static int
     306                 :       7208 : _asyncio_Task___init__(PyObject *self, PyObject *args, PyObject *kwargs)
     307                 :            : {
     308                 :       7208 :     int return_value = -1;
     309                 :            :     static const char * const _keywords[] = {"coro", "loop", "name", "context", NULL};
     310                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "Task", 0};
     311                 :            :     PyObject *argsbuf[4];
     312                 :            :     PyObject * const *fastargs;
     313                 :       7208 :     Py_ssize_t nargs = PyTuple_GET_SIZE(args);
     314         [ +  + ]:       7208 :     Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
     315                 :            :     PyObject *coro;
     316                 :       7208 :     PyObject *loop = Py_None;
     317                 :       7208 :     PyObject *name = Py_None;
     318                 :       7208 :     PyObject *context = Py_None;
     319                 :            : 
     320   [ +  +  +  -  :       7208 :     fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 1, 0, argsbuf);
             +  -  +  - ]
     321         [ -  + ]:       7208 :     if (!fastargs) {
     322                 :          0 :         goto exit;
     323                 :            :     }
     324                 :       7208 :     coro = fastargs[0];
     325         [ +  + ]:       7208 :     if (!noptargs) {
     326                 :          1 :         goto skip_optional_kwonly;
     327                 :            :     }
     328         [ +  - ]:       7207 :     if (fastargs[1]) {
     329                 :       7207 :         loop = fastargs[1];
     330         [ +  + ]:       7207 :         if (!--noptargs) {
     331                 :          6 :             goto skip_optional_kwonly;
     332                 :            :         }
     333                 :            :     }
     334         [ +  - ]:       7201 :     if (fastargs[2]) {
     335                 :       7201 :         name = fastargs[2];
     336         [ -  + ]:       7201 :         if (!--noptargs) {
     337                 :          0 :             goto skip_optional_kwonly;
     338                 :            :         }
     339                 :            :     }
     340                 :       7201 :     context = fastargs[3];
     341                 :       7208 : skip_optional_kwonly:
     342                 :       7208 :     return_value = _asyncio_Task___init___impl((TaskObj *)self, coro, loop, name, context);
     343                 :            : 
     344                 :       7208 : exit:
     345                 :       7208 :     return return_value;
     346                 :            : }
     347                 :            : 
     348                 :            : PyDoc_STRVAR(_asyncio_Task__make_cancelled_error__doc__,
     349                 :            : "_make_cancelled_error($self, /)\n"
     350                 :            : "--\n"
     351                 :            : "\n"
     352                 :            : "Create the CancelledError to raise if the Task is cancelled.\n"
     353                 :            : "\n"
     354                 :            : "This should only be called once when handling a cancellation since\n"
     355                 :            : "it erases the context exception value.");
     356                 :            : 
     357                 :            : #define _ASYNCIO_TASK__MAKE_CANCELLED_ERROR_METHODDEF    \
     358                 :            :     {"_make_cancelled_error", (PyCFunction)_asyncio_Task__make_cancelled_error, METH_NOARGS, _asyncio_Task__make_cancelled_error__doc__},
     359                 :            : 
     360                 :            : static PyObject *
     361                 :            : _asyncio_Task__make_cancelled_error_impl(TaskObj *self);
     362                 :            : 
     363                 :            : static PyObject *
     364                 :         33 : _asyncio_Task__make_cancelled_error(TaskObj *self, PyObject *Py_UNUSED(ignored))
     365                 :            : {
     366                 :         33 :     return _asyncio_Task__make_cancelled_error_impl(self);
     367                 :            : }
     368                 :            : 
     369                 :            : PyDoc_STRVAR(_asyncio_Task_cancel__doc__,
     370                 :            : "cancel($self, /, msg=None)\n"
     371                 :            : "--\n"
     372                 :            : "\n"
     373                 :            : "Request that this task cancel itself.\n"
     374                 :            : "\n"
     375                 :            : "This arranges for a CancelledError to be thrown into the\n"
     376                 :            : "wrapped coroutine on the next cycle through the event loop.\n"
     377                 :            : "The coroutine then has a chance to clean up or even deny\n"
     378                 :            : "the request using try/except/finally.\n"
     379                 :            : "\n"
     380                 :            : "Unlike Future.cancel, this does not guarantee that the\n"
     381                 :            : "task will be cancelled: the exception might be caught and\n"
     382                 :            : "acted upon, delaying cancellation of the task or preventing\n"
     383                 :            : "cancellation completely.  The task may also return a value or\n"
     384                 :            : "raise a different exception.\n"
     385                 :            : "\n"
     386                 :            : "Immediately after this method is called, Task.cancelled() will\n"
     387                 :            : "not return True (unless the task was already cancelled).  A\n"
     388                 :            : "task will be marked as cancelled when the wrapped coroutine\n"
     389                 :            : "terminates with a CancelledError exception (even if cancel()\n"
     390                 :            : "was not called).\n"
     391                 :            : "\n"
     392                 :            : "This also increases the task\'s count of cancellation requests.");
     393                 :            : 
     394                 :            : #define _ASYNCIO_TASK_CANCEL_METHODDEF    \
     395                 :            :     {"cancel", _PyCFunction_CAST(_asyncio_Task_cancel), METH_FASTCALL|METH_KEYWORDS, _asyncio_Task_cancel__doc__},
     396                 :            : 
     397                 :            : static PyObject *
     398                 :            : _asyncio_Task_cancel_impl(TaskObj *self, PyObject *msg);
     399                 :            : 
     400                 :            : static PyObject *
     401                 :        417 : _asyncio_Task_cancel(TaskObj *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     402                 :            : {
     403                 :        417 :     PyObject *return_value = NULL;
     404                 :            :     static const char * const _keywords[] = {"msg", NULL};
     405                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "cancel", 0};
     406                 :            :     PyObject *argsbuf[1];
     407         [ +  + ]:        417 :     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     408                 :        417 :     PyObject *msg = Py_None;
     409                 :            : 
     410   [ +  +  +  -  :        417 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
             +  -  -  + ]
     411         [ -  + ]:        417 :     if (!args) {
     412                 :          0 :         goto exit;
     413                 :            :     }
     414         [ +  + ]:        417 :     if (!noptargs) {
     415                 :        317 :         goto skip_optional_pos;
     416                 :            :     }
     417                 :        100 :     msg = args[0];
     418                 :        417 : skip_optional_pos:
     419                 :        417 :     return_value = _asyncio_Task_cancel_impl(self, msg);
     420                 :            : 
     421                 :        417 : exit:
     422                 :        417 :     return return_value;
     423                 :            : }
     424                 :            : 
     425                 :            : PyDoc_STRVAR(_asyncio_Task_cancelling__doc__,
     426                 :            : "cancelling($self, /)\n"
     427                 :            : "--\n"
     428                 :            : "\n"
     429                 :            : "Return the count of the task\'s cancellation requests.\n"
     430                 :            : "\n"
     431                 :            : "This count is incremented when .cancel() is called\n"
     432                 :            : "and may be decremented using .uncancel().");
     433                 :            : 
     434                 :            : #define _ASYNCIO_TASK_CANCELLING_METHODDEF    \
     435                 :            :     {"cancelling", (PyCFunction)_asyncio_Task_cancelling, METH_NOARGS, _asyncio_Task_cancelling__doc__},
     436                 :            : 
     437                 :            : static PyObject *
     438                 :            : _asyncio_Task_cancelling_impl(TaskObj *self);
     439                 :            : 
     440                 :            : static PyObject *
     441                 :       1767 : _asyncio_Task_cancelling(TaskObj *self, PyObject *Py_UNUSED(ignored))
     442                 :            : {
     443                 :       1767 :     return _asyncio_Task_cancelling_impl(self);
     444                 :            : }
     445                 :            : 
     446                 :            : PyDoc_STRVAR(_asyncio_Task_uncancel__doc__,
     447                 :            : "uncancel($self, /)\n"
     448                 :            : "--\n"
     449                 :            : "\n"
     450                 :            : "Decrement the task\'s count of cancellation requests.\n"
     451                 :            : "\n"
     452                 :            : "This should be used by tasks that catch CancelledError\n"
     453                 :            : "and wish to continue indefinitely until they are cancelled again.\n"
     454                 :            : "\n"
     455                 :            : "Returns the remaining number of cancellation requests.");
     456                 :            : 
     457                 :            : #define _ASYNCIO_TASK_UNCANCEL_METHODDEF    \
     458                 :            :     {"uncancel", (PyCFunction)_asyncio_Task_uncancel, METH_NOARGS, _asyncio_Task_uncancel__doc__},
     459                 :            : 
     460                 :            : static PyObject *
     461                 :            : _asyncio_Task_uncancel_impl(TaskObj *self);
     462                 :            : 
     463                 :            : static PyObject *
     464                 :         25 : _asyncio_Task_uncancel(TaskObj *self, PyObject *Py_UNUSED(ignored))
     465                 :            : {
     466                 :         25 :     return _asyncio_Task_uncancel_impl(self);
     467                 :            : }
     468                 :            : 
     469                 :            : PyDoc_STRVAR(_asyncio_Task__check_future__doc__,
     470                 :            : "_check_future($self, /, future)\n"
     471                 :            : "--\n"
     472                 :            : "\n"
     473                 :            : "Return False if task and future loops are not compatible.");
     474                 :            : 
     475                 :            : #define _ASYNCIO_TASK__CHECK_FUTURE_METHODDEF    \
     476                 :            :     {"_check_future", _PyCFunction_CAST(_asyncio_Task__check_future), METH_FASTCALL|METH_KEYWORDS, _asyncio_Task__check_future__doc__},
     477                 :            : 
     478                 :            : static int
     479                 :            : _asyncio_Task__check_future_impl(TaskObj *self, PyObject *future);
     480                 :            : 
     481                 :            : static PyObject *
     482                 :        250 : _asyncio_Task__check_future(TaskObj *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     483                 :            : {
     484                 :        250 :     PyObject *return_value = NULL;
     485                 :            :     static const char * const _keywords[] = {"future", NULL};
     486                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "_check_future", 0};
     487                 :            :     PyObject *argsbuf[1];
     488                 :            :     PyObject *future;
     489                 :            :     int _return_value;
     490                 :            : 
     491   [ +  -  +  -  :        250 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
             +  -  -  + ]
     492         [ -  + ]:        250 :     if (!args) {
     493                 :          0 :         goto exit;
     494                 :            :     }
     495                 :        250 :     future = args[0];
     496                 :        250 :     _return_value = _asyncio_Task__check_future_impl(self, future);
     497   [ -  +  -  - ]:        250 :     if ((_return_value == -1) && PyErr_Occurred()) {
     498                 :          0 :         goto exit;
     499                 :            :     }
     500                 :        250 :     return_value = PyBool_FromLong((long)_return_value);
     501                 :            : 
     502                 :        250 : exit:
     503                 :        250 :     return return_value;
     504                 :            : }
     505                 :            : 
     506                 :            : PyDoc_STRVAR(_asyncio_Task_get_stack__doc__,
     507                 :            : "get_stack($self, /, *, limit=None)\n"
     508                 :            : "--\n"
     509                 :            : "\n"
     510                 :            : "Return the list of stack frames for this task\'s coroutine.\n"
     511                 :            : "\n"
     512                 :            : "If the coroutine is not done, this returns the stack where it is\n"
     513                 :            : "suspended.  If the coroutine has completed successfully or was\n"
     514                 :            : "cancelled, this returns an empty list.  If the coroutine was\n"
     515                 :            : "terminated by an exception, this returns the list of traceback\n"
     516                 :            : "frames.\n"
     517                 :            : "\n"
     518                 :            : "The frames are always ordered from oldest to newest.\n"
     519                 :            : "\n"
     520                 :            : "The optional limit gives the maximum number of frames to\n"
     521                 :            : "return; by default all available frames are returned.  Its\n"
     522                 :            : "meaning differs depending on whether a stack or a traceback is\n"
     523                 :            : "returned: the newest frames of a stack are returned, but the\n"
     524                 :            : "oldest frames of a traceback are returned.  (This matches the\n"
     525                 :            : "behavior of the traceback module.)\n"
     526                 :            : "\n"
     527                 :            : "For reasons beyond our control, only one stack frame is\n"
     528                 :            : "returned for a suspended coroutine.");
     529                 :            : 
     530                 :            : #define _ASYNCIO_TASK_GET_STACK_METHODDEF    \
     531                 :            :     {"get_stack", _PyCFunction_CAST(_asyncio_Task_get_stack), METH_FASTCALL|METH_KEYWORDS, _asyncio_Task_get_stack__doc__},
     532                 :            : 
     533                 :            : static PyObject *
     534                 :            : _asyncio_Task_get_stack_impl(TaskObj *self, PyObject *limit);
     535                 :            : 
     536                 :            : static PyObject *
     537                 :         11 : _asyncio_Task_get_stack(TaskObj *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     538                 :            : {
     539                 :         11 :     PyObject *return_value = NULL;
     540                 :            :     static const char * const _keywords[] = {"limit", NULL};
     541                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "get_stack", 0};
     542                 :            :     PyObject *argsbuf[1];
     543         [ +  + ]:         11 :     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     544                 :         11 :     PyObject *limit = Py_None;
     545                 :            : 
     546   [ +  +  +  -  :         11 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
             +  -  -  + ]
     547         [ -  + ]:         11 :     if (!args) {
     548                 :          0 :         goto exit;
     549                 :            :     }
     550         [ +  + ]:         11 :     if (!noptargs) {
     551                 :          2 :         goto skip_optional_kwonly;
     552                 :            :     }
     553                 :          9 :     limit = args[0];
     554                 :         11 : skip_optional_kwonly:
     555                 :         11 :     return_value = _asyncio_Task_get_stack_impl(self, limit);
     556                 :            : 
     557                 :         11 : exit:
     558                 :         11 :     return return_value;
     559                 :            : }
     560                 :            : 
     561                 :            : PyDoc_STRVAR(_asyncio_Task_print_stack__doc__,
     562                 :            : "print_stack($self, /, *, limit=None, file=None)\n"
     563                 :            : "--\n"
     564                 :            : "\n"
     565                 :            : "Print the stack or traceback for this task\'s coroutine.\n"
     566                 :            : "\n"
     567                 :            : "This produces output similar to that of the traceback module,\n"
     568                 :            : "for the frames retrieved by get_stack().  The limit argument\n"
     569                 :            : "is passed to get_stack().  The file argument is an I/O stream\n"
     570                 :            : "to which the output is written; by default output is written\n"
     571                 :            : "to sys.stderr.");
     572                 :            : 
     573                 :            : #define _ASYNCIO_TASK_PRINT_STACK_METHODDEF    \
     574                 :            :     {"print_stack", _PyCFunction_CAST(_asyncio_Task_print_stack), METH_FASTCALL|METH_KEYWORDS, _asyncio_Task_print_stack__doc__},
     575                 :            : 
     576                 :            : static PyObject *
     577                 :            : _asyncio_Task_print_stack_impl(TaskObj *self, PyObject *limit,
     578                 :            :                                PyObject *file);
     579                 :            : 
     580                 :            : static PyObject *
     581                 :          4 : _asyncio_Task_print_stack(TaskObj *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     582                 :            : {
     583                 :          4 :     PyObject *return_value = NULL;
     584                 :            :     static const char * const _keywords[] = {"limit", "file", NULL};
     585                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "print_stack", 0};
     586                 :            :     PyObject *argsbuf[2];
     587         [ +  - ]:          4 :     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     588                 :          4 :     PyObject *limit = Py_None;
     589                 :          4 :     PyObject *file = Py_None;
     590                 :            : 
     591   [ -  +  -  -  :          4 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
             -  -  -  - ]
     592         [ -  + ]:          4 :     if (!args) {
     593                 :          0 :         goto exit;
     594                 :            :     }
     595         [ -  + ]:          4 :     if (!noptargs) {
     596                 :          0 :         goto skip_optional_kwonly;
     597                 :            :     }
     598         [ +  - ]:          4 :     if (args[0]) {
     599                 :          4 :         limit = args[0];
     600         [ -  + ]:          4 :         if (!--noptargs) {
     601                 :          0 :             goto skip_optional_kwonly;
     602                 :            :         }
     603                 :            :     }
     604                 :          4 :     file = args[1];
     605                 :          4 : skip_optional_kwonly:
     606                 :          4 :     return_value = _asyncio_Task_print_stack_impl(self, limit, file);
     607                 :            : 
     608                 :          4 : exit:
     609                 :          4 :     return return_value;
     610                 :            : }
     611                 :            : 
     612                 :            : PyDoc_STRVAR(_asyncio_Task_set_result__doc__,
     613                 :            : "set_result($self, result, /)\n"
     614                 :            : "--\n"
     615                 :            : "\n");
     616                 :            : 
     617                 :            : #define _ASYNCIO_TASK_SET_RESULT_METHODDEF    \
     618                 :            :     {"set_result", (PyCFunction)_asyncio_Task_set_result, METH_O, _asyncio_Task_set_result__doc__},
     619                 :            : 
     620                 :            : PyDoc_STRVAR(_asyncio_Task_set_exception__doc__,
     621                 :            : "set_exception($self, exception, /)\n"
     622                 :            : "--\n"
     623                 :            : "\n");
     624                 :            : 
     625                 :            : #define _ASYNCIO_TASK_SET_EXCEPTION_METHODDEF    \
     626                 :            :     {"set_exception", (PyCFunction)_asyncio_Task_set_exception, METH_O, _asyncio_Task_set_exception__doc__},
     627                 :            : 
     628                 :            : PyDoc_STRVAR(_asyncio_Task_get_coro__doc__,
     629                 :            : "get_coro($self, /)\n"
     630                 :            : "--\n"
     631                 :            : "\n");
     632                 :            : 
     633                 :            : #define _ASYNCIO_TASK_GET_CORO_METHODDEF    \
     634                 :            :     {"get_coro", (PyCFunction)_asyncio_Task_get_coro, METH_NOARGS, _asyncio_Task_get_coro__doc__},
     635                 :            : 
     636                 :            : static PyObject *
     637                 :            : _asyncio_Task_get_coro_impl(TaskObj *self);
     638                 :            : 
     639                 :            : static PyObject *
     640                 :          4 : _asyncio_Task_get_coro(TaskObj *self, PyObject *Py_UNUSED(ignored))
     641                 :            : {
     642                 :          4 :     return _asyncio_Task_get_coro_impl(self);
     643                 :            : }
     644                 :            : 
     645                 :            : PyDoc_STRVAR(_asyncio_Task_get_name__doc__,
     646                 :            : "get_name($self, /)\n"
     647                 :            : "--\n"
     648                 :            : "\n");
     649                 :            : 
     650                 :            : #define _ASYNCIO_TASK_GET_NAME_METHODDEF    \
     651                 :            :     {"get_name", (PyCFunction)_asyncio_Task_get_name, METH_NOARGS, _asyncio_Task_get_name__doc__},
     652                 :            : 
     653                 :            : static PyObject *
     654                 :            : _asyncio_Task_get_name_impl(TaskObj *self);
     655                 :            : 
     656                 :            : static PyObject *
     657                 :       1772 : _asyncio_Task_get_name(TaskObj *self, PyObject *Py_UNUSED(ignored))
     658                 :            : {
     659                 :       1772 :     return _asyncio_Task_get_name_impl(self);
     660                 :            : }
     661                 :            : 
     662                 :            : PyDoc_STRVAR(_asyncio_Task_set_name__doc__,
     663                 :            : "set_name($self, value, /)\n"
     664                 :            : "--\n"
     665                 :            : "\n");
     666                 :            : 
     667                 :            : #define _ASYNCIO_TASK_SET_NAME_METHODDEF    \
     668                 :            :     {"set_name", (PyCFunction)_asyncio_Task_set_name, METH_O, _asyncio_Task_set_name__doc__},
     669                 :            : 
     670                 :            : PyDoc_STRVAR(_asyncio__get_running_loop__doc__,
     671                 :            : "_get_running_loop($module, /)\n"
     672                 :            : "--\n"
     673                 :            : "\n"
     674                 :            : "Return the running event loop or None.\n"
     675                 :            : "\n"
     676                 :            : "This is a low-level function intended to be used by event loops.\n"
     677                 :            : "This function is thread-specific.");
     678                 :            : 
     679                 :            : #define _ASYNCIO__GET_RUNNING_LOOP_METHODDEF    \
     680                 :            :     {"_get_running_loop", (PyCFunction)_asyncio__get_running_loop, METH_NOARGS, _asyncio__get_running_loop__doc__},
     681                 :            : 
     682                 :            : static PyObject *
     683                 :            : _asyncio__get_running_loop_impl(PyObject *module);
     684                 :            : 
     685                 :            : static PyObject *
     686                 :      11586 : _asyncio__get_running_loop(PyObject *module, PyObject *Py_UNUSED(ignored))
     687                 :            : {
     688                 :      11586 :     return _asyncio__get_running_loop_impl(module);
     689                 :            : }
     690                 :            : 
     691                 :            : PyDoc_STRVAR(_asyncio__set_running_loop__doc__,
     692                 :            : "_set_running_loop($module, loop, /)\n"
     693                 :            : "--\n"
     694                 :            : "\n"
     695                 :            : "Set the running event loop.\n"
     696                 :            : "\n"
     697                 :            : "This is a low-level function intended to be used by event loops.\n"
     698                 :            : "This function is thread-specific.");
     699                 :            : 
     700                 :            : #define _ASYNCIO__SET_RUNNING_LOOP_METHODDEF    \
     701                 :            :     {"_set_running_loop", (PyCFunction)_asyncio__set_running_loop, METH_O, _asyncio__set_running_loop__doc__},
     702                 :            : 
     703                 :            : PyDoc_STRVAR(_asyncio_get_event_loop__doc__,
     704                 :            : "get_event_loop($module, /)\n"
     705                 :            : "--\n"
     706                 :            : "\n"
     707                 :            : "Return an asyncio event loop.\n"
     708                 :            : "\n"
     709                 :            : "When called from a coroutine or a callback (e.g. scheduled with\n"
     710                 :            : "call_soon or similar API), this function will always return the\n"
     711                 :            : "running event loop.\n"
     712                 :            : "\n"
     713                 :            : "If there is no running event loop set, the function will return\n"
     714                 :            : "the result of `get_event_loop_policy().get_event_loop()` call.");
     715                 :            : 
     716                 :            : #define _ASYNCIO_GET_EVENT_LOOP_METHODDEF    \
     717                 :            :     {"get_event_loop", (PyCFunction)_asyncio_get_event_loop, METH_NOARGS, _asyncio_get_event_loop__doc__},
     718                 :            : 
     719                 :            : static PyObject *
     720                 :            : _asyncio_get_event_loop_impl(PyObject *module);
     721                 :            : 
     722                 :            : static PyObject *
     723                 :         19 : _asyncio_get_event_loop(PyObject *module, PyObject *Py_UNUSED(ignored))
     724                 :            : {
     725                 :         19 :     return _asyncio_get_event_loop_impl(module);
     726                 :            : }
     727                 :            : 
     728                 :            : PyDoc_STRVAR(_asyncio__get_event_loop__doc__,
     729                 :            : "_get_event_loop($module, /, stacklevel=3)\n"
     730                 :            : "--\n"
     731                 :            : "\n");
     732                 :            : 
     733                 :            : #define _ASYNCIO__GET_EVENT_LOOP_METHODDEF    \
     734                 :            :     {"_get_event_loop", _PyCFunction_CAST(_asyncio__get_event_loop), METH_FASTCALL|METH_KEYWORDS, _asyncio__get_event_loop__doc__},
     735                 :            : 
     736                 :            : static PyObject *
     737                 :            : _asyncio__get_event_loop_impl(PyObject *module, int stacklevel);
     738                 :            : 
     739                 :            : static PyObject *
     740                 :        461 : _asyncio__get_event_loop(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     741                 :            : {
     742                 :        461 :     PyObject *return_value = NULL;
     743                 :            :     static const char * const _keywords[] = {"stacklevel", NULL};
     744                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "_get_event_loop", 0};
     745                 :            :     PyObject *argsbuf[1];
     746         [ +  + ]:        461 :     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
     747                 :        461 :     int stacklevel = 3;
     748                 :            : 
     749   [ +  +  +  -  :        461 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
             +  -  -  + ]
     750         [ -  + ]:        461 :     if (!args) {
     751                 :          0 :         goto exit;
     752                 :            :     }
     753         [ +  + ]:        461 :     if (!noptargs) {
     754                 :        108 :         goto skip_optional_pos;
     755                 :            :     }
     756                 :        353 :     stacklevel = _PyLong_AsInt(args[0]);
     757   [ -  +  -  - ]:        353 :     if (stacklevel == -1 && PyErr_Occurred()) {
     758                 :          0 :         goto exit;
     759                 :            :     }
     760                 :        353 : skip_optional_pos:
     761                 :        461 :     return_value = _asyncio__get_event_loop_impl(module, stacklevel);
     762                 :            : 
     763                 :        461 : exit:
     764                 :        461 :     return return_value;
     765                 :            : }
     766                 :            : 
     767                 :            : PyDoc_STRVAR(_asyncio_get_running_loop__doc__,
     768                 :            : "get_running_loop($module, /)\n"
     769                 :            : "--\n"
     770                 :            : "\n"
     771                 :            : "Return the running event loop.  Raise a RuntimeError if there is none.\n"
     772                 :            : "\n"
     773                 :            : "This function is thread-specific.");
     774                 :            : 
     775                 :            : #define _ASYNCIO_GET_RUNNING_LOOP_METHODDEF    \
     776                 :            :     {"get_running_loop", (PyCFunction)_asyncio_get_running_loop, METH_NOARGS, _asyncio_get_running_loop__doc__},
     777                 :            : 
     778                 :            : static PyObject *
     779                 :            : _asyncio_get_running_loop_impl(PyObject *module);
     780                 :            : 
     781                 :            : static PyObject *
     782                 :      11422 : _asyncio_get_running_loop(PyObject *module, PyObject *Py_UNUSED(ignored))
     783                 :            : {
     784                 :      11422 :     return _asyncio_get_running_loop_impl(module);
     785                 :            : }
     786                 :            : 
     787                 :            : PyDoc_STRVAR(_asyncio__register_task__doc__,
     788                 :            : "_register_task($module, /, task)\n"
     789                 :            : "--\n"
     790                 :            : "\n"
     791                 :            : "Register a new task in asyncio as executed by loop.\n"
     792                 :            : "\n"
     793                 :            : "Returns None.");
     794                 :            : 
     795                 :            : #define _ASYNCIO__REGISTER_TASK_METHODDEF    \
     796                 :            :     {"_register_task", _PyCFunction_CAST(_asyncio__register_task), METH_FASTCALL|METH_KEYWORDS, _asyncio__register_task__doc__},
     797                 :            : 
     798                 :            : static PyObject *
     799                 :            : _asyncio__register_task_impl(PyObject *module, PyObject *task);
     800                 :            : 
     801                 :            : static PyObject *
     802                 :       1136 : _asyncio__register_task(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     803                 :            : {
     804                 :       1136 :     PyObject *return_value = NULL;
     805                 :            :     static const char * const _keywords[] = {"task", NULL};
     806                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "_register_task", 0};
     807                 :            :     PyObject *argsbuf[1];
     808                 :            :     PyObject *task;
     809                 :            : 
     810   [ +  -  +  -  :       1136 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
             +  -  -  + ]
     811         [ -  + ]:       1136 :     if (!args) {
     812                 :          0 :         goto exit;
     813                 :            :     }
     814                 :       1136 :     task = args[0];
     815                 :       1136 :     return_value = _asyncio__register_task_impl(module, task);
     816                 :            : 
     817                 :       1136 : exit:
     818                 :       1136 :     return return_value;
     819                 :            : }
     820                 :            : 
     821                 :            : PyDoc_STRVAR(_asyncio__unregister_task__doc__,
     822                 :            : "_unregister_task($module, /, task)\n"
     823                 :            : "--\n"
     824                 :            : "\n"
     825                 :            : "Unregister a task.\n"
     826                 :            : "\n"
     827                 :            : "Returns None.");
     828                 :            : 
     829                 :            : #define _ASYNCIO__UNREGISTER_TASK_METHODDEF    \
     830                 :            :     {"_unregister_task", _PyCFunction_CAST(_asyncio__unregister_task), METH_FASTCALL|METH_KEYWORDS, _asyncio__unregister_task__doc__},
     831                 :            : 
     832                 :            : static PyObject *
     833                 :            : _asyncio__unregister_task_impl(PyObject *module, PyObject *task);
     834                 :            : 
     835                 :            : static PyObject *
     836                 :          5 : _asyncio__unregister_task(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     837                 :            : {
     838                 :          5 :     PyObject *return_value = NULL;
     839                 :            :     static const char * const _keywords[] = {"task", NULL};
     840                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "_unregister_task", 0};
     841                 :            :     PyObject *argsbuf[1];
     842                 :            :     PyObject *task;
     843                 :            : 
     844   [ +  -  +  -  :          5 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
             +  -  -  + ]
     845         [ -  + ]:          5 :     if (!args) {
     846                 :          0 :         goto exit;
     847                 :            :     }
     848                 :          5 :     task = args[0];
     849                 :          5 :     return_value = _asyncio__unregister_task_impl(module, task);
     850                 :            : 
     851                 :          5 : exit:
     852                 :          5 :     return return_value;
     853                 :            : }
     854                 :            : 
     855                 :            : PyDoc_STRVAR(_asyncio__enter_task__doc__,
     856                 :            : "_enter_task($module, /, loop, task)\n"
     857                 :            : "--\n"
     858                 :            : "\n"
     859                 :            : "Enter into task execution or resume suspended task.\n"
     860                 :            : "\n"
     861                 :            : "Task belongs to loop.\n"
     862                 :            : "\n"
     863                 :            : "Returns None.");
     864                 :            : 
     865                 :            : #define _ASYNCIO__ENTER_TASK_METHODDEF    \
     866                 :            :     {"_enter_task", _PyCFunction_CAST(_asyncio__enter_task), METH_FASTCALL|METH_KEYWORDS, _asyncio__enter_task__doc__},
     867                 :            : 
     868                 :            : static PyObject *
     869                 :            : _asyncio__enter_task_impl(PyObject *module, PyObject *loop, PyObject *task);
     870                 :            : 
     871                 :            : static PyObject *
     872                 :       1709 : _asyncio__enter_task(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     873                 :            : {
     874                 :       1709 :     PyObject *return_value = NULL;
     875                 :            :     static const char * const _keywords[] = {"loop", "task", NULL};
     876                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "_enter_task", 0};
     877                 :            :     PyObject *argsbuf[2];
     878                 :            :     PyObject *loop;
     879                 :            :     PyObject *task;
     880                 :            : 
     881   [ +  -  +  -  :       1709 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
             +  -  -  + ]
     882         [ -  + ]:       1709 :     if (!args) {
     883                 :          0 :         goto exit;
     884                 :            :     }
     885                 :       1709 :     loop = args[0];
     886                 :       1709 :     task = args[1];
     887                 :       1709 :     return_value = _asyncio__enter_task_impl(module, loop, task);
     888                 :            : 
     889                 :       1709 : exit:
     890                 :       1709 :     return return_value;
     891                 :            : }
     892                 :            : 
     893                 :            : PyDoc_STRVAR(_asyncio__leave_task__doc__,
     894                 :            : "_leave_task($module, /, loop, task)\n"
     895                 :            : "--\n"
     896                 :            : "\n"
     897                 :            : "Leave task execution or suspend a task.\n"
     898                 :            : "\n"
     899                 :            : "Task belongs to loop.\n"
     900                 :            : "\n"
     901                 :            : "Returns None.");
     902                 :            : 
     903                 :            : #define _ASYNCIO__LEAVE_TASK_METHODDEF    \
     904                 :            :     {"_leave_task", _PyCFunction_CAST(_asyncio__leave_task), METH_FASTCALL|METH_KEYWORDS, _asyncio__leave_task__doc__},
     905                 :            : 
     906                 :            : static PyObject *
     907                 :            : _asyncio__leave_task_impl(PyObject *module, PyObject *loop, PyObject *task);
     908                 :            : 
     909                 :            : static PyObject *
     910                 :       1710 : _asyncio__leave_task(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
     911                 :            : {
     912                 :       1710 :     PyObject *return_value = NULL;
     913                 :            :     static const char * const _keywords[] = {"loop", "task", NULL};
     914                 :            :     static _PyArg_Parser _parser = {NULL, _keywords, "_leave_task", 0};
     915                 :            :     PyObject *argsbuf[2];
     916                 :            :     PyObject *loop;
     917                 :            :     PyObject *task;
     918                 :            : 
     919   [ +  -  +  -  :       1710 :     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
             +  -  -  + ]
     920         [ -  + ]:       1710 :     if (!args) {
     921                 :          0 :         goto exit;
     922                 :            :     }
     923                 :       1710 :     loop = args[0];
     924                 :       1710 :     task = args[1];
     925                 :       1710 :     return_value = _asyncio__leave_task_impl(module, loop, task);
     926                 :            : 
     927                 :       1710 : exit:
     928                 :       1710 :     return return_value;
     929                 :            : }
     930                 :            : /*[clinic end generated code: output=eccf150c9c30efd5 input=a9049054013a1b77]*/

Generated by: LCOV version 1.14