@@ -40,44 +40,43 @@ async_with_inner(PyObject *aw, PyObject *res)
4040 if (tb == NULL )
4141 tb = Py_NewRef (Py_None );
4242
43- PyObject * coro = PyObject_Vectorcall (
44- exit ,
45- (PyObject * []) { tp , val , tb },
46- 3 ,
47- NULL
48- );
49- Py_DECREF (tp );
50- Py_DECREF (val );
51- Py_DECREF (tb );
52- if (coro == NULL ) {
43+ if (
44+ PyAwaitable_AddExpr (
45+ aw ,
46+ PyObject_Vectorcall (
47+ exit ,
48+ (PyObject * []) { tp , val , tb },
49+ 3 ,
50+ NULL ),
51+ NULL ,
52+ NULL ) < 0
53+ ) {
54+ Py_DECREF (tp );
55+ Py_DECREF (val );
56+ Py_DECREF (tb );
5357 return -1 ;
5458 }
5559
56- if (PyAwaitable_AddAwait (aw , coro , NULL , NULL ) < 0 ) {
57- Py_DECREF (coro );
58- return -1 ;
59- }
60-
61- Py_DECREF (coro );
60+ Py_DECREF (tp );
61+ Py_DECREF (val );
62+ Py_DECREF (tb );
6263 return 0 ;
6364 }
6465 else {
6566 // OK
66- PyObject * coro = PyObject_Vectorcall (
67- exit ,
68- (PyObject * []) { Py_None , Py_None , Py_None },
69- 3 ,
70- NULL
71- );
72- if (coro == NULL ) {
67+ if (
68+ PyAwaitable_AddExpr (
69+ aw ,
70+ PyObject_Vectorcall (
71+ exit ,
72+ (PyObject * []) { Py_None , Py_None , Py_None },
73+ 3 ,
74+ NULL ),
75+ NULL ,
76+ NULL ) < 0
77+ ) {
7378 return -1 ;
7479 }
75-
76- if (PyAwaitable_AddAwait (aw , coro , NULL , NULL ) < 0 ) {
77- Py_DECREF (coro );
78- return -1 ;
79- }
80- Py_DECREF (coro );
8180 return 0 ;
8281 }
8382}
@@ -134,35 +133,25 @@ PyAwaitable_AsyncWith(
134133
135134 Py_DECREF (exit );
136135
137- PyObject * coro = PyObject_CallNoArgs (with );
138- Py_DECREF (with );
139-
140- if (coro == NULL ) {
141- Py_DECREF (inner_aw );
142- return -1 ;
143- }
144-
145136 // Note: Errors in __aenter__ are not sent to __aexit__
146137 if (
147- PyAwaitable_AddAwait (
138+ PyAwaitable_AddExpr (
148139 inner_aw ,
149- coro ,
140+ PyObject_CallNoArgs ( with ) ,
150141 async_with_inner ,
151142 NULL
152143 ) < 0
153144 ) {
154145 Py_DECREF (inner_aw );
155- Py_DECREF (coro );
146+ Py_DECREF (with );
156147 return -1 ;
157148 }
158149
159- Py_DECREF (coro );
150+ Py_DECREF (with );
160151
161- if (PyAwaitable_AddAwait (aw , inner_aw , NULL , err ) < 0 ) {
162- Py_DECREF (inner_aw );
152+ if (PyAwaitable_AddExpr (aw , inner_aw , NULL , err ) < 0 ) {
163153 return -1 ;
164154 }
165155
166- Py_DECREF (inner_aw );
167156 return 0 ;
168157}
0 commit comments