()
| 2629 | // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations |
| 2630 | |
| 2631 | parseStatement(): Node.Statement { |
| 2632 | let statement: Node.Statement; |
| 2633 | switch (this.lookahead.type) { |
| 2634 | case Token.BooleanLiteral: |
| 2635 | case Token.NullLiteral: |
| 2636 | case Token.NumericLiteral: |
| 2637 | case Token.StringLiteral: |
| 2638 | case Token.Template: |
| 2639 | case Token.RegularExpression: |
| 2640 | statement = this.parseExpressionStatement(); |
| 2641 | break; |
| 2642 | |
| 2643 | case Token.Punctuator: |
| 2644 | const value = this.lookahead.value; |
| 2645 | if (value === '{') { |
| 2646 | statement = this.parseBlock(); |
| 2647 | } else if (value === '(') { |
| 2648 | statement = this.parseExpressionStatement(); |
| 2649 | } else if (value === ';') { |
| 2650 | statement = this.parseEmptyStatement(); |
| 2651 | } else { |
| 2652 | statement = this.parseExpressionStatement(); |
| 2653 | } |
| 2654 | break; |
| 2655 | |
| 2656 | case Token.Identifier: |
| 2657 | statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement(); |
| 2658 | break; |
| 2659 | |
| 2660 | case Token.Keyword: |
| 2661 | switch (this.lookahead.value) { |
| 2662 | case 'break': |
| 2663 | statement = this.parseBreakStatement(); |
| 2664 | break; |
| 2665 | case 'continue': |
| 2666 | statement = this.parseContinueStatement(); |
| 2667 | break; |
| 2668 | case 'debugger': |
| 2669 | statement = this.parseDebuggerStatement(); |
| 2670 | break; |
| 2671 | case 'do': |
| 2672 | statement = this.parseDoWhileStatement(); |
| 2673 | break; |
| 2674 | case 'for': |
| 2675 | statement = this.parseForStatement(); |
| 2676 | break; |
| 2677 | case 'function': |
| 2678 | statement = this.parseFunctionDeclaration(); |
| 2679 | break; |
| 2680 | case 'if': |
| 2681 | statement = this.parseIfStatement(); |
| 2682 | break; |
| 2683 | case 'return': |
| 2684 | statement = this.parseReturnStatement(); |
| 2685 | break; |
| 2686 | case 'switch': |
| 2687 | statement = this.parseSwitchStatement(); |
| 2688 | break; |
no test coverage detected