On Fri, Oct 03, 2014 at 10:50:39AM -0700, Andrei Alexandrescu via Digitalmars-d 
wrote:
> On 10/2/14, 8:23 PM, Ali Çehreli wrote:
> >"A scope(exit) or scope(success) statement may not exit with a throw,
> >goto, break, continue, or return; nor may it be entered with a goto."
> 
> Seems to me all these restrictions should be lifted. -- Andrei

Please don't. It will lead to pathological behaviour. For example:

        int func() {
                scope(exit)
                        return 1;
                return 0;
        }

What does func() return? Better yet:

        int func() {
                scope(exit)
                        return 1;
                scope(exit)
                        return 2;
                return 0;
        }

Worse yet:

        // What does this function do? What *should* it do??
        int func() {
                scope(success)
                        throw new Exception("");
                scope(failure)
                        return 1;
                return 0;
        }

And:

        int func() {
                hahaha: scope(exit) goto hahaha;
                return 1;
        }

Or:

        int func() {
                foreach (i; 0..10) {
                        scope(exit) break;
                        scope(exit) continue;
                        return i; // hahahahahaha
                }
                return i;
        }

And do we really want to get into this one:

        struct S {
                void opApply(scope void delegate(int) loopBody) {
                        foreach (i; 0..10) {
                                scope(success) continue;
                                auto rc = loopBody(i);
                                if (rc != 0)
                                        return rc; // ORLY?!
                        }
                }
        }
        void main() {
                foreach (i; S.init) {
                        scope(failure) continue; // what does this do?
                        throw new Exception("");
                }
        }


T

-- 
Береги платье снову, а здоровье смолоду. 

Reply via email to