mirror of https://github.com/python/cpython
Make first raise argument optional
This commit is contained in:
parent
926f13a081
commit
d295f120ae
|
@ -40,7 +40,7 @@ flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt
|
|||
break_stmt: 'break'
|
||||
continue_stmt: 'continue'
|
||||
return_stmt: 'return' [testlist]
|
||||
raise_stmt: 'raise' test [',' test [',' test]]
|
||||
raise_stmt: 'raise' [test [',' test [',' test]]]
|
||||
import_stmt: 'import' dotted_name (',' dotted_name)* | 'from' dotted_name 'import' ('*' | NAME (',' NAME)*)
|
||||
dotted_name: NAME ('.' NAME)*
|
||||
global_stmt: 'global' NAME (',' NAME)*
|
||||
|
|
|
@ -1090,6 +1090,7 @@ eval_code2(co, globals, locals,
|
|||
/* Fallthrough */
|
||||
case 1:
|
||||
w = POP(); /* exc */
|
||||
case 0: /* Fallthrough */
|
||||
why = do_raise(w, v, u);
|
||||
break;
|
||||
default:
|
||||
|
@ -1967,6 +1968,17 @@ static enum why_code
|
|||
do_raise(type, value, tb)
|
||||
PyObject *type, *value, *tb;
|
||||
{
|
||||
if (type == NULL) {
|
||||
/* Reraise */
|
||||
PyThreadState *tstate = PyThreadState_Get();
|
||||
type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
|
||||
value = tstate->exc_value;
|
||||
tb = tstate->exc_traceback;
|
||||
Py_XINCREF(type);
|
||||
Py_XINCREF(value);
|
||||
Py_XINCREF(tb);
|
||||
}
|
||||
|
||||
/* We support the following forms of raise:
|
||||
raise <class>, <classinstance>
|
||||
raise <class>, <argument tuple>
|
||||
|
|
|
@ -659,6 +659,8 @@ com_add(c, list, v)
|
|||
{
|
||||
int n = PyList_Size(list);
|
||||
int i;
|
||||
/* XXX This is quadratic in the number of names per compilation unit.
|
||||
XXX Should use a dictionary. */
|
||||
for (i = n; --i >= 0; ) {
|
||||
PyObject *w = PyList_GetItem(list, i);
|
||||
if (v->ob_type == w->ob_type && PyObject_Compare(v, w) == 0)
|
||||
|
@ -2050,12 +2052,14 @@ com_raise_stmt(c, n)
|
|||
node *n;
|
||||
{
|
||||
int i;
|
||||
REQ(n, raise_stmt); /* 'raise' test [',' test [',' test]] */
|
||||
com_node(c, CHILD(n, 1));
|
||||
if (NCH(n) > 3) {
|
||||
com_node(c, CHILD(n, 3));
|
||||
if (NCH(n) > 5)
|
||||
com_node(c, CHILD(n, 5));
|
||||
REQ(n, raise_stmt); /* 'raise' [test [',' test [',' test]]] */
|
||||
if (NCH(n) > 1) {
|
||||
com_node(c, CHILD(n, 1));
|
||||
if (NCH(n) > 3) {
|
||||
com_node(c, CHILD(n, 3));
|
||||
if (NCH(n) > 5)
|
||||
com_node(c, CHILD(n, 5));
|
||||
}
|
||||
}
|
||||
i = NCH(n)/2;
|
||||
com_addoparg(c, RAISE_VARARGS, i);
|
||||
|
|
|
@ -331,8 +331,9 @@ static state states_18[3] = {
|
|||
static arc arcs_19_0[1] = {
|
||||
{48, 1},
|
||||
};
|
||||
static arc arcs_19_1[1] = {
|
||||
static arc arcs_19_1[2] = {
|
||||
{21, 2},
|
||||
{0, 1},
|
||||
};
|
||||
static arc arcs_19_2[2] = {
|
||||
{22, 3},
|
||||
|
@ -353,7 +354,7 @@ static arc arcs_19_6[1] = {
|
|||
};
|
||||
static state states_19[7] = {
|
||||
{1, arcs_19_0},
|
||||
{1, arcs_19_1},
|
||||
{2, arcs_19_1},
|
||||
{2, arcs_19_2},
|
||||
{1, arcs_19_3},
|
||||
{2, arcs_19_4},
|
||||
|
|
Loading…
Reference in New Issue