Mercurial > projects > dil
diff trunk/src/Parser.d @ 318:a1c9d93a66e3
- Added member prevToken to Parser.
- Setting node tokens with prevToken instead of token.
- Moved require(T.LBrace) and require(T.RBrace) inside parseStatements().
author | aziz |
---|---|
date | Fri, 17 Aug 2007 11:35:02 +0000 |
parents | ebd21bbf296e |
children | 83f1f9a4f248 |
line wrap: on
line diff
--- a/trunk/src/Parser.d Wed Aug 15 21:46:00 2007 +0000 +++ b/trunk/src/Parser.d Fri Aug 17 11:35:02 2007 +0000 @@ -19,7 +19,8 @@ class Parser { Lexer lx; - Token* token; + Token* token; /// Current non-whitespace token. + Token* prevToken; /// Previous non-whitespace token. Information[] errors; @@ -34,10 +35,12 @@ { debug prev = lx.text.ptr; nT(); + prevToken = token; } void nT() { + prevToken = token; do { lx.nextToken(); @@ -68,6 +71,7 @@ ++trying; // auto len = errors.length; auto oldToken = token; + auto oldPrevToken = prevToken; auto oldCount = errorCount; // auto lexerState = lx.getState(); auto result = parseMethod(); @@ -77,6 +81,7 @@ // lexerState.restore(); // Restore state of the Lexer object. // errors = errors[0..len]; // Remove errors that were added when parseMethod() was called. token = oldToken; + prevToken = oldPrevToken; lx.token = oldToken; errorCount = oldCount; success = false; @@ -90,7 +95,7 @@ Class set(Class)(Class node, Token* begin) { - node.setTokens(begin, this.token); + node.setTokens(begin, this.prevToken); return node; } @@ -494,9 +499,7 @@ switch (token.type) { case T.LBrace: - require(T.LBrace); func.funcBody = parseStatements(); - require(T.RBrace); break; case T.Semicolon: nT(); @@ -505,9 +508,7 @@ //if (func.inBody) // TODO: issue error msg. nT(); - require(T.LBrace); func.inBody = parseStatements(); - require(T.RBrace); continue; case T.Out: //if (func.outBody) @@ -519,9 +520,7 @@ func.outIdent = requireId(); require(T.RParen); } - require(T.LBrace); func.outBody = parseStatements(); - require(T.RBrace); continue; case T.Body: nT(); @@ -1506,9 +1505,11 @@ Statements parseStatements() { auto begin = token; + require(T.LBrace); auto statements = new Statements(); while (token.type != T.RBrace && token.type != T.EOF) statements ~= parseStatement(); + require(T.RBrace); return set(statements, begin); }