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