Mercurial > cpython-lru_cache-weakref
diff Python/future.c @ 82687:46cadd3955d0
reject non-docs strings between future imports (closes #17434)
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Sat, 16 Mar 2013 09:15:47 -0700 |
| parents | b97964af7299 |
| children | 0e253370863f |
line wrap: on
line diff
--- a/Python/future.c Sat Mar 16 08:03:51 2013 +0100 +++ b/Python/future.c Sat Mar 16 09:15:47 2013 -0700 @@ -58,11 +58,14 @@ static int future_parse(PyFutureFeatures *ff, mod_ty mod, const char *filename) { - int i, found_docstring = 0, done = 0, prev_line = 0; + int i, done = 0, prev_line = 0; if (!(mod->kind == Module_kind || mod->kind == Interactive_kind)) return 1; + if (asdl_seq_LEN(mod->v.Module.body) == 0) + return 1; + /* A subsequent pass will detect future imports that don't appear at the beginning of the file. There's one case, however, that is easier to handle here: A series of imports @@ -71,8 +74,13 @@ but is preceded by a regular import. */ + i = 0; + stmt_ty first = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i); + if (first->kind == Expr_kind && first->v.Expr.value->kind == Str_kind) + i++; - for (i = 0; i < asdl_seq_LEN(mod->v.Module.body); i++) { + + for (; i < asdl_seq_LEN(mod->v.Module.body); i++) { stmt_ty s = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i); if (done && s->lineno > prev_line) @@ -99,18 +107,13 @@ return 0; ff->ff_lineno = s->lineno; } - else + else { done = 1; + } } - else if (s->kind == Expr_kind && !found_docstring) { - expr_ty e = s->v.Expr.value; - if (e->kind != Str_kind) - done = 1; - else - found_docstring = 1; + else { + done = 1; } - else - done = 1; } return 1; }
