]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor(compiler-vapor): fast path for string
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Tue, 30 Jan 2024 14:17:34 +0000 (22:17 +0800)
committer三咲智子 Kevin Deng <sxzz@sxzz.moe>
Tue, 30 Jan 2024 14:17:34 +0000 (22:17 +0800)
packages/compiler-vapor/src/generate.ts
packages/compiler-vapor/src/generators/dom.ts
packages/compiler-vapor/src/generators/event.ts
packages/compiler-vapor/src/generators/html.ts
packages/compiler-vapor/src/generators/modelValue.ts
packages/compiler-vapor/src/generators/prop.ts
packages/compiler-vapor/src/generators/text.ts

index b24e231a253506ffb9e5f40fe163c18a9b87b693..9910b3d28665c2cc47761b37f3034ff89d42516c 100644 (file)
@@ -56,9 +56,12 @@ export interface CodegenContext {
   newline(): CodeFragment
   multi(
     codes: [left: string, right: string, segment: string],
-    ...fn: Array<false | CodeFragment[]>
+    ...fn: Array<false | string | CodeFragment[]>
+  ): CodeFragment[]
+  call(
+    name: string,
+    ...args: Array<false | string | CodeFragment[]>
   ): CodeFragment[]
-  call(name: string, ...args: Array<false | CodeFragment[]>): CodeFragment[]
   withIndent<T>(fn: () => T): T
 
   helpers: Set<string>
@@ -116,8 +119,9 @@ function createCodegenContext(ir: RootIRNode, options: CodegenOptions) {
       const frag: CodeFragment[] = []
       fns = fns.filter(Boolean)
       frag.push(left)
-      for (const [i, fn] of fns.entries()) {
+      for (let [i, fn] of fns.entries()) {
         if (fn) {
+          if (isString(fn)) fn = [fn]
           frag.push(...fn)
           if (i < fns.length - 1) frag.push(seg)
         }
index f30b8c6d8fb6e9e561ea0b7fb7e3fe38ac5514a1..c4e859bd4409b99aac27e6995243cb4e043f850f 100644 (file)
@@ -16,9 +16,9 @@ export function genInsertNode(
     newline(),
     ...call(
       vaporHelper('insert'),
-      [element],
-      [`n${oper.parent}`],
-      [`n${oper.anchor}`],
+      element,
+      `n${oper.parent}`,
+      `n${oper.anchor}`,
     ),
   ]
 }
@@ -31,8 +31,8 @@ export function genPrependNode(
     newline(),
     ...call(
       vaporHelper('prepend'),
-      [`n${oper.parent}`],
-      ...oper.elements.map(el => [`n${el}`]),
+      `n${oper.parent}`,
+      ...oper.elements.map(el => `n${el}`),
     ),
   ]
 }
@@ -46,8 +46,8 @@ export function genAppendNode(
     newline(),
     ...call(
       vaporHelper('append'),
-      [`n${oper.parent}`],
-      ...oper.elements.map(el => [`n${el}`]),
+      `n${oper.parent}`,
+      ...oper.elements.map(el => `n${el}`),
     ),
   ]
 }
index 7d79b579ec6b88bc8709f2ac7cc6dffa87074fc7..e8e6d30dd6606bfaf0df0f7cbda5e059623ce757 100644 (file)
@@ -16,13 +16,12 @@ export function genSetEvent(
 
   const name = genName()
   const handler = genFinalizedHandler()
-  const opt = !!options.length && [
-    `{ ${options.map(v => `${v}: true`).join(', ')} }`,
-  ]
+  const opt =
+    !!options.length && `{ ${options.map(v => `${v}: true`).join(', ')} }`
 
   return [
     newline(),
-    ...call(vaporHelper('on'), [`n${oper.element}`], name, handler, opt),
+    ...call(vaporHelper('on'), `n${oper.element}`, name, handler, opt),
   ]
 
   function genName(): CodeFragment[] {
@@ -38,7 +37,7 @@ export function genSetEvent(
     }
   }
 
-  function genEventHandler(): CodeFragment[] {
+  function genEventHandler() {
     const exp = oper.value
     if (exp && exp.content.trim()) {
       const isMemberExp = isMemberExpression(exp.content, ctxOptions)
@@ -64,10 +63,10 @@ export function genSetEvent(
         }
       }
     }
-    return ['() => {}']
+    return '() => {}'
   }
 
-  function genFinalizedHandler(): CodeFragment[] {
+  function genFinalizedHandler() {
     let expr = genEventHandler()
 
     if (nonKeys.length) {
index f6188fd72c40a7d3b59e4410e2229fab126b6f1f..803bab3a14de1abcc42e540714292b7ff4a57528 100644 (file)
@@ -11,7 +11,7 @@ export function genSetHtml(
     newline(),
     ...call(
       vaporHelper('setHtml'),
-      [`n${oper.element}`],
+      `n${oper.element}`,
       genExpression(oper.value, context),
     ),
   ]
index b50d2233489df5ff96eed6ab0bb106d2847a737b..4295f74778ce18d06cf773544b97227ff602389a 100644 (file)
@@ -19,7 +19,7 @@ export function genSetModelValue(
 
   return [
     newline(),
-    ...call(vaporHelper('on'), [`n${oper.element}`], name, handler),
+    ...call(vaporHelper('on'), `n${oper.element}`, name, handler),
   ]
 
   function genName(): CodeFragment[] {
index e8f17e934598d6aaad2ed46b9f09fb44e5fa350f..85af01ec46dbd7b6339a4ed886e156a930c1cabb 100644 (file)
@@ -9,7 +9,7 @@ export function genSetProp(
 ): CodeFragment[] {
   const { call, newline, vaporHelper, helper } = context
 
-  const element = [`n${oper.element}`]
+  const element = `n${oper.element}`
   const expr = genExpression(oper.key, context)
 
   // fast path for static props
index 4ece2111951b7f9d327d7e856a0d51f1d909c56b..1947498621b7232fc860cebd494bf33e3b887666 100644 (file)
@@ -11,7 +11,7 @@ export function genSetText(
     newline(),
     ...call(
       vaporHelper('setText'),
-      [`n${oper.element}`],
+      `n${oper.element}`,
       genExpression(oper.value, context),
     ),
   ]