]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor(compiler-vapor): make dynamic.children an array
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Mon, 29 Jan 2024 14:28:40 +0000 (22:28 +0800)
committer三咲智子 Kevin Deng <sxzz@sxzz.moe>
Mon, 29 Jan 2024 14:28:40 +0000 (22:28 +0800)
packages/compiler-vapor/src/ir.ts
packages/compiler-vapor/src/transform.ts

index 40b79cf6e7f5e5b0f30c1c9d82f6f5bca46e1b51..f79c8784180e159e5e8e6ac26aa0ebd00fedd21b 100644 (file)
@@ -200,9 +200,8 @@ export interface IRDynamicInfo {
   id: number | null
   dynamicFlags: DynamicFlag
   placeholder: number | null
-  children: IRDynamicChildren
+  children: IRDynamicInfo[]
 }
-export type IRDynamicChildren = Record<number, IRDynamicInfo>
 
 export type IRExpression = SimpleExpressionNode | string
 export interface IREffect {
index 073b4ad6a75e4ffd2f2b4faab47275b09a7d0d58..61f0f6e8937753b65b8810efdb790f336cda0fea 100644 (file)
@@ -103,7 +103,7 @@ export const genDefaultDynamic = (): IRDynamicInfo => ({
   id: null,
   dynamicFlags: 0,
   placeholder: null,
-  children: {},
+  children: [],
 })
 
 // TODO use class for better perf
@@ -313,9 +313,8 @@ function transformNode(
 
 function transformChildren(ctx: TransformContext<RootNode | ElementNode>) {
   const { children } = ctx.node
-  let i = 0
-  for (; i < children.length; i++) {
-    const child = children[i]
+
+  for (const [i, child] of children.entries()) {
     const childContext = createContext(child, ctx, i)
     transformNode(childContext)
     ctx.childrenTemplate.push(childContext.template)
@@ -331,9 +330,7 @@ function processDynamicChildren(ctx: TransformContext<RootNode | ElementNode>) {
   let prevChildren: IRDynamicInfo[] = []
   let hasStatic = false
 
-  for (let index = 0; index < node.children.length; index++) {
-    const child = ctx.dynamic.children[index]
-
+  for (const [index, child] of ctx.dynamic.children.entries()) {
     if (!child || !(child.dynamicFlags & DynamicFlag.INSERT)) {
       if (prevChildren.length) {
         if (hasStatic) {
@@ -363,7 +360,7 @@ function processDynamicChildren(ctx: TransformContext<RootNode | ElementNode>) {
 
     prevChildren.push(child)
 
-    if (index === node.children.length - 1) {
+    if (index === ctx.dynamic.children.length - 1) {
       ctx.registerOperation({
         type: IRNodeTypes.APPEND_NODE,
         loc: node.loc,