www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - scope failure

reply nobody <nobody_member pathlink.com> writes:
Hello,

i try to learn the scope statements.

import std.stdio;

void main() {
{
scope(failure) writefln("5");
//writefln("Hallo");
}
}

The output from the program is 5. If i comment the writefln in, then it only 
print Hallo.
Is this the correct behavier?
I have thougt scope(failure) will only execute when the scope exit
abnormaly by throw. The 5 should never be occur by thi example.
Jun 20 2006
parent reply "Regan Heath" <regan netwin.co.nz> writes:
On Tue, 20 Jun 2006 07:52:00 +0000 (UTC), nobody  
<nobody_member pathlink.com> wrote:
 i try to learn the scope statements.

 import std.stdio;

 void main() {
 {
 scope(failure) writefln("5");
 //writefln("Hallo");
 }
 }

 The output from the program is 5. If i comment the writefln in, then it  
 only
 print Hallo.
 Is this the correct behavier?
 I have thougt scope(failure) will only execute when the scope exit
 abnormaly by throw. The 5 should never be occur by thi example.
It seems to trigger when the scope is empty, putting any other valid statement in the scope with the scope(failure) statement stops the output of "5". I suspect this is a bug. Regan
Jun 20 2006
parent reply nobody <nobody_member pathlink.com> writes:
In article <optbfpq9sx23k2f5 nrage>, Regan Heath says...
On Tue, 20 Jun 2006 07:52:00 +0000 (UTC), nobody  
<nobody_member pathlink.com> wrote:
 i try to learn the scope statements.

 import std.stdio;

 void main() {
 {
 scope(failure) writefln("5");
 //writefln("Hallo");
 }
 }

 The output from the program is 5. If i comment the writefln in, then it  
 only
 print Hallo.
 Is this the correct behavier?
 I have thougt scope(failure) will only execute when the scope exit
 abnormaly by throw. The 5 should never be occur by thi example.
It seems to trigger when the scope is empty, putting any other valid statement in the scope with the scope(failure) statement stops the output of "5". I suspect this is a bug. Regan
He, funny Under dmd 161, it run correct now. Thank you
Jun 20 2006
next sibling parent BCS <BCS pathlink.com> writes:
nobody wrote:
 In article <optbfpq9sx23k2f5 nrage>, Regan Heath says...
 
On Tue, 20 Jun 2006 07:52:00 +0000 (UTC), nobody  
<nobody_member pathlink.com> wrote:

i try to learn the scope statements.

import std.stdio;

void main() {
{
scope(failure) writefln("5");
//writefln("Hallo");
}
}

The output from the program is 5. If i comment the writefln in, then it  
only
print Hallo.
Is this the correct behavier?
I have thougt scope(failure) will only execute when the scope exit
abnormaly by throw. The 5 should never be occur by thi example.
It seems to trigger when the scope is empty, putting any other valid statement in the scope with the scope(failure) statement stops the output of "5". I suspect this is a bug. Regan
He, funny Under dmd 161, it run correct now. Thank you
Jun 20 2006
prev sibling parent reply BCS <BCS pathlink.com> writes:
Sorry for that empty post <:-P

What might be happening (under 0.160) is that under some conditions DMD 
will insert an assert(0) at then end of a function to catch the 
no-return-statement bug. It's not supposed to do that with a void 
function but who knows.


nobody wrote:
 In article <optbfpq9sx23k2f5 nrage>, Regan Heath says...
 
On Tue, 20 Jun 2006 07:52:00 +0000 (UTC), nobody  
<nobody_member pathlink.com> wrote:

i try to learn the scope statements.

import std.stdio;

void main() {
{
scope(failure) writefln("5");
//writefln("Hallo");
}
}

The output from the program is 5. If i comment the writefln in, then it  
only
print Hallo.
Is this the correct behavier?
I have thougt scope(failure) will only execute when the scope exit
abnormaly by throw. The 5 should never be occur by thi example.
It seems to trigger when the scope is empty, putting any other valid statement in the scope with the scope(failure) statement stops the output of "5". I suspect this is a bug. Regan
He, funny Under dmd 161, it run correct now. Thank you
Jun 20 2006
parent "Regan Heath" <regan netwin.co.nz> writes:
On Tue, 20 Jun 2006 08:59:53 -0700, BCS <BCS pathlink.com> wrote:
 Sorry for that empty post <:-P

 What might be happening (under 0.160) is that under some conditions DMD  
 will insert an assert(0) at then end of a function to catch the  
 no-return-statement bug. It's not supposed to do that with a void  
 function but who knows.
I thought that at first, but there are 2 scopes involved. The main function and a 2nd scope inside it. The scope(failure) is inside the 2nd scope so should trigger if there is an exception in that scope, not if there is one in main. I added a return value to double check :) Regan
 nobody wrote:
 In article <optbfpq9sx23k2f5 nrage>, Regan Heath says...

 On Tue, 20 Jun 2006 07:52:00 +0000 (UTC), nobody   
 <nobody_member pathlink.com> wrote:

 i try to learn the scope statements.

 import std.stdio;

 void main() {
 {
 scope(failure) writefln("5");
 //writefln("Hallo");
 }
 }

 The output from the program is 5. If i comment the writefln in, then  
 it  only
 print Hallo.
 Is this the correct behavier?
 I have thougt scope(failure) will only execute when the scope exit
 abnormaly by throw. The 5 should never be occur by thi example.
It seems to trigger when the scope is empty, putting any other valid statement in the scope with the scope(failure) statement stops the output of "5". I suspect this is a bug. Regan
He, funny Under dmd 161, it run correct now. Thank you
Jun 20 2006