MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / fxForStatement

Function fxForStatement

xs/sources/xsSyntaxical.c:1502–1564  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1500}
1501
1502void fxForStatement(txParser* parser)
1503{
1504 txInteger aLine = parser->states[0].line;
1505 txBoolean awaitFlag = 0;
1506 txBoolean expressionFlag = 0;
1507 txToken aToken;
1508 fxPushNULL(parser);
1509 fxMatchToken(parser, XS_TOKEN_FOR);
1510 if (parser->states[0].token == XS_TOKEN_AWAIT) {
1511 awaitFlag = 1;
1512 fxMatchToken(parser, XS_TOKEN_AWAIT);
1513 }
1514 fxMatchToken(parser, XS_TOKEN_LEFT_PARENTHESIS);
1515 fxLookAheadOnce(parser);
1516 parser->flags |= mxForFlag;
1517 if (parser->states[0].token == XS_TOKEN_SEMICOLON) {
1518 fxPushNULL(parser);
1519 }
1520 else if (parser->states[0].token == XS_TOKEN_CONST) {
1521 fxVariableStatement(parser, XS_TOKEN_CONST, 0);
1522 }
1523 else if (parser->states[0].token == XS_TOKEN_LET) {
1524 fxVariableStatement(parser, XS_TOKEN_LET, 0);
1525 }
1526 else if (fxIsKeyword(parser, parser->letSymbol) && (gxTokenFlags[parser->states[1].token] & XS_TOKEN_BEGIN_BINDING)) {
1527 parser->states[0].token = XS_TOKEN_LET;
1528 fxVariableStatement(parser, XS_TOKEN_LET, 0);
1529 }
1530#if mxExplicitResourceManagement
1531 else if ((parser->states[0].token == XS_TOKEN_IDENTIFIER) && (parser->states[0].symbol == parser->usingSymbol) && (!parser->states[0].escaped)
1532 && (!parser->states[1].crlf) && ((parser->states[1].token == XS_TOKEN_IDENTIFIER) || (parser->states[1].token == XS_TOKEN_AWAIT) || (parser->states[1].token == XS_TOKEN_YIELD))) {
1533 fxLookAheadTwice(parser);
1534 if ((parser->states[1].symbol == parser->ofSymbol) && (!parser->states[1].escaped) && (parser->states[2].token != XS_TOKEN_ASSIGN)) {
1535 fxCommaExpression(parser);
1536 expressionFlag = 1;
1537 }
1538 else {
1539 parser->states[0].token = XS_TOKEN_USING;
1540 fxVariableStatement(parser, XS_TOKEN_USING, 0);
1541 }
1542 }
1543 else if ((parser->states[0].token == XS_TOKEN_AWAIT)
1544 && (!parser->states[1].crlf) && (parser->states[1].token == XS_TOKEN_IDENTIFIER) && (parser->states[1].symbol == parser->usingSymbol) && (!parser->states[1].escaped)) {
1545 fxLookAheadTwice(parser);
1546 if ((!parser->states[2].crlf) && ((parser->states[2].token == XS_TOKEN_IDENTIFIER) || (parser->states[2].token == XS_TOKEN_AWAIT) || (parser->states[2].token == XS_TOKEN_YIELD))) {
1547 fxGetNextToken(parser);
1548 parser->states[0].token = XS_TOKEN_USING;
1549 fxVariableStatement(parser, XS_TOKEN_USING, mxAwaitingFlag);
1550 parser->flags |= mxAwaitingFlag;
1551 }
1552 else {
1553 fxCommaExpression(parser);
1554 expressionFlag = 1;
1555 }
1556 }
1557#endif
1558 else if (parser->states[0].token == XS_TOKEN_VAR) {
1559 fxVariableStatement(parser, XS_TOKEN_VAR, 0);

Callers 1

fxStatementFunction · 0.85

Calls 8

fxPushNULLFunction · 0.85
fxMatchTokenFunction · 0.85
fxLookAheadOnceFunction · 0.85
fxVariableStatementFunction · 0.85
fxLookAheadTwiceFunction · 0.85
fxCommaExpressionFunction · 0.85
fxGetNextTokenFunction · 0.85
fxIsKeywordFunction · 0.70

Tested by

no test coverage detected