Mercurial > projects > dil
comparison trunk/src/Parser.d @ 176:3071522c0cf0
- Implemented parseGotoStatement().
author | aziz |
---|---|
date | Sat, 14 Jul 2007 11:02:00 +0000 |
parents | 522df6f0f230 |
children | 504b1b2f7c93 |
comparison
equal
deleted
inserted
replaced
175:522df6f0f230 | 176:3071522c0cf0 |
---|---|
1164 s = parseBreakStatement(); | 1164 s = parseBreakStatement(); |
1165 break; | 1165 break; |
1166 case T.Return: | 1166 case T.Return: |
1167 s = parseReturnStatement(); | 1167 s = parseReturnStatement(); |
1168 break; | 1168 break; |
1169 case T.Goto: | |
1170 s = parseGotoStatement(); | |
1171 break; | |
1169 default: | 1172 default: |
1170 // TODO: issue error msg and return IllegalStatement. | 1173 // TODO: issue error msg and return IllegalStatement. |
1171 } | 1174 } |
1172 return s; | 1175 return s; |
1173 } | 1176 } |
1428 assert(token.type == T.Return); | 1431 assert(token.type == T.Return); |
1429 nT(); | 1432 nT(); |
1430 auto expr = parseExpression(); | 1433 auto expr = parseExpression(); |
1431 require(T.Semicolon); | 1434 require(T.Semicolon); |
1432 return new ReturnStatement(expr); | 1435 return new ReturnStatement(expr); |
1436 } | |
1437 | |
1438 Statement parseGotoStatement() | |
1439 { | |
1440 assert(token.type == T.Goto); | |
1441 nT(); | |
1442 string ident; | |
1443 Expression caseExpr; | |
1444 switch (token.type) | |
1445 { | |
1446 case T.Case: | |
1447 nT(); | |
1448 if (token.type == T.Semicolon) | |
1449 break; | |
1450 caseExpr = parseExpression(); | |
1451 break; | |
1452 case T.Default: | |
1453 nT(); | |
1454 break; | |
1455 default: | |
1456 ident = requireIdentifier(); | |
1457 nT(); | |
1458 } | |
1459 require(T.Semicolon); | |
1460 return new GotoStatement(ident, caseExpr); | |
1433 } | 1461 } |
1434 | 1462 |
1435 /+++++++++++++++++++++++++++++ | 1463 /+++++++++++++++++++++++++++++ |
1436 + Expression parsing methods + | 1464 + Expression parsing methods + |
1437 +++++++++++++++++++++++++++++/ | 1465 +++++++++++++++++++++++++++++/ |