DIP 1029---Add throw as Function Attribute---Community Review Round 1

Walter Bright newshound2 at digitalmars.com
Thu Jan 16 08:04:35 UTC 2020


On 1/15/2020 7:26 AM, Arine wrote:
> I'm completely blown away, you don't even know 
> that @safe passes through to the next scope?

My mistake. What actually happens is here:

     sc2.stc &= STC.safeGroup;

     https://github.com/dlang/dmd/blob/master/src/dmd/aggregate.d#L136

where the storage class passed from the outer scope to the struct/class scope is 
zeroed out except for @safe/@trusted/@system.

So @safe "flows through" to the struct scope, while nothrow, pure, @nogc, etc., 
do not.

For functions, the line is:

   sc2.stc &= ~(STC.auto_ | STC.scope_ | STC.static_ | STC.extern_ | 
STC.abstract_ | STC.deprecated_ | STC.override_ |
                STC.TYPECTOR | STC.final_ | STC.tls | STC.gshared | STC.ref_ | 
STC.return_ | STC.property |
                STC.nothrow_ | STC.pure_ | STC.safe | STC.trusted | STC.system);

    https://github.com/dlang/dmd/blob/master/src/dmd/semantic3.d#L316

Interestingly, @nogc does flow through here.

So, the flow through behavior depends on the attribute. My mistake I did not 
check first before posting.


More information about the Digitalmars-d mailing list