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