diff --git a/src/compile/Component.ts b/src/compile/Component.ts index 957f257826..9d2e08a44d 100644 --- a/src/compile/Component.ts +++ b/src/compile/Component.ts @@ -376,62 +376,6 @@ export default class Component { }); } - findDependenciesForFunctionCall(name) { - const declaration = this.node_for_declaration.get(name); - - const dependencies = new Set(); - - if (!declaration) { - // Global or module-scoped function — can't have - // local state as dependency by definition - return dependencies; - } - - let { instance_scope, instance_scope_map: map } = this; - let scope = instance_scope; - - const component = this; - let bail = false; - - walk(declaration, { - enter(node, parent) { - if (map.has(node)) { - scope = map.get(node); - } - - if (isReference(node, parent)) { - const { name } = flattenReference(node); - if (scope.findOwner(name) === instance_scope) { - dependencies.add(name); - } - } - - if (node.type === 'CallExpression') { - if (node.callee.type === 'Identifier') { - const call_dependencies = component.findDependenciesForFunctionCall(node.callee.name); - if (!call_dependencies) { - bail = true; - return this.skip(); - } - - addToSet(dependencies, call_dependencies); - } else { - bail = true; - return this.skip(); - } - } - }, - - leave(node) { - if (map.has(node)) { - scope = map.get(node); - } - } - }); - - return bail ? null : dependencies; - } - extract_imports_and_exports(content, imports, exports) { const { code } = this; diff --git a/src/compile/nodes/shared/Expression.ts b/src/compile/nodes/shared/Expression.ts index 32be4b5911..7a3ee7b396 100644 --- a/src/compile/nodes/shared/Expression.ts +++ b/src/compile/nodes/shared/Expression.ts @@ -142,20 +142,6 @@ export default class Expression { this.skip(); } - - if (node.type === 'CallExpression') { - // TODO remove this? rely on reactive declarations? - if (node.callee.type === 'Identifier') { - const dependencies_for_invocation = component.findDependenciesForFunctionCall(node.callee.name); - if (dependencies_for_invocation) { - addToSet(dependencies, dependencies_for_invocation); - } else { - dependencies.add('$$BAIL$$'); - } - } else { - dependencies.add('$$BAIL$$'); - } - } } }); diff --git a/src/compile/render-dom/wrappers/EachBlock.ts b/src/compile/render-dom/wrappers/EachBlock.ts index 42ba52c7d0..88e4a542f0 100644 --- a/src/compile/render-dom/wrappers/EachBlock.ts +++ b/src/compile/render-dom/wrappers/EachBlock.ts @@ -426,9 +426,6 @@ export default class EachBlockWrapper extends Wrapper { `); } - // TODO do this for keyed blocks as well - const bail = allDependencies.has('$$BAIL$$'); - const condition = Array.from(allDependencies) .map(dependency => `changed.${dependency}`) .join(' || '); @@ -490,15 +487,11 @@ export default class EachBlockWrapper extends Wrapper { ${destroy} `; - if (bail) { - block.builders.update.addBlock(update); - } else { - block.builders.update.addBlock(deindent` - if (${condition}) { - ${update} - } - `); - } + block.builders.update.addBlock(deindent` + if (${condition}) { + ${update} + } + `); } if (outroBlock) { diff --git a/src/compile/render-dom/wrappers/Element/Attribute.ts b/src/compile/render-dom/wrappers/Element/Attribute.ts index e94dd6cc23..769eeb8d53 100644 --- a/src/compile/render-dom/wrappers/Element/Attribute.ts +++ b/src/compile/render-dom/wrappers/Element/Attribute.ts @@ -168,11 +168,9 @@ export default class AttributeWrapper { const updateCachedValue = `${last} !== (${last} = ${value})`; - const condition = this.node.dependencies.has('$$BAIL$$') - ? updateCachedValue - : shouldCache - ? (dependencies.length ? `(${changedCheck}) && ${updateCachedValue}` : updateCachedValue) - : changedCheck; + const condition = shouldCache + ? (dependencies.length ? `(${changedCheck}) && ${updateCachedValue}` : updateCachedValue) + : changedCheck; block.builders.update.addConditional( condition, diff --git a/src/compile/render-dom/wrappers/Element/StyleAttribute.ts b/src/compile/render-dom/wrappers/Element/StyleAttribute.ts index 0c9e4c74b3..1488639106 100644 --- a/src/compile/render-dom/wrappers/Element/StyleAttribute.ts +++ b/src/compile/render-dom/wrappers/Element/StyleAttribute.ts @@ -45,22 +45,16 @@ export default class StyleAttributeWrapper extends AttributeWrapper { .join(' + '); if (propDependencies.size) { - if (propDependencies.has('$$BAIL$$')) { - block.builders.update.addLine( - `@setStyle(${this.parent.var}, "${prop.key}", ${value});` - ); - } else { - const dependencies = Array.from(propDependencies); - const condition = ( - (block.hasOutros ? `!#current || ` : '') + - dependencies.map(dependency => `changed.${dependency}`).join(' || ') - ); - - block.builders.update.addConditional( - condition, - `@setStyle(${this.parent.var}, "${prop.key}", ${value});` - ); - } + const dependencies = Array.from(propDependencies); + const condition = ( + (block.hasOutros ? `!#current || ` : '') + + dependencies.map(dependency => `changed.${dependency}`).join(' || ') + ); + + block.builders.update.addConditional( + condition, + `@setStyle(${this.parent.var}, "${prop.key}", ${value});` + ); } } else { value = stringify(prop.value[0].data); diff --git a/src/compile/render-dom/wrappers/Element/index.ts b/src/compile/render-dom/wrappers/Element/index.ts index 6c216110f5..f45f83977c 100644 --- a/src/compile/render-dom/wrappers/Element/index.ts +++ b/src/compile/render-dom/wrappers/Element/index.ts @@ -557,12 +557,11 @@ export default class ElementWrapper extends Wrapper { this.node.attributes .filter(attr => attr.type === 'Attribute' || attr.type === 'Spread') .forEach(attr => { - const condition = (attr.dependencies.size > 0 && !attr.dependencies.has('$$BAIL$$')) + const condition = attr.dependencies.size > 0 ? `(${[...attr.dependencies].map(d => `changed.${d}`).join(' || ')})` : null; if (attr.isSpread) { - const { dependencies } = attr.expression; const snippet = attr.expression.render(); initialProps.push(snippet); diff --git a/src/compile/render-dom/wrappers/InlineComponent/index.ts b/src/compile/render-dom/wrappers/InlineComponent/index.ts index f589ad6c51..049ae06e44 100644 --- a/src/compile/render-dom/wrappers/InlineComponent/index.ts +++ b/src/compile/render-dom/wrappers/InlineComponent/index.ts @@ -144,8 +144,6 @@ export default class InlineComponentWrapper extends Wrapper { this.node.attributes.forEach(attr => { const { name, dependencies } = attr; - // TODO probably need to account for $$BAIL$$ but - // not totally sure how. will come back to it const condition = dependencies.size > 0 && (dependencies.size !== allDependencies.size) ? `(${[...dependencies].map(d => `changed.${d}`).join(' || ')})` : null; diff --git a/src/compile/render-dom/wrappers/shared/Tag.ts b/src/compile/render-dom/wrappers/shared/Tag.ts index 03315462a4..bb5a006fdb 100644 --- a/src/compile/render-dom/wrappers/shared/Tag.ts +++ b/src/compile/render-dom/wrappers/shared/Tag.ts @@ -34,13 +34,11 @@ export default class Tag extends Wrapper { const updateCachedValue = `${value} !== (${value} = ${snippet})`; - const condition = dependencies.has('$$BAIL$$') - ? updateCachedValue - : this.node.shouldCache - ? dependencies.size > 0 - ? `(${changedCheck}) && ${updateCachedValue}` - : updateCachedValue - : changedCheck; + const condition =this.node.shouldCache + ? dependencies.size > 0 + ? `(${changedCheck}) && ${updateCachedValue}` + : updateCachedValue + : changedCheck; block.builders.update.addConditional( condition,