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

jhylton@users.sourceforge.net jhylton@users.sourceforge.net
Fri, 05 Jul 2002 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);