diff --git a/Units/parser-d.r/simple.d.d/expected.tags b/Units/parser-d.r/simple.d.d/expected.tags index 7e0eae6de6..5ee68dc4d9 100644 --- a/Units/parser-d.r/simple.d.d/expected.tags +++ b/Units/parser-d.r/simple.d.d/expected.tags @@ -23,6 +23,7 @@ main input.d /^void main(string[] args)$/;" f file: member input.d /^ T member;$/;" m class:Class.CT file: modulevar input.d /^ int modulevar;$/;" m file: obj input.d /^Object obj;$/;" v +out_contract input.d /^void out_contract()$/;" f file: qar input.d /^ int qar;$/;" m union:Struct.Union file: quxx input.d /^ bool quxx;$/;" m union:Struct.Union file: test.simple input.d /^module test.simple;$/;" M diff --git a/Units/parser-d.r/simple.d.d/input.d b/Units/parser-d.r/simple.d.d/input.d index baa0eef396..8f7aec8bcc 100644 --- a/Units/parser-d.r/simple.d.d/input.d +++ b/Units/parser-d.r/simple.d.d/input.d @@ -90,7 +90,11 @@ static assert( num < TL.length, "Name '"~name~"' is not found"); __gshared int globalVar; +void out_contract() +out(r; r > 0) {} + void main(string[] args) +in(args.length > 0) { auto foo = new Class(1337); diff --git a/parsers/c-based.c b/parsers/c-based.c index 41f52b1703..e735385cd3 100644 --- a/parsers/c-based.c +++ b/parsers/c-based.c @@ -2072,7 +2072,13 @@ static bool skipPostArgumentStuff ( { case KEYWORD_ATTRIBUTE: skipParens (); break; case KEYWORD_THROW: skipParens (); break; - case KEYWORD_IF: if (isInputLanguage (Lang_d)) skipParens (); break; + case KEYWORD_IF: // D template constraint + // D contract expressions + case KEYWORD_IN: + case KEYWORD_OUT: + if (isInputLanguage (Lang_d)) + skipParens (); + break; case KEYWORD_TRY: break; case KEYWORD_CONST: