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 +++++++++++++++++++++++++++++/