[Python-checkins] python/dist/src/Python ast.c,1.1.2.53,1.1.2.54
nnorwitz at users.sourceforge.net
nnorwitz at users.sourceforge.net
Sun Jan 16 16:15:00 CET 2005
Update of /cvsroot/python/python/dist/src/Python
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24515/Python
Modified Files:
Tag: ast-branch
ast.c
Log Message:
Get imports working after merge...still needs lots of cleanup
Index: ast.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/Attic/ast.c,v
retrieving revision 1.1.2.53
retrieving revision 1.1.2.54
diff -u -d -r1.1.2.53 -r1.1.2.54
--- ast.c 23 Apr 2004 18:25:26 -0000 1.1.2.53
+++ ast.c 16 Jan 2005 15:14:57 -0000 1.1.2.54
@@ -1670,19 +1670,23 @@
ast_for_import_stmt(struct compiling *c, const node *n)
{
/*
- import_stmt: 'import' dotted_as_name (',' dotted_as_name)*
- | 'from' dotted_name 'import' ('*'
- | import_as_name (',' import_as_name)*)
+ import_stmt: import_name | import_from
+ import_name: 'import' dotted_as_names
+ import_from: 'from' dotted_name 'import' ('*' |
+ '(' import_as_names ')' |
+ import_as_names)
*/
int i;
asdl_seq *aliases;
REQ(n, import_stmt);
+ n = CHILD(n, 0);
if (STR(CHILD(n, 0))[0] == 'i') { /* import */
- aliases = asdl_seq_new(NCH(n) / 2);
+ n = CHILD(n, 1);
+ aliases = asdl_seq_new((NCH(n) + 1) / 2);
if (!aliases)
return NULL;
- for (i = 1; i < NCH(n); i += 2) {
+ for (i = 0; i < NCH(n); i += 2) {
alias_ty import_alias = alias_for_import_name(CHILD(n, i));
if (!import_alias) {
asdl_seq_free(aliases);
@@ -1694,15 +1698,44 @@
}
else if (STR(CHILD(n, 0))[0] == 'f') { /* from */
stmt_ty import;
+ int n_children;
+ const char *from_modules;
alias_ty mod = alias_for_import_name(CHILD(n, 1));
if (!mod)
return NULL;
- aliases = asdl_seq_new((NCH(n) - 2) / 2);
+
+ /* XXX this needs to be cleaned up */
+
+ from_modules = STR(CHILD(n, 3));
+ if (!from_modules || from_modules[0] == '*')
+ n = CHILD(n, 3); /* from ... import x, y, z */
+ else if (from_modules[0] == '(')
+ n = CHILD(n, 4); /* from ... import (x, y, z) */
+ else
+ return NULL;
+
+ n_children = NCH(n);
+ if (from_modules && from_modules[0] == '*')
+ n_children = 1;
+
+ aliases = asdl_seq_new((n_children + 1) / 2);
if (!aliases) {
free(mod); /* XXX proper way to free alias_ty structs? */
return NULL;
}
- for (i = 3; i <= NCH(n); i += 2) {
+
+ /* handle "from ... import *" special b/c there's no children */
+ if (from_modules && from_modules[0] == '*') {
+ alias_ty import_alias = alias_for_import_name(n);
+ if (!import_alias) {
+ asdl_seq_free(aliases);
+ free(mod);
+ return NULL;
+ }
+ asdl_seq_APPEND(aliases, import_alias);
+ }
+
+ for (i = 0; i < NCH(n); i += 2) {
alias_ty import_alias = alias_for_import_name(CHILD(n, i));
if (!import_alias) {
asdl_seq_free(aliases);
More information about the Python-checkins
mailing list