From cd46954f7ffdaa0001fa69e9a48b0ccd4db6f2db Mon Sep 17 00:00:00 2001 From: tanhauhau Date: Sat, 16 Apr 2022 08:27:10 +0800 Subject: [PATCH] improve static considertaion for contextual variable --- src/compiler/compile/nodes/shared/Expression.ts | 9 +++++++++ src/compiler/compile/nodes/shared/Tag.ts | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/compiler/compile/nodes/shared/Expression.ts b/src/compiler/compile/nodes/shared/Expression.ts index a773355e3117..8914f3868628 100644 --- a/src/compiler/compile/nodes/shared/Expression.ts +++ b/src/compiler/compile/nodes/shared/Expression.ts @@ -175,6 +175,15 @@ export default class Expression { }); } + dynamic_contextual_dependencies() { + return Array.from(this.contextual_dependencies).filter(name => { + return Array.from(this.template_scope.dependencies_for_name.get(name)).some(variable_name => { + const variable = this.component.var_lookup.get(variable_name); + return is_dynamic(variable); + }); + }); + } + // TODO move this into a render-dom wrapper? manipulate(block?: Block, ctx?: string | void) { // TODO ideally we wouldn't end up calling this method diff --git a/src/compiler/compile/nodes/shared/Tag.ts b/src/compiler/compile/nodes/shared/Tag.ts index afb09d83ced8..23d94ce01e02 100644 --- a/src/compiler/compile/nodes/shared/Tag.ts +++ b/src/compiler/compile/nodes/shared/Tag.ts @@ -19,7 +19,7 @@ export default class Tag extends Node { ); } is_dependencies_static() { - return this.expression.contextual_dependencies.size === 0 && this.expression.dynamic_dependencies().length === 0; + return this.expression.dynamic_contextual_dependencies().length === 0 && this.expression.dynamic_dependencies().length === 0; } check_if_content_dynamic() { if (!this.is_dependencies_static()) {