diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/IfBlock.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/IfBlock.js index c0ae903fb8..24d0c49f8e 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/IfBlock.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/IfBlock.js @@ -29,37 +29,26 @@ export function IfBlock(node, context) { let index = 0; /** @type {IfStatement} */ - const main_if = create_if(node, context, index++); + let if_statement = create_if(node, context, index++); - /** @type {IfStatement} */ - let current_if = main_if; - - let alternate = node.alternate; + context.state.init.push( + b.stmt(b.call('$.choose', context.state.node, b.arrow([], b.block([if_statement])))) + ); - while ( - alternate && - alternate.nodes.length === 1 && - alternate.nodes[0].type === 'IfBlock' && - alternate.nodes[0].elseif - ) { - const current_node = alternate.nodes[0]; - current_if = current_if.alternate = create_if(current_node, context, index++); - alternate = current_node.alternate; + let alt = node.alternate; + while (alt && alt.nodes.length === 1 && alt.nodes[0].type === 'IfBlock' && alt.nodes[0].elseif) { + const elseif = alt.nodes[0]; + if_statement = if_statement.alternate = create_if(elseif, context, index++); + alt = elseif.alternate; } - if (alternate) { - current_if.alternate = b.block([ + if (alt) { + if_statement.alternate = b.block([ b.return( b.array([ b.literal(index++), - b.arrow([b.id('$$anchor')], /** @type {BlockStatement} */ (context.visit(alternate))) + b.arrow([b.id('$$anchor')], /** @type {BlockStatement} */ (context.visit(alt))) ]) ) ]); } - - context.state.init.push( - b.stmt( - b.call('$.choose', context.state.node, b.arrow([], b.block([main_if])), b.literal(index)) - ) - ); } diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/IfBlock.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/IfBlock.js index b457f18a7b..6b9dbe8a3d 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/IfBlock.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/IfBlock.js @@ -33,32 +33,27 @@ export function IfBlock(node, context) { let index = 0; /** @type {IfStatement} */ - let current_if = create_if(node, context, index++); + let if_statement = create_if(node, context, index++); - context.state.template.push(current_if, block_close); + context.state.template.push(if_statement, block_close); - let alternate = node.alternate; - while ( - alternate && - alternate.nodes.length === 1 && - alternate.nodes[0].type === 'IfBlock' && - alternate.nodes[0].elseif - ) { - const current_node = alternate.nodes[0]; - current_if = current_if.alternate = create_if(current_node, context, index++); - alternate = current_node.alternate; + let alt = node.alternate; + while (alt && alt.nodes.length === 1 && alt.nodes[0].type === 'IfBlock' && alt.nodes[0].elseif) { + const elseif = alt.nodes[0]; + if_statement = if_statement.alternate = create_if(elseif, context, index++); + alt = elseif.alternate; } /** @type {string} */ let else_key; - if (alternate) { - current_if.alternate = /** @type {BlockStatement} */ (context.visit(alternate)); + if (alt) { + if_statement.alternate = /** @type {BlockStatement} */ (context.visit(alt)); else_key = ``; } else { - current_if.alternate = b.block([]); + if_statement.alternate = b.block([]); else_key = BLOCK_OPEN_ELSE; } - current_if.alternate.body.unshift( + if_statement.alternate.body.unshift( b.stmt(b.assignment('+=', b.id('$$payload.out'), b.literal(else_key))) ); } diff --git a/packages/svelte/src/internal/client/dom/blocks/if.js b/packages/svelte/src/internal/client/dom/blocks/if.js index bb2c0f282b..22d23496b4 100644 --- a/packages/svelte/src/internal/client/dom/blocks/if.js +++ b/packages/svelte/src/internal/client/dom/blocks/if.js @@ -10,8 +10,6 @@ import { } from '../hydration.js'; import { block, branch, pause_effect, resume_effect } from '../../reactivity/effects.js'; import { HYDRATION_START_ELSE } from '../../../../constants.js'; -import { derived } from '../../reactivity/deriveds.js'; -import { get } from '../../runtime.js'; /** * @param {TemplateNode} node