Fix export bindings not updated by 'for...in' and 'for...of' (#11074)

* Correctly transpile export bindings for some for-of loops

* Correctly transform non-destructured for of loops to update exported variables

* Add tests

* Don't replace entire for of loop

* Correctly transform destructured for-of/for-in exports

* Update exported variables in array pattern and more fixes

* Refresh test output

* Update tests and rebase on master

* Refactor ForOf|ForIn visitor

* Don't transform re-declared exported vars

* Generate better name for loop id

Co-Authored-By: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>

* Idiomatically generate UidIdentifier

* Update scope after replacing loop declaration

Co-authored-by: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
This commit is contained in:
Vedant Roy
2020-02-09 05:40:52 -05:00
committed by Nicolò Ribaudo
parent 5aa368cec1
commit dadba01249
3 changed files with 123 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
export let foo;
export {foo as bar}
for (foo of []) {}
for (foo in []) {}
for (foo of []) {
let foo;
}
for ({foo} of []) {}
for ({foo} of []) {
let foo;
}
for ({test: {foo}} of []) {}
for ([foo, [...foo]] of []) {}
for ([foo, [...foo]] of []) {
let foo;
}
{
let foo;
for(foo of []) {}
}

View File

@@ -0,0 +1,65 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.bar = exports.foo = void 0;
let foo;
exports.bar = exports.foo = foo;
for (let _foo of []) {
exports.bar = exports.foo = foo = _foo;
}
for (let _foo2 in []) {
exports.bar = exports.foo = foo = _foo2;
}
for (let _foo4 of []) {
exports.bar = exports.foo = foo = _foo4;
let _foo3;
}
for (let _foo5 of []) {
({
foo
} = _foo5);
exports.bar = exports.foo = foo;
}
for (let _foo7 of []) {
({
foo
} = _foo7);
exports.bar = exports.foo = foo;
let _foo6;
}
for (let _test of []) {
({
test: {
foo
}
} = _test);
exports.bar = exports.foo = foo;
}
for (let _ref of []) {
[foo, [...foo]] = _ref;
exports.bar = exports.foo = foo;
}
for (let _ref2 of []) {
[foo, [...foo]] = _ref2;
exports.bar = exports.foo = foo;
let _foo8;
}
{
let foo;
for (foo of []) {}
}