Mercurial > cpython-lru_cache-weakref
diff Python/ast.c @ 70499:e0e663132363
unify TryExcept and TryFinally (closes #12199)
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Sun, 29 May 2011 11:43:10 -0500 |
| parents | 9b11cc4e2918 |
| children | c624fd54263c |
line wrap: on
line diff
--- a/Python/ast.c Sun May 29 18:13:51 2011 +0200 +++ b/Python/ast.c Sun May 29 11:43:10 2011 -0500 @@ -2893,7 +2893,7 @@ { const int nch = NCH(n); int n_except = (nch - 3)/3; - asdl_seq *body, *orelse = NULL, *finally = NULL; + asdl_seq *body, *handlers = NULL, *orelse = NULL, *finally = NULL; REQ(n, try_stmt); @@ -2934,9 +2934,8 @@ if (n_except > 0) { int i; - stmt_ty except_st; /* process except statements to create a try ... except */ - asdl_seq *handlers = asdl_seq_new(n_except, c->c_arena); + handlers = asdl_seq_new(n_except, c->c_arena); if (handlers == NULL) return NULL; @@ -2947,23 +2946,10 @@ return NULL; asdl_seq_SET(handlers, i, e); } - - except_st = TryExcept(body, handlers, orelse, LINENO(n), - n->n_col_offset, c->c_arena); - if (!finally) - return except_st; - - /* if a 'finally' is present too, we nest the TryExcept within a - TryFinally to emulate try ... except ... finally */ - body = asdl_seq_new(1, c->c_arena); - if (body == NULL) - return NULL; - asdl_seq_SET(body, 0, except_st); } - /* must be a try ... finally (except clauses are in body, if any exist) */ - assert(finally != NULL); - return TryFinally(body, finally, LINENO(n), n->n_col_offset, c->c_arena); + assert(finally != NULL || asdl_seq_LEN(handlers)); + return Try(body, handlers, orelse, finally, LINENO(n), n->n_col_offset, c->c_arena); } /* with_item: test ['as' expr] */
