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