Invalidate the scope cache if a node is moved to a different path - fixes T7194
This commit is contained in:
parent
5373733b8d
commit
80aa424b75
13
packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/T7194/actual.js
vendored
Normal file
13
packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/T7194/actual.js
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
function f() {
|
||||||
|
g(async function() {
|
||||||
|
c(() => this);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
(async function () {
|
||||||
|
console.log('async wrapper:', this === 'foo')
|
||||||
|
|
||||||
|
;(() => {
|
||||||
|
console.log('nested arrow:', this === 'foo')
|
||||||
|
})()
|
||||||
|
}).call('foo')
|
||||||
17
packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/T7194/expected.js
vendored
Normal file
17
packages/babel-plugin-transform-async-to-generator/test/fixtures/regression/T7194/expected.js
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
function f() {
|
||||||
|
g(babelHelpers.asyncToGenerator(function* () {
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
|
c(function () {
|
||||||
|
return _this;
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
babelHelpers.asyncToGenerator(function* () {
|
||||||
|
var _this2 = this;
|
||||||
|
|
||||||
|
console.log('async wrapper:', this === 'foo');(function () {
|
||||||
|
console.log('nested arrow:', _this2 === 'foo');
|
||||||
|
})();
|
||||||
|
}).call('foo');
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"transform-es2015-arrow-functions",
|
||||||
|
"transform-async-to-generator",
|
||||||
|
"external-helpers"
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -23,17 +23,17 @@ let _crawlCallsCount = 0;
|
|||||||
* node itself containing all scopes it has been associated with.
|
* node itself containing all scopes it has been associated with.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function getCache(node, parentScope, self) {
|
function getCache(path, parentScope, self) {
|
||||||
let scopes: Array<Scope> = scopeCache.get(node) || [];
|
let scopes: Array<Scope> = scopeCache.get(path.node) || [];
|
||||||
|
|
||||||
for (let scope of scopes) {
|
for (let scope of scopes) {
|
||||||
if (scope.parent === parentScope) return scope;
|
if (scope.parent === parentScope && scope.path === path) return scope;
|
||||||
}
|
}
|
||||||
|
|
||||||
scopes.push(self);
|
scopes.push(self);
|
||||||
|
|
||||||
if (!scopeCache.has(node)) {
|
if (!scopeCache.has(path.node)) {
|
||||||
scopeCache.set(node, scopes);
|
scopeCache.set(path.node, scopes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ export default class Scope {
|
|||||||
return parentScope;
|
return parentScope;
|
||||||
}
|
}
|
||||||
|
|
||||||
let cached = getCache(path.node, parentScope, this);
|
let cached = getCache(path, parentScope, this);
|
||||||
if (cached) return cached;
|
if (cached) return cached;
|
||||||
|
|
||||||
this.uid = uid++;
|
this.uid = uid++;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user