| 2520 | } |
| 2521 | |
| 2522 | void fxArrayExpression(txParser* parser) |
| 2523 | { |
| 2524 | txInteger aCount = 0; |
| 2525 | int elision = 1; |
| 2526 | txInteger aLine = parser->states[0].line; |
| 2527 | txBoolean aSpreadFlag = 0; |
| 2528 | fxMatchToken(parser, XS_TOKEN_LEFT_BRACKET); |
| 2529 | while ((parser->states[0].token == XS_TOKEN_COMMA) || (parser->states[0].token == XS_TOKEN_SPREAD) || (gxTokenFlags[parser->states[0].token] & XS_TOKEN_BEGIN_EXPRESSION)) { |
| 2530 | txInteger anItemLine = parser->states[0].line; |
| 2531 | if (parser->states[0].token == XS_TOKEN_COMMA) { |
| 2532 | fxGetNextToken(parser); |
| 2533 | if (elision) { |
| 2534 | fxPushNodeStruct(parser, 0, XS_TOKEN_ELISION, anItemLine); |
| 2535 | aCount++; |
| 2536 | } |
| 2537 | else |
| 2538 | elision = 1; |
| 2539 | } |
| 2540 | else if (parser->states[0].token == XS_TOKEN_SPREAD) { |
| 2541 | fxGetNextToken(parser); |
| 2542 | if (!elision) |
| 2543 | fxReportParserError(parser, parser->states[0].line, "missing ,"); |
| 2544 | fxAssignmentExpression(parser); |
| 2545 | fxPushNodeStruct(parser, 1, XS_TOKEN_SPREAD, anItemLine); |
| 2546 | aCount++; |
| 2547 | elision = 0; |
| 2548 | aSpreadFlag = 1; |
| 2549 | } |
| 2550 | else { |
| 2551 | if (!elision) |
| 2552 | fxReportParserError(parser, parser->states[0].line, "missing ,"); |
| 2553 | fxAssignmentExpression(parser); |
| 2554 | aCount++; |
| 2555 | elision = 0; |
| 2556 | } |
| 2557 | } |
| 2558 | fxMatchToken(parser, XS_TOKEN_RIGHT_BRACKET); |
| 2559 | fxPushNodeList(parser, aCount); |
| 2560 | fxPushNodeStruct(parser, 1, XS_TOKEN_ARRAY, aLine); |
| 2561 | if (aCount && elision) |
| 2562 | parser->root->flags |= mxElisionFlag; |
| 2563 | if (aSpreadFlag) |
| 2564 | parser->root->flags |= mxSpreadFlag; |
| 2565 | } |
| 2566 | |
| 2567 | void fxArrowExpression(txParser* parser, txUnsigned flag) |
| 2568 | { |
no test coverage detected