[Python-checkins] python/nondist/sandbox/ast astmodule.c,1.8,1.9

jhylton@users.sourceforge.net jhylton@users.sourceforge.net
2002年7月05日 12:57:02 -0700


Update of /cvsroot/python/python/nondist/sandbox/ast
In directory usw-pr-cvs1:/tmp/cvs-serv29652
Modified Files:
	astmodule.c 
Log Message:
experiment: add attribute to stmt type.
also:
call set_context recursively for list & tuple assignments.
Lambda requires an arguments() arg.
ad ast_for_sliceop() XXX.
Index: astmodule.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/ast/astmodule.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** astmodule.c	30 May 2002 20:09:13 -0000	1.8
--- astmodule.c	5 Jul 2002 19:57:00 -0000	1.9
***************
*** 12,15 ****
--- 12,19 ----
 #include "graminit.h"
 
+ #ifndef LINENO
+ #define LINENO(n)	((n)->n_lineno)
+ #endif
+ 
 #define NEW_IDENTIFIER(n) PyString_InternFromString(STR(n))
 
***************
*** 57,60 ****
--- 61,65 ----
 set_context(expr_ty e, expr_context_ty ctx)
 {
+ 	asdl_seq *s = NULL;
 switch (e->kind) {
 case Attribute_kind:
***************
*** 69,80 ****
--- 74,95 ----
 case List_kind:
 	e->v.List.ctx = ctx;
+ 	s = e->v.List.elts;
 	break;
 case Tuple_kind:
 	e->v.Tuple.ctx = ctx;
+ 	s = e->v.Tuple.elts;
 	break;
 default:
+ 	 /* This should trigger syntax error */
 	fprintf(stderr, "can't set context for %d\n", e->kind);
 	return -1;
 }
+ if (s) {
+ 	int i;
+ 	for (i = 0; i < asdl_seq_LEN(s); i++) {
+ 	 if (set_context(asdl_seq_get(s, i), ctx) < 0)
+ 		return -1;
+ 	}
+ }
 return 0;
 }
***************
*** 174,177 ****
--- 189,202 ----
 }
 
+ static expr_ty
+ ast_for_sliceop(node *n)
+ {
+ REQ(n, sliceop);
+ if (NCH(n) == 1)
+ 	return NULL;
+ else
+ 	return ast_for_expr(CHILD(n, 1));
+ }
+ 
 static arguments_ty
 ast_for_arguments(node *n)
***************
*** 254,258 ****
 REQ(n, funcdef);
 return FunctionDef(name, ast_for_arguments(CHILD(n, 2)),
! 		 ast_for_suite(CHILD(n, 4)));
 }
 
--- 279,283 ----
 REQ(n, funcdef);
 return FunctionDef(name, ast_for_arguments(CHILD(n, 2)),
! 		 ast_for_suite(CHILD(n, 4)), LINENO(n));
 }
 
***************
*** 262,266 ****
 /* lambdef: 'lambda' [varargslist] ':' test */
 if (NCH(n) == 3)
! 	return Lambda(NULL, ast_for_expr(CHILD(n, 2)));
 else
 	return Lambda(ast_for_arguments(CHILD(n, 1)),
--- 287,292 ----
 /* lambdef: 'lambda' [varargslist] ':' test */
 if (NCH(n) == 3)
! 	return Lambda(arguments(NULL, NULL, NULL, NULL), 
! 		 ast_for_expr(CHILD(n, 2)));
 else
 	return Lambda(ast_for_arguments(CHILD(n, 1)),
***************
*** 392,395 ****
--- 418,422 ----
 	return Num(PyString_FromString(STR(ch)));
 	break;
+ }
 	/* XXX other cases... */
 case LPAR: /* tuple */
***************
*** 659,667 ****
 fprintf(stderr, "ast_for_expr_stmt(%d, %d)\n", TYPE(n), NCH(n));
 if (NCH(n) == 1) {
! 	return Expr(ast_for_testlist(CHILD(n, 0)));
 } else if (TYPE(CHILD(n, 1)) == augassign) {
 	return AugAssign(ast_for_testlist(CHILD(n, 0)),
 			 ast_for_augassign(CHILD(n, 1)),
! 			 ast_for_testlist(CHILD(n, 2)));
 } else {
 	int i;
--- 686,695 ----
 fprintf(stderr, "ast_for_expr_stmt(%d, %d)\n", TYPE(n), NCH(n));
 if (NCH(n) == 1) {
! 	return Expr(ast_for_testlist(CHILD(n, 0)), LINENO(n));
 } else if (TYPE(CHILD(n, 1)) == augassign) {
 	return AugAssign(ast_for_testlist(CHILD(n, 0)),
 			 ast_for_augassign(CHILD(n, 1)),
! 			 ast_for_testlist(CHILD(n, 2)),
! 			 LINENO(n));
 } else {
 	int i;
***************
*** 677,681 ****
 	 asdl_seq_append(targets, e);
 	}
! 	return Assign(targets, ast_for_testlist(CHILD(n, NCH(n) - 1)));
 }
 return NULL;
--- 705,710 ----
 	 asdl_seq_append(targets, e);
 	}
