Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:20876 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 57789 invoked by uid 1010); 30 Nov 2005 08:03:50 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 57774 invoked from network); 30 Nov 2005 08:03:50 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 30 Nov 2005 08:03:50 -0000 X-Host-Fingerprint: 84.204.52.251 promo.hnet.spb.ru OpenBSD 3.0-3.4 Received: from ([84.204.52.251:4180] helo=promo.hnet.spb.ru) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id 74/71-14828-3EC5D834 for ; Wed, 30 Nov 2005 03:03:49 -0500 Received: from thinkpad (unknown [10.1.0.118]) by promo.hnet.spb.ru (Postfix) with ESMTP id DE3531BACCF; Wed, 30 Nov 2005 11:00:32 +0300 (MSK) To: "'Sara Golemon'" , Date: Wed, 30 Nov 2005 11:02:53 +0300 Message-ID: <000001c5f584$77823f80$e902a8c0@thinkpad> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook, Build 10.0.6626 Importance: Normal In-Reply-To: <2B.E1.14828.4130D834@pb1.pair.com> X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2527 Subject: RE: [PHP-DEV] Labeled Break (nothing at all whatsoever to do with GOTO) From: dmitry@zend.com ("Dmitry Stogov") References: <2B.E1.14828.4130D834@pb1.pair.com> 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:pollita@php.net] > 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 > >