Fix 5768 (to 7.0 branch) (#5891)

This commit is contained in:
Josh Johnston
2017-06-28 10:04:23 +10:00
committed by Henry Zhu
parent ed0de70656
commit bc29145465
3 changed files with 89 additions and 12 deletions

View File

@@ -83,23 +83,59 @@ export default function() {
if (node[REASSIGN_REMAP_SKIP]) return;
const left = path.get("left");
if (!left.isIdentifier()) return;
if (left.isIdentifier()) {
const name = left.node.name;
const exports = this.exports[name];
if (!exports) return;
const name = left.node.name;
const exports = this.exports[name];
if (!exports) return;
// redeclared in this scope
if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return;
// redeclared in this scope
if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return;
node[REASSIGN_REMAP_SKIP] = true;
node[REASSIGN_REMAP_SKIP] = true;
for (const reid of exports) {
node = buildExportsAssignment(reid, node).expression;
}
for (const reid of exports) {
node = buildExportsAssignment(reid, node).expression;
path.replaceWith(node);
this.requeueInParent(path);
} else if (left.isObjectPattern()) {
for (const property of left.node.properties) {
const name = property.value.name;
const exports = this.exports[name];
if (!exports) continue;
// redeclared in this scope
if (this.scope.getBinding(name) !== path.scope.getBinding(name)) {
return;
}
node[REASSIGN_REMAP_SKIP] = true;
path.insertAfter(
buildExportsAssignment(t.identifier(name), t.identifier(name)),
);
}
} else if (left.isArrayPattern()) {
for (const element of left.node.elements) {
const name = element.name;
const exports = this.exports[name];
if (!exports) continue;
// redeclared in this scope
if (this.scope.getBinding(name) !== path.scope.getBinding(name)) {
return;
}
node[REASSIGN_REMAP_SKIP] = true;
path.insertAfter(
buildExportsAssignment(t.identifier(name), t.identifier(name)),
);
}
}
path.replaceWith(node);
this.requeueInParent(path);
},
UpdateExpression(path) {

View File

@@ -0,0 +1,14 @@
export let x = 0;
export let y = 0;
export function f1 () {
({x} = { x: 1 });
}
export function f2 () {
({x, y} = { x: 2, y: 3 });
}
export function f3 () {
[x, y, z] = [3, 4, 5]
}

View File

@@ -0,0 +1,27 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.f1 = f1;
exports.f2 = f2;
exports.f3 = f3;
let x = exports.x = 0;
let y = exports.y = 0;
function f1() {
({ x } = { x: 1 });
exports.x = x;
}
function f2() {
({ x, y } = { x: 2, y: 3 });
exports.y = y;
exports.x = x;
}
function f3() {
[x, y, z] = [3, 4, 5];
exports.y = y;
exports.x = x;
}