Merge pull request #5235 from mattste/fix4323

Limit export node default assignment stack size #4323
This commit is contained in:
Logan Smyth 2017-01-28 12:55:29 -08:00 committed by GitHub
commit 510e93b2bd
3 changed files with 130 additions and 8 deletions

View File

@ -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");
nonHoistedExportNamesChunk.forEach(function (name) {
hoistedExportsNode = buildExportsAssignment(t.identifier(name), hoistedExportsNode).expression;
});
const node = t.expressionStatement(hoistedExportsNode);
node._blockHoist = 3;
topNodes.unshift(node);
}
const node = t.expressionStatement(hoistedExportsNode);
node._blockHoist = 3;
topNodes.unshift(node);
}
// add __esModule declaration if this file has any exports

View File

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

View File

@ -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;