! 	return Assign(targets, ast_for_testlist(CHILD(n, NCH(n) - 1)),
! 		 LINENO(n));
 }
 return NULL;
***************
*** 703,707 ****
 }
 nl = (TYPE(CHILD(n, NCH(n) - 1)) == COMMA) ? false : true;
! return Print(dest, seq, nl);
 }
 
--- 732,736 ----
 }
 nl = (TYPE(CHILD(n, NCH(n) - 1)) == COMMA) ? false : true;
! return Print(dest, seq, nl, LINENO(n));
 }
 
***************
*** 731,735 ****
 /* del_stmt: 'del' exprlist */
 REQ(n, del_stmt);
! return Delete(ast_for_exprlist(CHILD(n, 1), Del));
 }
 
--- 760,764 ----
 /* del_stmt: 'del' exprlist */
 REQ(n, del_stmt);
! return Delete(ast_for_exprlist(CHILD(n, 1), Del), LINENO(n));
 }
 
***************
*** 752,778 ****
 switch (TYPE(ch)) {
 case break_stmt:
! 	return Break();
 case continue_stmt:
! 	return Continue();
 case yield_stmt:
! 	return Yield(ast_for_testlist(CHILD(ch, 1)));
 case return_stmt:
 	if (NCH(ch) == 1)
! 	 return Return(NULL);
 	else
! 	 return Return(ast_for_testlist(CHILD(ch, 1)));
 case raise_stmt:
 	if (NCH(ch) == 1)
! 	 return Raise(NULL, NULL, NULL);
 	else if (NCH(ch) == 2)
! 	 return Raise(ast_for_expr(CHILD(n, 1)), NULL, NULL);
 	else if (NCH(ch) == 4)
 	 return Raise(ast_for_expr(CHILD(n, 1)), 
 			 ast_for_expr(CHILD(n, 3)), 
! 			 NULL);
 	else if (NCH(ch) == 6)
 	 return Raise(ast_for_expr(CHILD(n, 1)), 
 			 ast_for_expr(CHILD(n, 3)), 
! 			 ast_for_expr(CHILD(n, 5)));
 default:
 	fprintf(stderr, "unexpected flow_stmt: %d\n", TYPE(ch));
--- 781,807 ----
 switch (TYPE(ch)) {
 case break_stmt:
! 	return Break(LINENO(n));
 case continue_stmt:
! 	return Continue(LINENO(n));
 case yield_stmt:
! 	return Yield(ast_for_testlist(CHILD(ch, 1)), LINENO(n));
 case return_stmt:
 	if (NCH(ch) == 1)
! 	 return Return(NULL, LINENO(n));
 	else
! 	 return Return(ast_for_testlist(CHILD(ch, 1)), LINENO(n));
 case raise_stmt:
 	if (NCH(ch) == 1)
! 	 return Raise(NULL, NULL, NULL, LINENO(n));
 	else if (NCH(ch) == 2)
! 	 return Raise(ast_for_expr(CHILD(n, 1)), NULL, NULL, LINENO(n));
 	else if (NCH(ch) == 4)
 	 return Raise(ast_for_expr(CHILD(n, 1)), 
 			 ast_for_expr(CHILD(n, 3)), 
! 			 NULL, LINENO(n));
 	else if (NCH(ch) == 6)
 	 return Raise(ast_for_expr(CHILD(n, 1)), 
 			 ast_for_expr(CHILD(n, 3)), 
! 			 ast_for_expr(CHILD(n, 5)), LINENO(n));
 default:
 	fprintf(stderr, "unexpected flow_stmt: %d\n", TYPE(ch));
***************
*** 862,866 ****
 	for (i = 1; i < NCH(n); i += 2)
 	 asdl_seq_append(aliases, alias_for_import_name(CHILD(n, i)));
! 	return Import(aliases);
 } else if (STR(CHILD(n, 0))[0] == 'f') { /* from */
 	alias_ty mod = alias_for_import_name(CHILD(n, 1));
--- 891,895 ----
 	for (i = 1; i < NCH(n); i += 2)
 	 asdl_seq_append(aliases, alias_for_import_name(CHILD(n, i)));
! 	return Import(aliases, LINENO(n));
 } else if (STR(CHILD(n, 0))[0] == 'f') { /* from */
 	alias_ty mod = alias_for_import_name(CHILD(n, 1));
***************
*** 868,872 ****
 	for (i = 3; i <= NCH(n); i += 2)
 	 asdl_seq_append(aliases, alias_for_import_name(CHILD(n, i)));
! 	return ImportFrom(mod->name, aliases);
 }
 return NULL;
--- 897,901 ----
 	for (i = 3; i <= NCH(n); i += 2)
 	 asdl_seq_append(aliases, alias_for_import_name(CHILD(n, i)));
! 	return ImportFrom(mod->name, aliases, LINENO(n));
 }
 return NULL;
