]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor(compiler): flush transform onExit in reverse
authorEvan You <yyx990803@gmail.com>
Tue, 8 Oct 2019 20:53:26 +0000 (16:53 -0400)
committerEvan You <yyx990803@gmail.com>
Tue, 8 Oct 2019 20:53:26 +0000 (16:53 -0400)
packages/compiler-core/__tests__/transforms/transformElement.spec.ts
packages/compiler-core/src/index.ts
packages/compiler-core/src/transform.ts
packages/compiler-core/src/transforms/vSlot.ts

index fb6230aeb82cc5a21d0eac23ee266036b80c73c8..092cb56d3c16d66988c1eff4fb52dce8e5c20f42 100644 (file)
@@ -33,7 +33,7 @@ function parseWithElementTransform(
   // block as root node
   const ast = parse(`<div>${template}</div>`, options)
   transform(ast, {
-    nodeTransforms: [optimizeText, transformElement],
+    nodeTransforms: [transformElement, optimizeText],
     ...options
   })
   const codegenNode = (ast as any).children[0].children[0]
index 35624b10608f15e6de7780b613fda3fb22db1f82..336659a615ada9127377bbef3d6e42ac5e5899d5 100644 (file)
@@ -52,9 +52,9 @@ export function baseCompile(
           ]
         : []),
       trackSlotScopes,
-      optimizeText,
       transformSlotOutlet,
       transformElement,
+      optimizeText,
       ...(options.nodeTransforms || []) // user transforms
     ],
     directiveTransforms: {
index 1fe68d5de58a37ba4f167cf00df60593ee8939c6..6970eb1ce809cb4b82d208b6efb645f3c42b5b7a 100644 (file)
@@ -346,7 +346,8 @@ export function traverseNode(
   }
 
   // exit transforms
-  for (let i = 0; i < exitFns.length; i++) {
+  let i = exitFns.length
+  while (i--) {
     exitFns[i]()
   }
 }
index 64b407b13017874184ca620bfd9e28ee08bf9d56..7bb044e168fdffef16b10271aa7ddb0c5d8977d6 100644 (file)
@@ -110,7 +110,7 @@ export function buildSlots(
   // since it likely uses a scope variable.
   // TODO: This can be further optimized to only make it dynamic when the slot
   // actually uses the scope variables.
-  let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0
+  let hasDynamicSlots = context.scopes.vSlot > 1 || context.scopes.vFor > 0
 
   // 1. Check for default slot with slotProps on component itself.
   //    <Comp v-slot="{ prop }"/>