[6a3a178] | 1 | "use strict";
|
---|
| 2 |
|
---|
| 3 | Object.defineProperty(exports, "__esModule", {
|
---|
| 4 | value: true
|
---|
| 5 | });
|
---|
| 6 | exports.default = gatherSequenceExpressions;
|
---|
| 7 |
|
---|
| 8 | var _getBindingIdentifiers = require("../retrievers/getBindingIdentifiers");
|
---|
| 9 |
|
---|
| 10 | var _generated = require("../validators/generated");
|
---|
| 11 |
|
---|
| 12 | var _generated2 = require("../builders/generated");
|
---|
| 13 |
|
---|
| 14 | var _cloneNode = require("../clone/cloneNode");
|
---|
| 15 |
|
---|
| 16 | function gatherSequenceExpressions(nodes, scope, declars) {
|
---|
| 17 | const exprs = [];
|
---|
| 18 | let ensureLastUndefined = true;
|
---|
| 19 |
|
---|
| 20 | for (const node of nodes) {
|
---|
| 21 | if (!(0, _generated.isEmptyStatement)(node)) {
|
---|
| 22 | ensureLastUndefined = false;
|
---|
| 23 | }
|
---|
| 24 |
|
---|
| 25 | if ((0, _generated.isExpression)(node)) {
|
---|
| 26 | exprs.push(node);
|
---|
| 27 | } else if ((0, _generated.isExpressionStatement)(node)) {
|
---|
| 28 | exprs.push(node.expression);
|
---|
| 29 | } else if ((0, _generated.isVariableDeclaration)(node)) {
|
---|
| 30 | if (node.kind !== "var") return;
|
---|
| 31 |
|
---|
| 32 | for (const declar of node.declarations) {
|
---|
| 33 | const bindings = (0, _getBindingIdentifiers.default)(declar);
|
---|
| 34 |
|
---|
| 35 | for (const key of Object.keys(bindings)) {
|
---|
| 36 | declars.push({
|
---|
| 37 | kind: node.kind,
|
---|
| 38 | id: (0, _cloneNode.default)(bindings[key])
|
---|
| 39 | });
|
---|
| 40 | }
|
---|
| 41 |
|
---|
| 42 | if (declar.init) {
|
---|
| 43 | exprs.push((0, _generated2.assignmentExpression)("=", declar.id, declar.init));
|
---|
| 44 | }
|
---|
| 45 | }
|
---|
| 46 |
|
---|
| 47 | ensureLastUndefined = true;
|
---|
| 48 | } else if ((0, _generated.isIfStatement)(node)) {
|
---|
| 49 | const consequent = node.consequent ? gatherSequenceExpressions([node.consequent], scope, declars) : scope.buildUndefinedNode();
|
---|
| 50 | const alternate = node.alternate ? gatherSequenceExpressions([node.alternate], scope, declars) : scope.buildUndefinedNode();
|
---|
| 51 | if (!consequent || !alternate) return;
|
---|
| 52 | exprs.push((0, _generated2.conditionalExpression)(node.test, consequent, alternate));
|
---|
| 53 | } else if ((0, _generated.isBlockStatement)(node)) {
|
---|
| 54 | const body = gatherSequenceExpressions(node.body, scope, declars);
|
---|
| 55 | if (!body) return;
|
---|
| 56 | exprs.push(body);
|
---|
| 57 | } else if ((0, _generated.isEmptyStatement)(node)) {
|
---|
| 58 | if (nodes.indexOf(node) === 0) {
|
---|
| 59 | ensureLastUndefined = true;
|
---|
| 60 | }
|
---|
| 61 | } else {
|
---|
| 62 | return;
|
---|
| 63 | }
|
---|
| 64 | }
|
---|
| 65 |
|
---|
| 66 | if (ensureLastUndefined) {
|
---|
| 67 | exprs.push(scope.buildUndefinedNode());
|
---|
| 68 | }
|
---|
| 69 |
|
---|
| 70 | if (exprs.length === 1) {
|
---|
| 71 | return exprs[0];
|
---|
| 72 | } else {
|
---|
| 73 | return (0, _generated2.sequenceExpression)(exprs);
|
---|
| 74 | }
|
---|
| 75 | } |
---|