|
3 | 3 | #include "Python.h" |
4 | 4 | #include "structmember.h" |
5 | 5 |
|
6 | | -static struct Locals { // XXX |
| 6 | +static struct Locals { // XXX!!! |
7 | 7 | PyObject* is_error; |
8 | 8 | PyObject* ce_error; |
9 | 9 | } locals; |
@@ -67,10 +67,12 @@ _schedule_callbacks(FutureObj *fut) { |
67 | 67 | static PyObject * |
68 | 68 | FutureObj_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
69 | 69 | { |
| 70 | + static char *kwlist[] = {"loop", NULL}; |
| 71 | + |
70 | 72 | PyObject *loop; |
71 | 73 | FutureObj *fut; |
72 | 74 |
|
73 | | - if (!PyArg_UnpackTuple(args, "Future", 1, 1, &loop)) |
| 75 | + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, &loop)) |
74 | 76 | return NULL; |
75 | 77 |
|
76 | 78 | fut = PyObject_GC_New(FutureObj, type); |
@@ -255,6 +257,13 @@ FutureObj_iternext(FutureObj *fut) |
255 | 257 | return NULL; |
256 | 258 | } |
257 | 259 |
|
| 260 | +static PyObject * |
| 261 | +FutureObj_send(FutureObj *fut, PyObject *res) { |
| 262 | + PyErr_Format(PyExc_RuntimeError, |
| 263 | + "future.send() was called; unpatched asyncio"); |
| 264 | + return NULL; |
| 265 | +} |
| 266 | + |
258 | 267 | static PyObject * |
259 | 268 | FutureObj_add_done_callback(FutureObj *fut, PyObject *arg) |
260 | 269 | { |
@@ -345,6 +354,8 @@ static PyMethodDef FutureType_methods[] = { |
345 | 354 | {"done", (PyCFunction)FutureObj_done, METH_NOARGS, NULL}, |
346 | 355 | {"result", (PyCFunction)FutureObj_result, METH_NOARGS, NULL}, |
347 | 356 | {"exception", (PyCFunction)FutureObj_exception, METH_NOARGS, NULL}, |
| 357 | + |
| 358 | + {"send", (PyCFunction)FutureObj_send, METH_O, NULL}, // XXX |
348 | 359 | {NULL, NULL} /* Sentinel */ |
349 | 360 | }; |
350 | 361 |
|
@@ -425,6 +436,7 @@ futures_exec(PyObject *module) { |
425 | 436 | return -1; |
426 | 437 | } |
427 | 438 |
|
| 439 | + // XXX!!! |
428 | 440 | PyObject *asyncio = PyImport_ImportModule("asyncio"); |
429 | 441 | if (asyncio == NULL) { |
430 | 442 | return -1; |
|
0 commit comments