[Python-checkins] python/dist/src/Python newcompile.c,1.1.2.35,1.1.2.36

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
Tue, 25 Mar 2003 13:01:29 -0800


Update of /cvsroot/python/python/dist/src/Python
In directory sc8-pr-cvs1:/tmp/cvs-serv22227/Python

Modified Files:
      Tag: ast-branch
	newcompile.c 
Log Message:
Compiling a two-branch if/else got into an infinite loop.  Repaired.


Index: newcompile.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/Attic/newcompile.c,v
retrieving revision 1.1.2.35
retrieving revision 1.1.2.36
diff -C2 -d -r1.1.2.35 -r1.1.2.36
*** newcompile.c	25 Mar 2003 20:53:22 -0000	1.1.2.35
--- newcompile.c	25 Mar 2003 21:01:24 -0000	1.1.2.36
***************
*** 681,685 ****
  compiler_if(struct compiler *c, stmt_ty s)
  {
! 	int end, next, elif = 1;
  
  	assert(s->kind == If_kind);
--- 681,685 ----
  compiler_if(struct compiler *c, stmt_ty s)
  {
! 	int end, next;
  
  	assert(s->kind == If_kind);
***************
*** 687,691 ****
  	if (end < 0)
  		return 0;
! 	while (elif) {
  		next = compiler_new_block(c);
  		if (next < 0)
--- 687,691 ----
  	if (end < 0)
  		return 0;
! 	for (;;) {
  		next = compiler_new_block(c);
  		if (next < 0)
***************
*** 701,713 ****
  			stmt_ty t = asdl_seq_GET(s->v.If.orelse, 0);
  			if (t->kind == If_kind) {
- 				elif = 1;
  				s = t;
  				c->u->u_lineno = t->lineno;
  			}
  		}
  		else
! 			elif = 0;
! 		if (!elif)
! 			VISIT_SEQ(c, stmt, s->v.If.orelse);
  	}
  	compiler_use_block(c, end);
--- 701,714 ----
  			stmt_ty t = asdl_seq_GET(s->v.If.orelse, 0);
  			if (t->kind == If_kind) {
  				s = t;
  				c->u->u_lineno = t->lineno;
  			}
+ 			else {
+ 				VISIT_SEQ(c, stmt, s->v.If.orelse);
+ 				break;
+ 			}
  		}
  		else
! 			break;
  	}
  	compiler_use_block(c, end);