DIP65: Fixing Exception Handling Syntax

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Mon Jul 28 13:14:24 PDT 2014


On 07/28/2014 09:32 PM, Brian Schott wrote:
> On Monday, 28 July 2014 at 19:12:49 UTC, Timon Gehr wrote:
>> I'd suggest to just special case the general thing, or not add any
>> special cases at all.
>>
>> catch(Type)
>>      ^~~~~~
>>
>> I.e. use lookahead to determine whether something that looks like a
>> type follows a '(' token and is itself followed by a ')' token.
>
> This doesn't help.
> ...

Depends on what outcome one is after.

> catch (Type).functionName() is valid both as
>
> LastCatch
>   PostfixExpression
>    PostfixExpression
>     PostfixExpression
>      PrimaryExpression
>       '(' Type ')'
>     '.' identifier
>    '(' ')'
>
> And as
>
> Catch
>   '(' Type ')'
>   PrimaryExpression
>    '.'
>    PostfixExpression
>     PrimaryExpression
>      'functionName'
>     '(' ')'
>

Obviously, hence the alternative suggestion to not add any special cases 
(and then the most sensible way out seems to be to just retire the 
catch-all syntax).

(But as you're likely to know, there are some of those cases already (if 
less severe):

foreach(i;0..n){
     // ...
}
(&x).foo();

The above is grammatically ambiguous, but DMD parses it as two distinct 
statements using an ad-hoc disambiguation rule.

try{
    // ...
}catch(Exception e){
     return e;
}
(new Exception("hi")).msg.writeln;

Similarly. In contrast to above, the alternative parsing might actually 
pass the type checker.)


More information about the Digitalmars-d mailing list