small improvements in wrap_commonjs:
authorMihai Bazon <mihai@bazon.net>
Wed, 10 Oct 2012 08:28:05 +0000 (11:28 +0300)
committerMihai Bazon <mihai@bazon.net>
Wed, 10 Oct 2012 08:28:05 +0000 (11:28 +0300)
- 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

lib/ast.js

index afbd775..1ac1926 100644 (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);
                 }
             }
         }));