diff options
author | Christian Heimes <christian@cheimes.de> | 2013-07-22 16:34:28 +0200 |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2013-07-22 16:34:28 +0200 |
commit | b2decdab33ce8b74051a8dcddfa409d7f9af8fb1 (patch) | |
tree | d58fc597874e0c5bb3e878ed2b446bcb606f5f04 /Python/future.c | |
parent | b69651179a1ac37b3e959a404388ce9fc1b273f8 (diff) | |
parent | edc97951e09d9ea20937dbddf4b0d9b09c6cb463 (diff) | |
download | cpython-b2decdab33ce8b74051a8dcddfa409d7f9af8fb1.tar.gz |
Some compilers complain about 'control reaches end of non-void function'
because they don't understand that Py_FatalError() terminates the program.
Diffstat (limited to 'Python/future.c')
-rw-r--r-- | Python/future.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/Python/future.c b/Python/future.c index d24ae416ff..80978147f5 100644 --- a/Python/future.c +++ b/Python/future.c @@ -58,11 +58,15 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) 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; + stmt_ty first; 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 +75,13 @@ future_parse(PyFutureFeatures *ff, mod_ty mod, const char *filename) but is preceded by a regular import. */ + i = 0; + 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 +108,13 @@ future_parse(PyFutureFeatures *ff, mod_ty mod, const char *filename) 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 + else { done = 1; + } } return 1; } |