* Visits an array of expressions containing one or more YieldExpression nodes * and returns an expression for the resulting value. * * @param elements The elements to visit. * @param multiLine Whether array literals created should be emitted on multiple lines.
(elements, leadingElement, location, multiLine)
| 102567 | * @param multiLine Whether array literals created should be emitted on multiple lines. |
| 102568 | */ |
| 102569 | function visitElements(elements, leadingElement, location, multiLine) { |
| 102570 | // [source] |
| 102571 | // ar = [1, yield, 2]; |
| 102572 | // |
| 102573 | // [intermediate] |
| 102574 | // .local _a |
| 102575 | // _a = [1]; |
| 102576 | // .yield resumeLabel |
| 102577 | // .mark resumeLabel |
| 102578 | // ar = _a.concat([%sent%, 2]); |
| 102579 | var numInitialElements = countInitialNodesWithoutYield(elements); |
| 102580 | var temp; |
| 102581 | if (numInitialElements > 0) { |
| 102582 | temp = declareLocal(); |
| 102583 | var initialElements = ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements); |
| 102584 | emitAssignment(temp, factory.createArrayLiteralExpression(leadingElement |
| 102585 | ? __spreadArray([leadingElement], initialElements, true) : initialElements)); |
| 102586 | leadingElement = undefined; |
| 102587 | } |
| 102588 | var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements); |
| 102589 | return temp |
| 102590 | ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)]) |
| 102591 | : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine), location); |
| 102592 | function reduceElement(expressions, element) { |
| 102593 | if (containsYield(element) && expressions.length > 0) { |
| 102594 | var hasAssignedTemp = temp !== undefined; |
| 102595 | if (!temp) { |
| 102596 | temp = declareLocal(); |
| 102597 | } |
| 102598 | emitAssignment(temp, hasAssignedTemp |
| 102599 | ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)]) |
| 102600 | : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine)); |
| 102601 | leadingElement = undefined; |
| 102602 | expressions = []; |
| 102603 | } |
| 102604 | expressions.push(ts.visitNode(element, visitor, ts.isExpression)); |
| 102605 | return expressions; |
| 102606 | } |
| 102607 | } |
| 102608 | function visitObjectLiteralExpression(node) { |
| 102609 | // [source] |
| 102610 | // o = { |
no test coverage detected