***************
*** 890,894 ****
 	 return NULL;
 }
! return Global(s);
 }
 
--- 919,923 ----
 	 return NULL;
 }
! return Global(s, LINENO(n));
 }
 
***************
*** 899,910 ****
 REQ(n, exec_stmt);
 if (NCH(n) == 2)
! 	return Exec(ast_for_expr(CHILD(n, 1)), NULL, NULL);
 else if (NCH(n) == 4)
 	return Exec(ast_for_expr(CHILD(n, 1)), 
! 		 ast_for_expr(CHILD(n, 3)), NULL);
 else if (NCH(n) == 6)
 	return Exec(ast_for_expr(CHILD(n, 1)), 
 		 ast_for_expr(CHILD(n, 3)),
! 		 ast_for_expr(CHILD(n, 5)));
 return NULL;
 }
--- 928,939 ----
 REQ(n, exec_stmt);
 if (NCH(n) == 2)
! 	return Exec(ast_for_expr(CHILD(n, 1)), NULL, NULL, LINENO(n));
 else if (NCH(n) == 4)
 	return Exec(ast_for_expr(CHILD(n, 1)), 
! 		 ast_for_expr(CHILD(n, 3)), NULL, LINENO(n));
 else if (NCH(n) == 6)
 	return Exec(ast_for_expr(CHILD(n, 1)), 
 		 ast_for_expr(CHILD(n, 3)),
! 		 ast_for_expr(CHILD(n, 5)), LINENO(n));
 return NULL;
 }
***************
*** 916,923 ****
 REQ(n, assert_stmt);
 if (NCH(n) == 2)
! 	return Assert(ast_for_expr(CHILD(n, 1)), NULL);
 else if (NCH(n) == 4)
 	return Assert(ast_for_expr(CHILD(n, 1)),
! 		 ast_for_expr(CHILD(n, 3)));
 return NULL;
 }
--- 945,952 ----
 REQ(n, assert_stmt);
 if (NCH(n) == 2)
! 	return Assert(ast_for_expr(CHILD(n, 1)), NULL, LINENO(n));
 else if (NCH(n) == 4)
 	return Assert(ast_for_expr(CHILD(n, 1)),
! 		 ast_for_expr(CHILD(n, 3)), LINENO(n));
 return NULL;
 }
***************
*** 965,969 ****
 if (NCH(n) == 4)
 	return If(ast_for_expr(CHILD(n, 1)),
! 		 ast_for_suite(CHILD(n, 3)), NULL);
 s = STR(CHILD(n, 4));
 /* s[2], the third character in the string, will be 
--- 994,998 ----
 if (NCH(n) == 4)
 	return If(ast_for_expr(CHILD(n, 1)),
! 		 ast_for_suite(CHILD(n, 3)), NULL, LINENO(n));
 s = STR(CHILD(n, 4));
 /* s[2], the third character in the string, will be 
***************
*** 974,978 ****
 	return If(ast_for_expr(CHILD(n, 1)),
 		 ast_for_suite(CHILD(n, 3)),
! 		 ast_for_suite(CHILD(n, 6)));
 else {
 	int i, n_elif, has_else = 0;
--- 1003,1007 ----
 	return If(ast_for_expr(CHILD(n, 1)),
 		 ast_for_suite(CHILD(n, 3)),
! 		 ast_for_suite(CHILD(n, 6)), LINENO(n));
 else {
 	int i, n_elif, has_else = 0;
***************
*** 991,995 ****
 			 If(ast_for_expr(CHILD(n, NCH(n) - 6)),
 			 ast_for_suite(CHILD(n, NCH(n) - 4)),
! 			 ast_for_suite(CHILD(n, NCH(n) - 1))));
 	 /* the just-created orelse handled the last elif */
 	 n_elif--;
--- 1020,1025 ----
 			 If(ast_for_expr(CHILD(n, NCH(n) - 6)),
 			 ast_for_suite(CHILD(n, NCH(n) - 4)),
! 			 ast_for_suite(CHILD(n, NCH(n) - 1)), 
! 			 LINENO(n)));
 	 /* the just-created orelse handled the last elif */
 	 n_elif--;
