# HG changeset patch # User aziz # Date 1184425081 0 # Node ID 30a4c8522b09d01678a5001cb8bd3fc63b04c0b4 # Parent c9df82f6f6be8c458234dead4b5665b02d91e7ac - Implemented parsePragmaStatement(). diff -r c9df82f6f6be -r 30a4c8522b09 trunk/src/Parser.d --- 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 + +++++++++++++++++++++++++++++/ diff -r c9df82f6f6be -r 30a4c8522b09 trunk/src/Statements.d --- 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