Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH (redux): POSIX `for' syntax



On Jun 21, 10:52am, Peter Stephenson wrote:
} Subject: Re: PATCH: 4.1: multi-parameter for loop
}
} > I guess, Bart suggestion (use foreach) is better. And more Perlish :-)
} 
} I'm not so convinced, since `for' and `foreach' currently do the same
} thing, and I don't really like dividing the syntax to make people use the
} non-standard variant just for one use.  foreach is automatically handled at
} the moment, as well as for, by the way.

Hrm.  The patch I just sent makes

	for x
	(a b c)

behave as `for x (a b c)' used to, but

	foreach x
	(a b c)

is taken as a short-loop to run the command "a b c" in a subshell once for
each positional parameter.  I think they should both behave that way; so
the change to parse.c has to be fractionally more complicated.

This goes on top of the last one.

--- zsh-forge/current/Src/parse.c	Thu Jun 21 03:06:36 2001
+++ zsh-4.0/Src/parse.c	Thu Jun 21 03:31:04 2001
@@ -903,13 +903,15 @@
 	yylex();
 	type = WC_FOR_COND;
     } else {
+	int posix_in;
 	infor = 0;
 	if (tok != STRING || !isident(tokstr))
 	    YYERRORV(oecused);
 	ecstr(tokstr);
 	incmdpos = 1;
 	yylex();
-	while (isnewlin && !csh)
+	posix_in = isnewlin;
+	while (isnewlin)
 	  yylex();
 	if (tok == STRING && !strcmp(tokstr, "in")) {
 	    int np, n;
@@ -922,7 +924,7 @@
 		YYERRORV(oecused);
 	    ecbuf[np] = n;
 	    type = (sel ? WC_SELECT_LIST : WC_FOR_LIST);
-	} else if (tok == INPAR) {
+	} else if (!posix_in && tok == INPAR) {
 	    int np, n;
 
 	    incmdpos = 0;

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   



Messages sorted by: Reverse Date, Date, Thread, Author