From 9777fcd2ca61c6eda2371eac204aaa658255c61d Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Wed, 26 Feb 2020 19:05:14 +0800 Subject: [PATCH] mark module variable --- src/compiler/compile/Component.ts | 10 ++- test/vars/samples/modules-vars/_config.js | 72 +++++++++++++++++++++ test/vars/samples/modules-vars/input.svelte | 18 ++++++ 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 test/vars/samples/modules-vars/_config.js create mode 100644 test/vars/samples/modules-vars/input.svelte diff --git a/src/compiler/compile/Component.ts b/src/compiler/compile/Component.ts index 9822529ece..8203866642 100644 --- a/src/compiler/compile/Component.ts +++ b/src/compiler/compile/Component.ts @@ -780,7 +780,7 @@ export default class Component { const component = this; const { content } = script; - const { instance_scope, instance_scope_map: map } = this; + const { instance_scope, module_scope, instance_scope_map: map } = this; let scope = instance_scope; @@ -797,7 +797,13 @@ export default class Component { const deep = assignee.type === 'MemberExpression'; names.forEach(name => { - if (scope.find_owner(name) === instance_scope) { + const scope_owner = scope.find_owner(name); + if (scope_owner !== null) { + if (scope_owner === instance_scope) { + const variable = component.var_lookup.get(name); + variable[deep ? 'mutated' : 'reassigned'] = true; + } + } else if (module_scope.has(name)) { const variable = component.var_lookup.get(name); variable[deep ? 'mutated' : 'reassigned'] = true; } diff --git a/test/vars/samples/modules-vars/_config.js b/test/vars/samples/modules-vars/_config.js new file mode 100644 index 0000000000..e178941db6 --- /dev/null +++ b/test/vars/samples/modules-vars/_config.js @@ -0,0 +1,72 @@ +export default { + test(assert, vars) { + assert.deepEqual(vars, [ + { + name: "a", + export_name: null, + injected: false, + module: true, + mutated: false, + reassigned: true, + referenced: false, + referenced_from_script: false, + writable: true + }, + { + name: "b", + export_name: null, + injected: false, + module: true, + mutated: true, + reassigned: false, + referenced: false, + referenced_from_script: false, + writable: true + }, + { + name: "c", + export_name: null, + injected: false, + module: true, + mutated: false, + reassigned: false, + referenced: false, + referenced_from_script: false, + writable: true + }, + { + name: "d", + export_name: null, + injected: false, + module: true, + mutated: false, + reassigned: false, + referenced: false, + referenced_from_script: false, + writable: true + }, + { + name: "c", + export_name: null, + injected: false, + module: false, + mutated: false, + reassigned: true, + referenced: false, + referenced_from_script: true, + writable: true + }, + { + name: "foo", + export_name: null, + injected: false, + module: false, + mutated: false, + reassigned: false, + referenced: false, + referenced_from_script: false, + writable: false + } + ]); + } +}; diff --git a/test/vars/samples/modules-vars/input.svelte b/test/vars/samples/modules-vars/input.svelte new file mode 100644 index 0000000000..8bbd5bdc5e --- /dev/null +++ b/test/vars/samples/modules-vars/input.svelte @@ -0,0 +1,18 @@ + + \ No newline at end of file