diff options
author | Thomas Wouters <thomas@python.org> | 2006-02-27 17:05:19 (GMT) |
---|---|---|
committer | Thomas Wouters <thomas@python.org> | 2006-02-27 17:05:19 (GMT) |
commit | 106203c6e0a70e26e85edb6460327d815f49511a (patch) | |
tree | ebebf6612828bb6d217185f257329b55813ddc83 /Python | |
parent | b79afb6e3aaa789ac971c59ac35cc5ad34cd75ff (diff) | |
download | cpython-106203c6e0a70e26e85edb6460327d815f49511a.zip cpython-106203c6e0a70e26e85edb6460327d815f49511a.tar.gz cpython-106203c6e0a70e26e85edb6460327d815f49511a.tar.bz2 |
Clean up from-import handling.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ast.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/Python/ast.c b/Python/ast.c index 25775a4..54bdacc 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -2170,44 +2170,43 @@ ast_for_import_stmt(struct compiling *c, const node *n) } 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; |