DIP65: Fixing Exception Handling Syntax

Brian Schott via Digitalmars-d digitalmars-d at puremagic.com
Wed Jul 9 01:13:20 PDT 2014


On Wednesday, 9 July 2014 at 02:48:03 UTC, Walter Bright wrote:
> On 7/8/2014 2:31 PM, Brian Schott wrote:
>> http://wiki.dlang.org/DIP65
>>
>> tldr: There are parser and specification bugs and I want to 
>> fix them. It will
>> break some poorly-written code, but I think I can automate the 
>> upgrade process.
>
> I don't want to break existing code. The grammar ambiguity 
> issue can be resolved by the user as:
>
> catch (A) { .someFunction(); }

There is no ambiguity in the grammar. "catch (A) { ... }" is not 
valid. The spec requires that you give the exception a name. A 
spec compliant D compiler MUST parse your example code with the 
LastCatch rule. The fact that DMD does what it does is a bug that 
has been documented for over a year.[1]

Implementing the spec, i.e. requiring exceptions to be named, 
would break far more code than what I propose.[3] If we want to 
have nameless exceptions, we need to change the specification to 
make the name optional. If we do that, the grammar becomes 
ambiguous. To fix the ambiguity we must either remove the 
LastCatch rule from the language spec[2] or introduce a rule for 
NoScopeNonEmptyStatement-that-doesn't-start-with-parens.


[1] https://issues.dlang.org/show_bug.cgi?id=10247
[2] https://issues.dlang.org/show_bug.cgi?id=12558
[3] I don't know how people uncover these undocumented features 
and build important code with them.


More information about the Digitalmars-d mailing list