support multiple export specifier remapping

This commit is contained in:
Sebastian McKenzie 2015-04-02 20:25:05 +11:00
parent 33fde5f143
commit 01a2aa7dd1
10 changed files with 89 additions and 37 deletions

View File

@ -15,7 +15,7 @@ var remapVisitor = {
}
if (t.isUpdateExpression(node)) {
var exported = formatter.getLocalReference(node.argument, scope);
var exported = formatter.getExport(node.argument, scope);
if (exported) {
this.skip();
@ -47,7 +47,7 @@ var remapVisitor = {
}
if (t.isAssignmentExpression(node)) {
var exported = formatter.getLocalReference(node.left, scope);
var exported = formatter.getExport(node.left, scope);
if (exported) {
this.skip();
return formatter.remapExportAssignment(node, exported);
@ -76,10 +76,7 @@ var exportsVisitor = traverse.explode({
var bindings = declar.getBindingIdentifiers()
for (var name in bindings) {
var binding = bindings[name];
formatter.localExports[name] = {
binding: binding,
exported: binding
};
formatter._addExport(name, binding);
}
}
@ -89,10 +86,7 @@ var exportsVisitor = traverse.explode({
var local = specifier.local;
if (!local) continue;
formatter.localExports[local.name] = {
binding: scope.getBindingIdentifier(local.name),
exported: specifier.exported
};
formatter._addExport(local.name, specifier.exported);
}
}
@ -164,18 +158,28 @@ export default class DefaultFormatter {
}
remapExportAssignment(node, exported) {
return t.assignmentExpression(
"=",
node.left,
t.assignmentExpression(
node.operator,
t.memberExpression(t.identifier("exports"), exported),
node.right
)
);
var assign = node;
for (var i = 0; i < exported.length; i++) {
assign = t.assignmentExpression(
"=",
t.memberExpression(t.identifier("exports"), exported[i]),
assign
);
}
return assign;
}
getLocalReference(node, scope) {
_addExport(name, exported) {
var info = this.localExports[name] ||= {
binding: this.scope.getBindingIdentifier(name),
exported: []
};
info.exported.push(exported);
}
getExport(node, scope) {
if (!t.isIdentifier(node)) return;
var local = this.localExports[node.name];

View File

@ -126,7 +126,13 @@ export default class SystemFormatter extends AMDFormatter {
}
remapExportAssignment(node, exported) {
return this.buildExportCall(t.literal(exported.name), node);
var assign = node;
for (var i = 0; i < exported.length; i++) {
assign = this.buildExportCall(t.literal(exported[i].name), assign);
}
return assign;
}
buildExportCall(id, init, isStatement) {

View File

@ -15,3 +15,7 @@ a = 3;
var b = 2;
export { b as c };
b = 3;
var d = 3;
export { d as e, d as f };
d = 4;

View File

@ -6,8 +6,8 @@ define(["exports"], function (exports) {
});
var test = 2;
exports.test = test;
test = exports.test = 5;
test = exports.test += 1;
exports.test = test = 5;
exports.test = test += 1;
(function () {
var test = 2;
@ -18,10 +18,16 @@ define(["exports"], function (exports) {
var a = 2;
exports.a = a;
a = exports.a = 3;
exports.a = a = 3;
var b = 2;
exports.c = b;
b = exports.c = 3;
});
exports.c = b = 3;
var d = 3;
exports.e = d;
exports.f = d;
exports.f = exports.e = d = 4;
});

View File

@ -15,3 +15,7 @@ a = 3;
var b = 2;
export { b as c };
b = 3;
var d = 3;
export { d as e, d as f };
d = 4;

View File

@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
});
var test = 2;
exports.test = test;
test = exports.test = 5;
test = exports.test += 1;
exports.test = test = 5;
exports.test = test += 1;
(function () {
var test = 2;
@ -17,9 +17,15 @@ test = exports.test += 1;
var a = 2;
exports.a = a;
a = exports.a = 3;
exports.a = a = 3;
var b = 2;
exports.c = b;
b = exports.c = 3;
exports.c = b = 3;
var d = 3;
exports.e = d;
exports.f = d;
exports.f = exports.e = d = 4;

View File

@ -15,3 +15,7 @@ a = 3;
var b = 2;
export { b as c };
b = 3;
var d = 3;
export { d as e, d as f };
d = 4;

View File

@ -1,5 +1,5 @@
System.register([], function (_export) {
var test, a, b;
var test, a, b, d;
return {
setters: [],
execute: function () {
@ -29,6 +29,14 @@ System.register([], function (_export) {
_export("c", b);
_export("c", b = 3);
d = 3;
_export("e", d);
_export("f", d);
_export("f", _export("e", d = 4));
}
};
});
});

View File

@ -15,3 +15,7 @@ a = 3;
var b = 2;
export { b as c };
b = 3;
var d = 3;
export { d as e, d as f };
d = 4;

View File

@ -18,8 +18,8 @@
});
var test = 2;
exports.test = test;
test = exports.test = 5;
test = exports.test += 1;
exports.test = test = 5;
exports.test = test += 1;
(function () {
var test = 2;
@ -30,10 +30,16 @@
var a = 2;
exports.a = a;
a = exports.a = 3;
exports.a = a = 3;
var b = 2;
exports.c = b;
b = exports.c = 3;
});
exports.c = b = 3;
var d = 3;
exports.e = d;
exports.f = d;
exports.f = exports.e = d = 4;
});