pull/5452/head
Tan Li Hau 5 years ago
parent f09c47a518
commit b098c6f7f0

@ -36,39 +36,41 @@ export function invalidate(renderer: Renderer, scope: Scope, node: Node, names:
return renderer.invalidate(variable.name, undefined, main_execution_context); return renderer.invalidate(variable.name, undefined, main_execution_context);
} }
if (head) { if (!head) {
return node;
}
component.has_reactive_assignments = true; component.has_reactive_assignments = true;
if (node.type === 'AssignmentExpression' && node.operator === '=' && nodes_match(node.left, node.right) && tail.length === 0) { if (node.type === 'AssignmentExpression' && node.operator === '=' && nodes_match(node.left, node.right) && tail.length === 0) {
return get_invalidated(head, node); return get_invalidated(head, node);
} else { }
const is_store_value = head.name[0] === '$' && head.name[1] !== '$'; const is_store_value = head.name[0] === '$' && head.name[1] !== '$';
const extra_args = tail.map(variable => get_invalidated(variable)).filter(Boolean); const extra_args = tail.map(variable => get_invalidated(variable)).filter(Boolean);
if (is_store_value) {
return x`@set_store_value(${head.name.slice(1)}, ${node}, ${head.name}, ${extra_args})`;
}
let invalidate;
if (!main_execution_context) {
const pass_value = ( const pass_value = (
!is_store_value &&
!main_execution_context &&
(
extra_args.length > 0 || extra_args.length > 0 ||
(node.type === 'AssignmentExpression' && node.left.type !== 'Identifier') || (node.type === 'AssignmentExpression' && node.left.type !== 'Identifier') ||
(node.type === 'UpdateExpression' && (!node.prefix || node.argument.type !== 'Identifier')) (node.type === 'UpdateExpression' && (!node.prefix || node.argument.type !== 'Identifier'))
)
); );
if (pass_value) { if (pass_value) {
extra_args.unshift({ extra_args.unshift({
type: 'Identifier', type: 'Identifier',
name: head.name name: head.name
}); });
} }
invalidate = x`$$invalidate(${renderer.context_lookup.get(head.name).index}, ${node}, ${extra_args})`;
let invalidate = is_store_value } else {
? x`@set_store_value(${head.name.slice(1)}, ${node}, ${head.name}, ${extra_args})` // skip `$$invalidate` if it is in the main execution context
: !main_execution_context invalidate = extra_args.length ? [node, ...extra_args] : node;
? x`$$invalidate(${renderer.context_lookup.get(head.name).index}, ${node}, ${extra_args})` }
: extra_args.length
? [node, ...extra_args]
: node;
if (head.subscribable && head.reassigned) { if (head.subscribable && head.reassigned) {
const subscribe = `$$subscribe_${head.name}`; const subscribe = `$$subscribe_${head.name}`;
@ -76,8 +78,4 @@ export function invalidate(renderer: Renderer, scope: Scope, node: Node, names:
} }
return invalidate; return invalidate;
}
}
return node;
} }
Loading…
Cancel
Save