mark module variables as mutated or reassigned (#4469)

pull/4498/head
Tan Li Hau 5 years ago committed by GitHub
parent f244b80f7a
commit cf660bdab1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2,6 +2,7 @@
## Unreleased
* In `vars` array, correctly indicate whether `module` variables are `mutated` or `reassigned` ([#3215](https://github.com/sveltejs/svelte/issues/3215))
* Exclude global variables from `$capture_state` ([#4463](https://github.com/sveltejs/svelte/issues/4463))
## 3.19.1

@ -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,12 @@ 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
? scope_owner === instance_scope
: module_scope && module_scope.has(name)
) {
const variable = component.var_lookup.get(name);
variable[deep ? 'mutated' : 'reassigned'] = true;
}

@ -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
}
]);
}
};

@ -0,0 +1,18 @@
<script context='module'>
let a = {};
let b = {};
let c = {};
let d = {};
</script>
<script>
let c = {};
a = 1;
b.x = 1;
function foo() {
let d = {};
c = 1;
d.x = 1;
}
</script>
Loading…
Cancel
Save