Difference between revisions of "DIP65"
Hackerpilot (talk | contribs) (Created page with "{| class="wikitable" !Title: !'''DIP Template''' |- |DIP: |65 |- |Version: |1 |- |Status: |Draft |- |Created: |2014-07-07 |- |Last Modified: |2014-07-07 |- |Author: |Brian Sch...") |
Hackerpilot (talk | contribs) (→Code Breakage and Upgrade Path) |
||
Line 61: | Line 61: | ||
== Code Breakage and Upgrade Path == | == Code Breakage and Upgrade Path == | ||
− | Code that used the '''LastCatch''' syntax will no longer compile. A tool | + | Code that used the '''LastCatch''' syntax will no longer compile. |
+ | |||
+ | A tool that can automatically convert usage of this syntax to the more common "catch (Throwable)" syntax is located here: https://gist.github.com/Hackerpilot/5ff6d86f4d22a14a00f3 | ||
== Copyright == | == Copyright == |
Revision as of 23:19, 17 July 2014
Title: | DIP Template |
---|---|
DIP: | 65 |
Version: | 1 |
Status: | Draft |
Created: | 2014-07-07 |
Last Modified: | 2014-07-07 |
Author: | Brian Schott |
Links: | https://issues.dlang.org/show_bug.cgi?id=12558 |
Abstract
This DIP outlines some changes to clean up the exception catching syntax in the D language
Rationale
According to the grammar documentation on dlang.org, the following code:
catch (A)
.someFunction();
should be parsed with the LastCatch rule, with (A).someFunction(); being treated as a function call.
What actually happens, is that DMD parses this using the Catch rule, treating A as an exception type and then calling the global-scoped someFunction().
This is caused by two bugs in DMD's parser:
- Exceptions are not required to have names by the compiler (The language specification requires names)
- The Catch rule is assumed whenever a "(" token is hit after a "catch" token, regardless of whether it starts a NoScopeNonEmptyStatement or not.
Grammar Changes
The LastCatch rule is removed. Users who want to keep the functionality of their code unchanged must now explicitly "catch (Throwable)".
The CatchParameter rule is rewritten as follows:
CatchParameter: BasicType Identifier?
This change merely updates the documentation to be consistent with DMD's treatment of exception names.
Code Breakage and Upgrade Path
Code that used the LastCatch syntax will no longer compile.
A tool that can automatically convert usage of this syntax to the more common "catch (Throwable)" syntax is located here: https://gist.github.com/Hackerpilot/5ff6d86f4d22a14a00f3
Copyright
This document has been placed in the Public Domain.