small improvements in wrap_commonjs:

- use MAP.splice instead of a BlockStatement to inject code (avoids some
  warnings in the linter)
- use the original symbol in exports, so that we get the proper source mapping
This commit is contained in:
Mihai Bazon
2012-10-10 11:28:05 +03:00
parent c5ecbfc756
commit f26f3b44bc

View File

@@ -295,7 +295,8 @@ var AST_Toplevel = DEFNODE("Toplevel", "globals", {
var to_export = []; var to_export = [];
self.walk(new TreeWalker(function(node){ self.walk(new TreeWalker(function(node){
if (node instanceof AST_SymbolDeclaration && node.definition().global) { if (node instanceof AST_SymbolDeclaration && node.definition().global) {
to_export.push(node.name); if (!find_if(function(n){ return n.name == node.name }, to_export))
to_export.push(node);
} }
})); }));
} }
@@ -306,22 +307,22 @@ var AST_Toplevel = DEFNODE("Toplevel", "globals", {
node = node.body; node = node.body;
if (node instanceof AST_String) switch (node.getValue()) { if (node instanceof AST_String) switch (node.getValue()) {
case "$ORIG": case "$ORIG":
return new AST_BlockStatement(self); return MAP.splice(self.body);
case "$EXPORTS": case "$EXPORTS":
var body = []; var body = [];
to_export.forEach(function(name){ to_export.forEach(function(sym){
body.push(new AST_SimpleStatement({ body.push(new AST_SimpleStatement({
body: new AST_Assign({ body: new AST_Assign({
left: new AST_Sub({ left: new AST_Sub({
expression: new AST_SymbolRef({ name: "exports" }), expression: new AST_SymbolRef({ name: "exports" }),
property: new AST_String({ value: name }), property: new AST_String({ value: sym.name }),
}), }),
operator: "=", operator: "=",
right: new AST_SymbolRef({ name: name }), right: new AST_SymbolRef(sym),
}), }),
})); }));
}); });
return new AST_BlockStatement({ body: body }); return MAP.splice(body);
} }
} }
})); }));