diff --git a/src/ast/variables/LocalVariable.ts b/src/ast/variables/LocalVariable.ts index 83e86a6ccaf..a90613a2825 100644 --- a/src/ast/variables/LocalVariable.ts +++ b/src/ast/variables/LocalVariable.ts @@ -155,7 +155,7 @@ export default class LocalVariable extends Variable { if (path.length === 0) return false; if (this.isReassigned) return true; return (this.init && - !context.accessed.trackEntityAtPathAndGetIfTracked(path, this) && + !context.assigned.trackEntityAtPathAndGetIfTracked(path, this) && this.init.hasEffectsWhenAssignedAtPath(path, context))!; } diff --git a/test/function/samples/track-reassignments/_config.js b/test/function/samples/track-reassignments/_config.js new file mode 100644 index 00000000000..5776de3fe6f --- /dev/null +++ b/test/function/samples/track-reassignments/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'properly track reassignments (#4468)' +}; diff --git a/test/function/samples/track-reassignments/main.js b/test/function/samples/track-reassignments/main.js new file mode 100644 index 00000000000..c5c83c8c8ad --- /dev/null +++ b/test/function/samples/track-reassignments/main.js @@ -0,0 +1,15 @@ +import { patchEventTarget } from './patchEventTarget.js'; + +class EventTarget { + addEventListener(callback) { + callback(); + } +} +global.window = { EventTarget }; + +let patchCalled = false; +patchEventTarget(() => (patchCalled = true)); +const target = new EventTarget(); +target.addEventListener() + +assert.ok(patchCalled, 'patch'); diff --git a/test/function/samples/track-reassignments/patchEventTarget.js b/test/function/samples/track-reassignments/patchEventTarget.js new file mode 100644 index 00000000000..93fff1fcc13 --- /dev/null +++ b/test/function/samples/track-reassignments/patchEventTarget.js @@ -0,0 +1,10 @@ +export function patchEventTarget(callback) { + var proto = window.EventTarget.prototype; + var nativeAddEventListener = proto.addEventListener; + + proto.addEventListener = function () { + return nativeAddEventListener(callback); + }; + + return proto; +}