Don't insert the same node into the AST multiple times (fixes babel/babili#556) (#6054)
This commit is contained in:
parent
47a9ba3440
commit
13d931c417
@ -73,7 +73,11 @@ export default function() {
|
||||
),
|
||||
);
|
||||
} else {
|
||||
path.replaceWith(remap);
|
||||
path.replaceWith(
|
||||
// Clone the node before inserting it to ensure that different nodes in the AST are represented
|
||||
// by different objects.
|
||||
t.cloneWithoutLoc(remap),
|
||||
);
|
||||
}
|
||||
this.requeueInParent(path);
|
||||
},
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
const assert = require("assert");
|
||||
const babel = require("babel-core");
|
||||
|
||||
test("Doesn't use the same object for two different nodes in the AST", function() {
|
||||
const code = 'import Foo from "bar"; Foo; Foo;';
|
||||
|
||||
const ast = babel.transform(code, {
|
||||
plugins: [[require("../"), { loose: true }]],
|
||||
}).ast;
|
||||
|
||||
assert.equal(ast.program.body[3].expression.type, "MemberExpression");
|
||||
assert.equal(ast.program.body[4].expression.type, "MemberExpression");
|
||||
|
||||
assert.notEqual(
|
||||
ast.program.body[3].expression,
|
||||
ast.program.body[4].expression,
|
||||
"Expected different nodes in the AST to not be the same object",
|
||||
);
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user