Hi Sara, This "break LABEL" construct does exactly the same as "break NUM",
Also I don't like syntax for loops that you suggested. I prefer "LABEL: while(1) {...}" instead of while LABEL (1) {...}". This construct has logic and make sense, but I am not sure that we should incrise complication of PHP compiler without any serious benefits. Readability is the only one benefit of this patch. May be I missed something? I didn't look into patch deep. Thanks. Dmitry. > -----Original Message----- > From: Sara Golemon [mailto:[EMAIL PROTECTED] > Sent: Wednesday, November 30, 2005 4:41 AM > To: internals@lists.php.net > Subject: [PHP-DEV] Labeled Break (nothing at all whatsoever > to do with GOTO) > > > But first, this word from our sponsor: > Group A wants anything resembling goto to burn in the fires > of hell Group B wants full non-crippled goto or nothing at > all Group C wants partial goto (non-backward jumping) or > nothing at all Groups B and C both (generally) want it called > either GOTO or JUMP, not BREAK > > Since no group this size will ever come to an agreement on > something this divisive, I'd like to turn the topic to a > completely different language feature which (might) please > enough people to get a rousing consensus. > > Actual labeled breaks. Not the break+jump that was proposed > earlier in the guise of a break statement, but an actual > straightforward, no funny-business labeled break which does > no more and no less than the current break N; construct, but > allows the use of identifier labels rather than numbers which > may change as the result of the addition or removal of break > containers. > > http://libssh2.org/patches/true_labeled_break.diff > > Usage: > > while FOO ($condition) { > /* statements */ > break FOO; > /* more statements */ > } > > Or a stacked example: > > for FOO(;;) { > while BAR (true) { > foreach BAZ ($arr as $val) { > switch Foof ($value) { > default: > do Plop { > break FOO; > } while (false); > } > } > } > } > > Notes on this implementation: > > * Labels can't be repeated in an ancestral line. For > example, the parser will throw an ERROR on the following: > while FOO(true) { > while FOO(true) { > break FOO; > } > } > > * Labels can be repeated by siblings. I'm not married to > this, and it certainly has WTF potential. This behavior is > easily modified to throw an error. I left it permissable > because there was no technical reason to disallow it. For > example, the following is okay: while FOO(true) { > break; > } > while FOO(true) { > break FOO; > } > > * Labeled breaks also apply to continue; For example: > foreach FOO($arr as $key => $val) { > if ($key % 2) continue FOO; > if (empty(%key)) break FOO; > } > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php