37 lines
836 B
JavaScript
37 lines
836 B
JavaScript
"use strict";
|
|
|
|
var useStrict = require("../../helpers/use-strict");
|
|
var t = require("../../../types");
|
|
|
|
exports.secondPass = true;
|
|
|
|
exports.BlockStatement =
|
|
exports.Program = function (node) {
|
|
if (!node._declarations) return;
|
|
|
|
var kinds = {};
|
|
var kind;
|
|
|
|
useStrict.wrap(node, function () {
|
|
for (var i in node._declarations) {
|
|
var declar = node._declarations[i];
|
|
|
|
kind = declar.kind || "var";
|
|
var declarNode = t.variableDeclarator(declar.id, declar.init);
|
|
|
|
if (!declar.init) {
|
|
kinds[kind] = kinds[kind] || [];
|
|
kinds[kind].push(declarNode);
|
|
} else {
|
|
node.body.unshift(t.variableDeclaration(kind, [declarNode]));
|
|
}
|
|
}
|
|
|
|
for (kind in kinds) {
|
|
node.body.unshift(t.variableDeclaration(kind, kinds[kind]));
|
|
}
|
|
});
|
|
|
|
node._declarations = null;
|
|
};
|