comparison trunk/src/Parser.d @ 184:30a4c8522b09

- Implemented parsePragmaStatement().
author aziz
date Sat, 14 Jul 2007 14:58:01 +0000
parents c9df82f6f6be
children 35c93b776be0
comparison
equal deleted inserted replaced
183:c9df82f6f6be 184:30a4c8522b09
1192 s = parseVolatileStatement(); 1192 s = parseVolatileStatement();
1193 break; 1193 break;
1194 case T.Asm: 1194 case T.Asm:
1195 s = parseAsmStatement(); 1195 s = parseAsmStatement();
1196 break; 1196 break;
1197 case T.Pragma:
1198 s = parsePragmaStatement();
1199 break;
1197 default: 1200 default:
1198 // TODO: issue error msg and return IllegalStatement. 1201 // TODO: issue error msg and return IllegalStatement.
1199 } 1202 }
1200 return s; 1203 return s;
1201 } 1204 }
1595 else if (token.type == T.LBrace) 1598 else if (token.type == T.LBrace)
1596 volatileBody = parseScopeStatement(); 1599 volatileBody = parseScopeStatement();
1597 else 1600 else
1598 volatileBody = parseNoScopeStatement(); 1601 volatileBody = parseNoScopeStatement();
1599 return new VolatileStatement(volatileBody); 1602 return new VolatileStatement(volatileBody);
1603 }
1604
1605 Statement parsePragmaStatement()
1606 {
1607 assert(token.type == T.Pragma);
1608 nT();
1609
1610 string ident;
1611 Expression[] args;
1612 Statement pragmaBody;
1613
1614 require(T.LParen);
1615 ident = requireIdentifier();
1616
1617 if (token.type == T.Comma)
1618 args = parseArguments(T.RParen);
1619 else
1620 require(T.RParen);
1621
1622 if (token.type == T.Semicolon)
1623 nT();
1624 else
1625 pragmaBody = parseNoScopeStatement();
1626
1627 return new PragmaStatement(ident, args, pragmaBody);
1600 } 1628 }
1601 1629
1602 /+++++++++++++++++++++++++++++ 1630 /+++++++++++++++++++++++++++++
1603 + Assembler parsing methods + 1631 + Assembler parsing methods +
1604 +++++++++++++++++++++++++++++/ 1632 +++++++++++++++++++++++++++++/