# HG changeset patch # User aziz # Date 1184422201 0 # Node ID abfd511424772ebe55a54c96f1473bcf0f170bac # Parent d5a67aa578a883a43e8b4ec643f5314cdf2d914f - Implemented parseScopeGuardStatement(). diff -r d5a67aa578a8 -r abfd51142477 trunk/src/Parser.d --- a/trunk/src/Parser.d Sat Jul 14 13:45:00 2007 +0000 +++ b/trunk/src/Parser.d Sat Jul 14 14:10:01 2007 +0000 @@ -1181,6 +1181,13 @@ case T.Throw: s = parseThrowStatement(); break; + case T.Scope: + Token next; + lx.peek(next); + if (next.type != T.LParen) + goto case_Declaration; + s = parseScopeGuardStatement(); + break; default: // TODO: issue error msg and return IllegalStatement. } @@ -1545,6 +1552,33 @@ return new ThrowStatement(expr); } + Statement parseScopeGuardStatement() + { + assert(token.type == T.Scope); + nT(); + assert(token.type == T.LParen); + nT(); + + string condition = requireIdentifier(); + if (condition.length) + switch (condition) + { + case "exit": + case "success": + case "failure": + break; + default: + // TODO: issue error msg. + } + require(T.RParen); + Statement scopeBody; + if (token.type == T.LBrace) + scopeBody = parseScopeStatement(); + else + scopeBody = parseNoScopeStatement(); + return new ScopeGuardStatement(condition, scopeBody); + } + /+++++++++++++++++++++++++++++ + Expression parsing methods + +++++++++++++++++++++++++++++/ diff -r d5a67aa578a8 -r abfd51142477 trunk/src/Statements.d --- a/trunk/src/Statements.d Sat Jul 14 13:45:00 2007 +0000 +++ b/trunk/src/Statements.d Sat Jul 14 14:10:01 2007 +0000 @@ -254,7 +254,13 @@ class ScopeGuardStatement : Statement { - + string condition; + Statement scopeBody; + this(string condition, Statement scopeBody) + { + this.condition = condition; + this.scopeBody = scopeBody; + } } class ThrowStatement : Statement