Bug 13602 – Painfully long bad diagnostic on mismatched parenthesis

Status
RESOLVED
Resolution
FIXED
Severity
minor
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2014-10-10T23:00:39Z
Last change time
2020-09-29T09:46:06Z
Keywords
diagnostic
Assigned to
No Owner
Creator
Dmitry Olshansky

Comments

Comment #0 by dmitry.olsh — 2014-10-10T23:00:39Z
The compiler must be able to recover once ';' is seen. Instead goes off in cascading failure state, where everything after badly balanced expression is wrong. Snippent: unittest { with(factory){ // !!! Notice unbalanced parenthesis !!! auto matcher = seq(name("First", star(value(4))); assert(matcher(records)); assert(records == [ Rec("Last", 8) ]); } } /// Generic matcher interface interface Matcher(Stream) if(isForwardRange!Stream) { } // The more code the longer is the insane diagnostic /// Generic matcher interface interface Matcher(Stream) if(isForwardRange!Stream) { } /// Generic matcher interface interface Matcher(Stream) if(isForwardRange!Stream) { } /// Generic matcher interface interface Matcher(Stream) if(isForwardRange!Stream) { } Compiler's output: /home/dmitry/bug.d(5): Error: found ';' when expecting ',' /home/dmitry/bug.d(6): Error: found ';' when expecting ',' /home/dmitry/bug.d(7): Error: found ';' when expecting ',' /home/dmitry/bug.d(8): Error: expression expected, not '}' /home/dmitry/bug.d(9): Error: found '}' when expecting ',' /home/dmitry/bug.d(13): Error: expression expected, not 'interface' /home/dmitry/bug.d(13): Error: found 'Matcher' when expecting ',' /home/dmitry/bug.d(14): Error: found 'if' when expecting ',' /home/dmitry/bug.d(22): Error: found 'interface' when expecting ',' /home/dmitry/bug.d(23): Error: found 'if' when expecting ',' /home/dmitry/bug.d(29): Error: found 'interface' when expecting ',' /home/dmitry/bug.d(30): Error: found 'if' when expecting ',' /home/dmitry/bug.d(36): Error: found 'interface' when expecting ',' /home/dmitry/bug.d(37): Error: found 'if' when expecting ',' /home/dmitry/bug.d(40): Error: found 'EOF' when expecting ',' /home/dmitry/bug.d(40): Error: found 'EOF' when expecting ')' /home/dmitry/bug.d(40): Error: semicolon expected following auto declaration, not 'EOF' /home/dmitry/bug.d(40): Error: found 'EOF' when expecting '}' following compound statement /home/dmitry/bug.d(40): Error: found 'EOF' when expecting '}' following compound statement
Comment #1 by yebblies — 2014-12-02T14:06:58Z
Why exactly is this critical?
Comment #2 by razvan.nitu1305 — 2020-09-29T09:46:06Z
This has been fixed in master.