Hello Sara,

  nice work, clean patch, good solution - thanks! what more can one say?

best regards
marcus

p.s.: I'll have the thousands of replies on this thread on ignore :-)

Wednesday, November 30, 2005, 2:40:32 AM, you wrote:

> 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;
> }




Best regards,
 Marcus

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to