Mercurial > cpython-lru_cache-weakref
diff Python/ast.c @ 36681:e9f0db429f2b legacy-trunk
Clean up from-import handling.
| author | Thomas Wouters <thomas@python.org> |
|---|---|
| date | Mon, 27 Feb 2006 17:05:19 +0000 |
| parents | e1391910b026 |
| children | 52cbc447e1c9 |
line wrap: on
line diff
--- a/Python/ast.c Mon Feb 27 17:01:22 2006 +0000 +++ b/Python/ast.c Mon Feb 27 17:05:19 2006 +0000 @@ -2170,44 +2170,43 @@ } else if (STR(CHILD(n, 0))[0] == 'f') { /* from */ int n_children; - const char *from_modules; int lineno = LINENO(n); alias_ty mod = alias_for_import_name(c, CHILD(n, 1)); if (!mod) return NULL; - /* XXX this needs to be cleaned up */ - - from_modules = STR(CHILD(n, 3)); - if (!from_modules) { - n = CHILD(n, 3); /* from ... import x, y, z */ - if (NCH(n) % 2 == 0) { - /* it ends with a comma, not valid but the parser allows it */ + switch (TYPE(CHILD(n, 3))) { + case STAR: + /* from ... import * */ + n = CHILD(n, 3); + n_children = 1; + break; + case LPAR: + /* from ... import (x, y, z) */ + n = CHILD(n, 4); + n_children = NCH(n); + break; + case import_as_names: + /* from ... import x, y, z */ + n = CHILD(n, 3); + n_children = NCH(n); + if (n_children % 2 == 0) { ast_error(n, "trailing comma not allowed without" " surrounding parentheses"); return NULL; } - } - else if (from_modules[0] == '*') { - n = CHILD(n, 3); /* from ... import * */ - } - else if (from_modules[0] == '(') - n = CHILD(n, 4); /* from ... import (x, y, z) */ - else { - /* XXX: don't we need to call ast_error(n, "..."); */ - return NULL; + break; + default: + ast_error(n, "Unexpected node-type in from-import"); + return NULL; } - n_children = NCH(n); - if (from_modules && from_modules[0] == '*') - n_children = 1; - aliases = asdl_seq_new((n_children + 1) / 2, c->c_arena); if (!aliases) return NULL; /* handle "from ... import *" special b/c there's no children */ - if (from_modules && from_modules[0] == '*') { + if (TYPE(n) == STAR) { alias_ty import_alias = alias_for_import_name(c, n); if (!import_alias) return NULL;
