* Walk sequence expression. * @param {SequenceExpression} expression the sequence
(expression)
| 3745 | * @param {SequenceExpression} expression the sequence |
| 3746 | */ |
| 3747 | walkSequenceExpression(expression) { |
| 3748 | if (!expression.expressions) return; |
| 3749 | // We treat sequence expressions like statements when they are one statement level |
| 3750 | // This has some benefits for optimizations that only work on statement level |
| 3751 | const currentStatement = |
| 3752 | /** @type {StatementPath} */ |
| 3753 | (this.statementPath)[ |
| 3754 | /** @type {StatementPath} */ |
| 3755 | (this.statementPath).length - 1 |
| 3756 | ]; |
| 3757 | if ( |
| 3758 | currentStatement === expression || |
| 3759 | (currentStatement.type === "ExpressionStatement" && |
| 3760 | currentStatement.expression === expression) |
| 3761 | ) { |
| 3762 | const old = |
| 3763 | /** @type {StatementPathItem} */ |
| 3764 | (/** @type {StatementPath} */ (this.statementPath).pop()); |
| 3765 | const prev = this.prevStatement; |
| 3766 | for (const expr of expression.expressions) { |
| 3767 | /** @type {StatementPath} */ |
| 3768 | (this.statementPath).push(expr); |
| 3769 | this.walkExpression(expr); |
| 3770 | this.prevStatement = |
| 3771 | /** @type {StatementPath} */ |
| 3772 | (this.statementPath).pop(); |
| 3773 | } |
| 3774 | this.prevStatement = prev; |
| 3775 | /** @type {StatementPath} */ |
| 3776 | (this.statementPath).push(old); |
| 3777 | } else { |
| 3778 | this.walkExpressions(expression.expressions); |
| 3779 | } |
| 3780 | } |
| 3781 | |
| 3782 | /** |
| 3783 | * Walk update expression. |
no test coverage detected