***************
*** 1003,1011 ****
 			 If(ast_for_expr(CHILD(n, off)),
 			 ast_for_suite(CHILD(n, off + 2)),
! 			 orelse));
 	}
 	return If(ast_for_expr(CHILD(n, 1)),
 		 ast_for_suite(CHILD(n, 3)),
! 		 orelse);
 }
 
--- 1033,1041 ----
 			 If(ast_for_expr(CHILD(n, off)),
 			 ast_for_suite(CHILD(n, off + 2)),
! 			 orelse, LINENO(n)));
 	}
 	return If(ast_for_expr(CHILD(n, 1)),
 		 ast_for_suite(CHILD(n, 3)),
! 		 orelse, LINENO(n));
 }
 
***************
*** 1021,1029 ****
 if (NCH(n) == 4)
 	return While(ast_for_expr(CHILD(n, 1)),
! 		 ast_for_suite(CHILD(n, 3)), NULL);
 else
 	return While(ast_for_expr(CHILD(n, 1)),
 		 ast_for_suite(CHILD(n, 3)), 
! 		 ast_for_suite(CHILD(n, 6)));
 
 return NULL;
--- 1051,1059 ----
 if (NCH(n) == 4)
 	return While(ast_for_expr(CHILD(n, 1)),
! 		 ast_for_suite(CHILD(n, 3)), NULL, LINENO(n));
 else
 	return While(ast_for_expr(CHILD(n, 1)),
 		 ast_for_suite(CHILD(n, 3)), 
! 		 ast_for_suite(CHILD(n, 6)), LINENO(n));
 
 return NULL;
***************
*** 1052,1056 ****
 	 ast_for_testlist(CHILD(n, 3)),
 	 ast_for_suite(CHILD(n, 5)),
! 	 seq);
 return NULL;
 }
--- 1082,1086 ----
 	 ast_for_testlist(CHILD(n, 3)),
 	 ast_for_suite(CHILD(n, 5)),
! 	 seq, LINENO(n));
 return NULL;
 }
***************
*** 1083,1087 ****
 	/* try_stmt: 'try' ':' suite 'finally' ':' suite) */
 	return TryFinally(ast_for_suite(CHILD(n, 2)),
! 			 ast_for_suite(CHILD(n, 5)));
 } else {
 	/* try_stmt: ('try' ':' suite (except_clause ':' suite)+ 
--- 1113,1117 ----
 	/* try_stmt: 'try' ':' suite 'finally' ':' suite) */
 	return TryFinally(ast_for_suite(CHILD(n, 2)),
! 			 ast_for_suite(CHILD(n, 5)), LINENO(n));
 } else {
 	/* try_stmt: ('try' ':' suite (except_clause ':' suite)+ 
***************
*** 1101,1105 ****
 						 CHILD(n, 5 + i * 3)));
 	return TryExcept(ast_for_suite(CHILD(n, 2)), handlers,
! 			 has_else ? ast_for_suite(CHILD(n, NCH(n) - 1)): NULL);
 }
 return NULL;
--- 1131,1136 ----
 						 CHILD(n, 5 + i * 3)));
 	return TryExcept(ast_for_suite(CHILD(n, 2)), handlers,
! 			 has_else ? ast_for_suite(CHILD(n, NCH(n) - 1)): NULL,
! 			 LINENO(n));
 }
 return NULL;
***************
*** 1115,1119 ****
 if (NCH(n) == 4) 
 	return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL,
! 			ast_for_suite(CHILD(n, 3)));
 /* else handle the base class list */
 _bases = ast_for_testlist(CHILD(n, 3));
--- 1146,1150 ----
 if (NCH(n) == 4) 
 	return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), NULL,
! 			ast_for_suite(CHILD(n, 3)), LINENO(n));
 /* else handle the base class list */
 _bases = ast_for_testlist(CHILD(n, 3));
***************
*** 1125,1129 ****
 }
 return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), bases,
! 		 ast_for_suite(CHILD(n, 6)));
 return NULL;
 }
--- 1156,1160 ----
 }
 return ClassDef(NEW_IDENTIFIER(CHILD(n, 1)), bases,
! 		 ast_for_suite(CHILD(n, 6)), LINENO(n));
 return NULL;
 }
***************
*** 1160,1164 ****
 	 return ast_for_del_stmt(n);
 	case pass_stmt:
! 	 return Pass();
 	case flow_stmt:
 	 return ast_for_flow_stmt(n);
--- 1191,1195 ----
 	 return ast_for_del_stmt(n);
 	case pass_stmt:
! 	 return Pass(LINENO(n));
 	case flow_stmt:
 	 return ast_for_flow_stmt(n);

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