Skip to content

Commit

Permalink
Limit export node default assignment stack size babel#4323
Browse files Browse the repository at this point in the history
Signed-off-by: Matthew Stewart <mattdste@gmail.com>
  • Loading branch information
mattste authored and chitchu committed Jan 29, 2017
1 parent fb96d14 commit 29d850c
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 7 deletions.
Expand Up @@ -426,16 +426,25 @@ export default function () {
}

if (hasImports && Object.keys(nonHoistedExportNames).length) {
let hoistedExportsNode = t.identifier("undefined");

for (const name in nonHoistedExportNames) {
hoistedExportsNode = buildExportsAssignment(t.identifier(name), hoistedExportsNode).expression;
}
// avoid creating too long of export assignment to prevent stack overflow
const maxHoistedExportsNodeAssignmentLength = 100;
const nonHoistedExportNamesArr = Object.keys(nonHoistedExportNames);

for (let currentExportsNodeAssignmentLength = 0; currentExportsNodeAssignmentLength < nonHoistedExportNamesArr.length; currentExportsNodeAssignmentLength += maxHoistedExportsNodeAssignmentLength ) {
const nonHoistedExportNamesChunk = nonHoistedExportNamesArr.slice(currentExportsNodeAssignmentLength, currentExportsNodeAssignmentLength + maxHoistedExportsNodeAssignmentLength);

let hoistedExportsNode = t.identifier("undefined");

const node = t.expressionStatement(hoistedExportsNode);
node._blockHoist = 3;
nonHoistedExportNamesChunk.forEach(function (name) {
hoistedExportsNode = buildExportsAssignment(t.identifier(name), hoistedExportsNode).expression;
});

const node = t.expressionStatement(hoistedExportsNode);
node._blockHoist = 3;

topNodes.unshift(node);
topNodes.unshift(node);
}
}

// add __esModule declaration if this file has any exports
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

@@ -0,0 +1,111 @@
"use strict";

Object.defineProperty(exports, "__esModule", {
value: true
});
exports.foo100 = undefined;
exports.foo99 = exports.foo98 = exports.foo97 = exports.foo96 = exports.foo95 = exports.foo94 = exports.foo93 = exports.foo92 = exports.foo91 = exports.foo90 = exports.foo89 = exports.foo88 = exports.foo87 = exports.foo86 = exports.foo85 = exports.foo84 = exports.foo83 = exports.foo82 = exports.foo81 = exports.foo80 = exports.foo79 = exports.foo78 = exports.foo77 = exports.foo76 = exports.foo75 = exports.foo74 = exports.foo73 = exports.foo72 = exports.foo71 = exports.foo70 = exports.foo69 = exports.foo68 = exports.foo67 = exports.foo66 = exports.foo65 = exports.foo64 = exports.foo63 = exports.foo62 = exports.foo61 = exports.foo60 = exports.foo59 = exports.foo58 = exports.foo57 = exports.foo56 = exports.foo55 = exports.foo54 = exports.foo53 = exports.foo52 = exports.foo51 = exports.foo50 = exports.foo49 = exports.foo48 = exports.foo47 = exports.foo46 = exports.foo45 = exports.foo44 = exports.foo43 = exports.foo42 = exports.foo41 = exports.foo40 = exports.foo39 = exports.foo38 = exports.foo37 = exports.foo36 = exports.foo35 = exports.foo34 = exports.foo33 = exports.foo32 = exports.foo31 = exports.foo30 = exports.foo29 = exports.foo28 = exports.foo27 = exports.foo26 = exports.foo25 = exports.foo24 = exports.foo23 = exports.foo22 = exports.foo21 = exports.foo20 = exports.foo19 = exports.foo18 = exports.foo17 = exports.foo16 = exports.foo15 = exports.foo14 = exports.foo13 = exports.foo12 = exports.foo11 = exports.foo10 = exports.foo9 = exports.foo8 = exports.foo7 = exports.foo6 = exports.foo5 = exports.foo4 = exports.foo3 = exports.foo2 = exports.foo1 = exports.foo = undefined;

var _foo = require("foo");

