[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

AltStyle によって変換されたページ (->オリジナル) /