mirror of https://github.com/python/cpython
SF bug #488687 reported by Neal Norwitz
The error for assignment to __debug__ used ste->ste_opt_lineno instead of n->n_lineno. The latter was at best incorrect; often the slot was uninitialized. Two fixes here: Use the correct lineno for the error. Initialize ste_opt_lineno in PySymtable_New(); while there are no current cases where it is referenced unless it has already been assigned to, there is no harm in initializing it.
This commit is contained in:
parent
22a51efc1c
commit
86424e333f
|
@ -5464,7 +5464,7 @@ symtable_assign(struct symtable *st, node *n, int def_flag)
|
||||||
PyErr_SetString(PyExc_SyntaxError,
|
PyErr_SetString(PyExc_SyntaxError,
|
||||||
ASSIGN_DEBUG);
|
ASSIGN_DEBUG);
|
||||||
PyErr_SyntaxLocation(st->st_filename,
|
PyErr_SyntaxLocation(st->st_filename,
|
||||||
st->st_cur->ste_opt_lineno);
|
n->n_lineno);
|
||||||
st->st_errors++;
|
st->st_errors++;
|
||||||
}
|
}
|
||||||
symtable_add_def(st, STR(tmp), DEF_LOCAL | def_flag);
|
symtable_add_def(st, STR(tmp), DEF_LOCAL | def_flag);
|
||||||
|
|
|
@ -45,6 +45,7 @@ PySymtableEntry_New(struct symtable *st, char *name, int type, int lineno)
|
||||||
ste->ste_children = v;
|
ste->ste_children = v;
|
||||||
|
|
||||||
ste->ste_optimized = 0;
|
ste->ste_optimized = 0;
|
||||||
|
ste->ste_opt_lineno = 0;
|
||||||
ste->ste_lineno = lineno;
|
ste->ste_lineno = lineno;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case funcdef:
|
case funcdef:
|
||||||
|
|
Loading…
Reference in New Issue