mark module variable

pull/4469/head
Tan Li Hau 6 years ago
parent b8bf3643d4
commit 9777fcd2ca

@ -780,7 +780,7 @@ export default class Component {
const component = this; const component = this;
const { content } = script; 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; let scope = instance_scope;
@ -797,7 +797,13 @@ export default class Component {
const deep = assignee.type === 'MemberExpression'; const deep = assignee.type === 'MemberExpression';
names.forEach(name => { 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); const variable = component.var_lookup.get(name);
variable[deep ? 'mutated' : 'reassigned'] = true; 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