| 2565 | } |
| 2566 | |
| 2567 | void fxArrowExpression(txParser* parser, txUnsigned flag) |
| 2568 | { |
| 2569 | txInteger aLine = parser->states[0].line; |
| 2570 | txUnsigned flags = parser->flags; |
| 2571 | parser->flags &= ~(mxAsyncFlag | mxGeneratorFlag); |
| 2572 | parser->flags |= mxArrowFlag | flag; |
| 2573 | fxMatchToken(parser, XS_TOKEN_ARROW); |
| 2574 | fxPushNULL(parser); |
| 2575 | fxSwapNodes(parser); |
| 2576 | if (parser->states[0].token == XS_TOKEN_LEFT_BRACE) { |
| 2577 | fxMatchToken(parser, XS_TOKEN_LEFT_BRACE); |
| 2578 | fxBody(parser); |
| 2579 | fxPushNodeStruct(parser, 1, XS_TOKEN_BODY, aLine); |
| 2580 | fxMatchToken(parser, XS_TOKEN_RIGHT_BRACE); |
| 2581 | } |
| 2582 | else { |
| 2583 | fxAssignmentExpression(parser); |
| 2584 | fxPushNodeStruct(parser, 1, XS_TOKEN_RETURN, aLine); |
| 2585 | fxPushNodeStruct(parser, 1, XS_TOKEN_BODY, aLine); |
| 2586 | if (!(flags & mxAsyncFlag) && (flag & mxAsyncFlag)) { |
| 2587 | if (parser->states[0].token == XS_TOKEN_AWAIT) { |
| 2588 | parser->states[0].token = XS_TOKEN_IDENTIFIER; |
| 2589 | } |
| 2590 | } |
| 2591 | } |
| 2592 | fxPushNodeStruct(parser, 3, XS_TOKEN_FUNCTION, aLine); |
| 2593 | parser->root->flags = parser->flags & (mxStrictFlag | mxFieldFlag | mxNotSimpleParametersFlag | mxArrowFlag | mxSuperFlag | flag); |
| 2594 | if (!(flags & mxStrictFlag) && (parser->flags & mxStrictFlag)) |
| 2595 | fxCheckStrictFunction(parser, (txFunctionNode*)parser->root); |
| 2596 | parser->flags = flags | (parser->flags & (mxArgumentsFlag | mxEvalFlag)); |
| 2597 | } |
| 2598 | |
| 2599 | void fxClassExpression(txParser* parser, txInteger theLine, txSymbol** theSymbol) |
| 2600 | { |
no test coverage detected