Mercurial > projects > dil
changeset 184:30a4c8522b09
- Implemented parsePragmaStatement().
author | aziz |
---|---|
date | Sat, 14 Jul 2007 14:58:01 +0000 |
parents | c9df82f6f6be |
children | 35c93b776be0 |
files | trunk/src/Parser.d trunk/src/Statements.d |
diffstat | 2 files changed, 37 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/Parser.d Sat Jul 14 14:45:03 2007 +0000 +++ b/trunk/src/Parser.d Sat Jul 14 14:58:01 2007 +0000 @@ -1194,6 +1194,9 @@ case T.Asm: s = parseAsmStatement(); break; + case T.Pragma: + s = parsePragmaStatement(); + break; default: // TODO: issue error msg and return IllegalStatement. } @@ -1599,6 +1602,31 @@ return new VolatileStatement(volatileBody); } + Statement parsePragmaStatement() + { + assert(token.type == T.Pragma); + nT(); + + string ident; + Expression[] args; + Statement pragmaBody; + + require(T.LParen); + ident = requireIdentifier(); + + if (token.type == T.Comma) + args = parseArguments(T.RParen); + else + require(T.RParen); + + if (token.type == T.Semicolon) + nT(); + else + pragmaBody = parseNoScopeStatement(); + + return new PragmaStatement(ident, args, pragmaBody); + } + /+++++++++++++++++++++++++++++ + Assembler parsing methods + +++++++++++++++++++++++++++++/
--- a/trunk/src/Statements.d Sat Jul 14 14:45:03 2007 +0000 +++ b/trunk/src/Statements.d Sat Jul 14 14:58:01 2007 +0000 @@ -288,7 +288,15 @@ class PragmaStatement : Statement { - + string ident; + Expression[] args; + Statement pragmaBody; + this(string ident, Expression[] args, Statement pragmaBody) + { + this.ident = ident; + this.args = args; + this.pragmaBody = pragmaBody; + } } class MixinStatement : Statement