Browse Source

wip: fix binding type fallback

Evan You 5 years ago
parent
commit
3019508e75

+ 1 - 1
packages/compiler-core/src/codegen.ts

@@ -227,7 +227,7 @@ export function generate(
       if (genScopeId) {
         push(`${PURE_ANNOTATION}_withId(`)
       }
-      push(`() => {`)
+      push(`(_ctx, _cache${optimizeSources}) => {`)
     } else {
       if (genScopeId) {
         push(`const render = ${PURE_ANNOTATION}_withId(`)

+ 6 - 8
packages/compiler-core/src/transforms/transformExpression.ts

@@ -100,19 +100,17 @@ export function processExpression(
 
   const { inline, inlinePropsIdentifier, bindingMetadata } = context
   const prefix = (raw: string) => {
+    const type = hasOwn(bindingMetadata, raw) && bindingMetadata[raw]
     if (inline) {
-      // setup inline mode, it's either props or setup
-      if (bindingMetadata[raw] !== 'setup') {
+      // setup inline mode
+      if (type === 'props') {
         return `${inlinePropsIdentifier}.${raw}`
-      } else {
+      } else if (type === 'setup') {
         return `${context.helperString(UNREF)}(${raw})`
       }
-    } else {
-      const source = hasOwn(bindingMetadata, raw)
-        ? `$` + bindingMetadata[raw]
-        : `_ctx`
-      return `${source}.${raw}`
     }
+    // fallback to normal
+    return `${type ? `$${type}` : `_ctx`}.${raw}`
   }
 
   // fast path if expression is a simple identifier.

+ 1 - 0
packages/compiler-sfc/src/compileScript.ts

@@ -685,6 +685,7 @@ export function compileScript(
   if (script) {
     if (startOffset < scriptStartOffset!) {
       // <script setup> before <script>
+      s.remove(0, startOffset)
       s.remove(endOffset, scriptStartOffset!)
       s.remove(scriptEndOffset!, source.length)
     } else {