[Issue 13602] New: Painfully long bad diagnostic on mismatched parenthesis
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Fri Oct 10 16:00:39 PDT 2014
https://issues.dlang.org/show_bug.cgi?id=13602
Issue ID: 13602
Summary: Painfully long bad diagnostic on mismatched
parenthesis
Product: D
Version: unspecified
Hardware: All
OS: Windows
Status: NEW
Severity: critical
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: dmitry.olsh at gmail.com
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
--
More information about the Digitalmars-d-bugs
mailing list