exports.foo = _foo.foo;
exports.foo1 = _foo.foo1;
exports.foo2 = _foo.foo2;
exports.foo3 = _foo.foo3;
exports.foo4 = _foo.foo4;
exports.foo5 = _foo.foo5;
exports.foo6 = _foo.foo6;
exports.foo7 = _foo.foo7;
exports.foo8 = _foo.foo8;
exports.foo9 = _foo.foo9;
exports.foo10 = _foo.foo10;
exports.foo11 = _foo.foo11;
exports.foo12 = _foo.foo12;
exports.foo13 = _foo.foo13;
exports.foo14 = _foo.foo14;
exports.foo15 = _foo.foo15;
exports.foo16 = _foo.foo16;
exports.foo17 = _foo.foo17;
exports.foo18 = _foo.foo18;
exports.foo19 = _foo.foo19;
exports.foo20 = _foo.foo20;
exports.foo21 = _foo.foo21;
exports.foo22 = _foo.foo22;
exports.foo23 = _foo.foo23;
exports.foo24 = _foo.foo24;
exports.foo25 = _foo.foo25;
exports.foo26 = _foo.foo26;
exports.foo27 = _foo.foo27;
exports.foo28 = _foo.foo28;
exports.foo29 = _foo.foo29;
exports.foo30 = _foo.foo30;
exports.foo31 = _foo.foo31;
exports.foo32 = _foo.foo32;
exports.foo33 = _foo.foo33;
exports.foo34 = _foo.foo34;
exports.foo35 = _foo.foo35;
exports.foo36 = _foo.foo36;
exports.foo37 = _foo.foo37;
exports.foo38 = _foo.foo38;
exports.foo39 = _foo.foo39;
exports.foo40 = _foo.foo40;
exports.foo41 = _foo.foo41;
exports.foo42 = _foo.foo42;
exports.foo43 = _foo.foo43;
exports.foo44 = _foo.foo44;
exports.foo45 = _foo.foo45;
exports.foo46 = _foo.foo46;
exports.foo47 = _foo.foo47;
exports.foo48 = _foo.foo48;
exports.foo49 = _foo.foo49;
exports.foo50 = _foo.foo50;
exports.foo51 = _foo.foo51;
exports.foo52 = _foo.foo52;
exports.foo53 = _foo.foo53;
exports.foo54 = _foo.foo54;
exports.foo55 = _foo.foo55;
exports.foo56 = _foo.foo56;
exports.foo57 = _foo.foo57;
exports.foo58 = _foo.foo58;
exports.foo59 = _foo.foo59;
exports.foo60 = _foo.foo60;
exports.foo61 = _foo.foo61;
exports.foo62 = _foo.foo62;
exports.foo63 = _foo.foo63;
exports.foo64 = _foo.foo64;
exports.foo65 = _foo.foo65;
exports.foo66 = _foo.foo66;
exports.foo67 = _foo.foo67;
exports.foo68 = _foo.foo68;
exports.foo69 = _foo.foo69;
exports.foo70 = _foo.foo70;
exports.foo71 = _foo.foo71;
exports.foo72 = _foo.foo72;
exports.foo73 = _foo.foo73;
exports.foo74 = _foo.foo74;
exports.foo75 = _foo.foo75;
exports.foo76 = _foo.foo76;
exports.foo77 = _foo.foo77;
exports.foo78 = _foo.foo78;
exports.foo79 = _foo.foo79;
exports.foo80 = _foo.foo80;
exports.foo81 = _foo.foo81;
exports.foo82 = _foo.foo82;
exports.foo83 = _foo.foo83;
exports.foo84 = _foo.foo84;
exports.foo85 = _foo.foo85;
exports.foo86 = _foo.foo86;
exports.foo87 = _foo.foo87;
exports.foo88 = _foo.foo88;
exports.foo89 = _foo.foo89;
exports.foo90 = _foo.foo90;
exports.foo91 = _foo.foo91;
exports.foo92 = _foo.foo92;
exports.foo93 = _foo.foo93;
exports.foo94 = _foo.foo94;
exports.foo95 = _foo.foo95;
exports.foo96 = _foo.foo96;
exports.foo97 = _foo.foo97;
exports.foo98 = _foo.foo98;
exports.foo99 = _foo.foo99;
exports.foo100 = _foo.foo100;

0 comments on commit 29d850c

Please sign in to comment.