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 = [];
self.walk(new TreeWalker(function(node){
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;
if (node instanceof AST_String) switch (node.getValue()) {
case "$ORIG":
return new AST_BlockStatement(self);
return MAP.splice(self.body);
case "$EXPORTS":
var body = [];
to_export.forEach(function(name){
to_export.forEach(function(sym){
body.push(new AST_SimpleStatement({
body: new AST_Assign({
left: new AST_Sub({
expression: new AST_SymbolRef({ name: "exports" }),
property: new AST_String({ value: name }),
property: new AST_String({ value: sym.name }),
}),
operator: "=",
right: new AST_SymbolRef({ name: name }),
right: new AST_SymbolRef(sym),
}),
}));
});
return new AST_BlockStatement({ body: body });
return MAP.splice(body);
}
}
}));