From: daiwei Date: Thu, 23 Jan 2025 06:59:31 +0000 (+0800) Subject: Revert "chore: cache buildSlots result" X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=74e8bb44cb1500b5ca5852899f391f861bb1813b;p=thirdparty%2Fvuejs%2Fcore.git Revert "chore: cache buildSlots result" This reverts commit 7327a573fe27525f5dfe93bf8686324f4be7c0a5. --- diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts index fed8cd2cfc..b3a9d326f6 100644 --- a/packages/compiler-core/src/ast.ts +++ b/packages/compiler-core/src/ast.ts @@ -153,8 +153,6 @@ export interface PlainElementNode extends BaseElementNode { export interface ComponentNode extends BaseElementNode { tagType: ElementTypes.COMPONENT - slots: SlotsExpression - hasDynamicSlots: boolean codegenNode: | VNodeCall | CacheExpression // when cached by v-once diff --git a/packages/compiler-core/src/transforms/transformElement.ts b/packages/compiler-core/src/transforms/transformElement.ts index 05b215db31..76ca1d4435 100644 --- a/packages/compiler-core/src/transforms/transformElement.ts +++ b/packages/compiler-core/src/transforms/transformElement.ts @@ -173,10 +173,7 @@ export const transformElement: NodeTransform = (node, context) => { vnodeTag !== KEEP_ALIVE if (shouldBuildAsSlots) { - const { slots, hasDynamicSlots } = buildSlots( - node as ComponentNode, - context, - ) + const { slots, hasDynamicSlots } = buildSlots(node, context) vnodeChildren = slots if (hasDynamicSlots) { patchFlag |= PatchFlags.DYNAMIC_SLOTS diff --git a/packages/compiler-core/src/transforms/vSkip.ts b/packages/compiler-core/src/transforms/vSkip.ts index 6121dfaa0a..3e0951f8dd 100644 --- a/packages/compiler-core/src/transforms/vSkip.ts +++ b/packages/compiler-core/src/transforms/vSkip.ts @@ -6,6 +6,7 @@ import { NodeTypes, type SimpleExpressionNode, type SkipNode, + type SlotsExpression, type TemplateChildNode, createConditionalExpression, createSimpleExpression, @@ -78,8 +79,9 @@ export function processSkip( // if not found, throw an error if (node.tagType === ElementTypes.COMPONENT) { const { slots } = buildSlots(node, context) - if (slots.type === NodeTypes.JS_OBJECT_EXPRESSION) { - const prop = slots.properties.find( + const genChildren = slots as SlotsExpression + if (genChildren.type === NodeTypes.JS_OBJECT_EXPRESSION) { + const prop = genChildren.properties.find( p => p.type === NodeTypes.JS_PROPERTY && p.key.type === NodeTypes.SIMPLE_EXPRESSION && diff --git a/packages/compiler-core/src/transforms/vSlot.ts b/packages/compiler-core/src/transforms/vSlot.ts index b238247b9f..aa4ac478b6 100644 --- a/packages/compiler-core/src/transforms/vSlot.ts +++ b/packages/compiler-core/src/transforms/vSlot.ts @@ -1,8 +1,8 @@ import { type CallExpression, - type ComponentNode, type ConditionalExpression, type DirectiveNode, + type ElementNode, ElementTypes, type ExpressionNode, type FunctionExpression, @@ -114,20 +114,13 @@ const buildClientSlotFn: SlotFnBuilder = (props, _vForExp, children, loc) => // Instead of being a DirectiveTransform, v-slot processing is called during // transformElement to build the slots object for a component. export function buildSlots( - node: ComponentNode, + node: ElementNode, context: TransformContext, buildSlotFn: SlotFnBuilder = buildClientSlotFn, ): { slots: SlotsExpression hasDynamicSlots: boolean } { - // return early if slots are already built to avoid duplication - if (node.slots) { - return { - slots: node.slots, - hasDynamicSlots: node.hasDynamicSlots, - } - } context.helper(WITH_CTX) const { children, loc } = node @@ -371,8 +364,6 @@ export function buildSlots( ]) as SlotsExpression } - node.slots = slots - node.hasDynamicSlots = hasDynamicSlots return { slots, hasDynamicSlots,