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.
|
||||
*/
|
||||
|
||||
function getCache(node, parentScope, self) {
|
||||
let scopes: Array<Scope> = scopeCache.get(node) || [];
|
||||
function getCache(path, parentScope, self) {
|
||||
let scopes: Array<Scope> = scopeCache.get(path.node) || [];
|
||||
|
||||
for (let scope of scopes) {
|
||||
if (scope.parent === parentScope) return scope;
|
||||
if (scope.parent === parentScope && scope.path === path) return scope;
|
||||
}
|
||||
|
||||
scopes.push(self);
|
||||
|
||||
if (!scopeCache.has(node)) {
|
||||
scopeCache.set(node, scopes);
|
||||
if (!scopeCache.has(path.node)) {
|
||||
scopeCache.set(path.node, scopes);
|
||||
}
|
||||
}
|
||||
|
||||
@ -150,7 +150,7 @@ export default class Scope {
|
||||
return parentScope;
|
||||
}
|
||||
|
||||
let cached = getCache(path.node, parentScope, this);
|
||||
let cached = getCache(path, parentScope, this);
|
||||
if (cached) return cached;
|
||||
|
||||
this.uid = uid++;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user