diff --git a/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts b/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts
index b9593c4a4..40070778b 100644
--- a/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts
+++ b/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts
@@ -13,6 +13,7 @@ import {
} from '../../src'
import { transformIf } from '../../src/transforms/vIf'
import { transformExpression } from '../../src/transforms/transformExpression'
+import { PatchFlagNames, PatchFlags } from '../../../shared/src'
function parseWithExpressionTransform(
template: string,
@@ -494,7 +495,9 @@ describe('compiler: expression transform', () => {
setup: BindingTypes.SETUP_MAYBE_REF,
setupConst: BindingTypes.SETUP_CONST,
data: BindingTypes.DATA,
- options: BindingTypes.OPTIONS
+ options: BindingTypes.OPTIONS,
+ reactive: BindingTypes.SETUP_REACTIVE_CONST,
+ literal: BindingTypes.LITERAL_CONST
}
function compileWithBindingMetadata(
@@ -532,5 +535,25 @@ describe('compiler: expression transform', () => {
expect(code).toMatch(`_ctx.options`)
expect(code).toMatchSnapshot()
})
+
+ test('literal const handling', () => {
+ const { code } = compileWithBindingMetadata(`
{{ literal }}
`, {
+ inline: true
+ })
+ // #7973 should skip patch for literal const
+ expect(code).not.toMatch(
+ `${PatchFlags.TEXT} /* ${PatchFlagNames[PatchFlags.TEXT]} */`
+ )
+ })
+
+ test('reactive const handling', () => {
+ const { code } = compileWithBindingMetadata(`{{ reactive }}
`, {
+ inline: true
+ })
+ // #7973 should not skip patch for reactive const
+ expect(code).toMatch(
+ `${PatchFlags.TEXT} /* ${PatchFlagNames[PatchFlags.TEXT]} */`
+ )
+ })
})
})
diff --git a/packages/compiler-core/src/transforms/transformExpression.ts b/packages/compiler-core/src/transforms/transformExpression.ts
index 112dc63cb..080d61d73 100644
--- a/packages/compiler-core/src/transforms/transformExpression.ts
+++ b/packages/compiler-core/src/transforms/transformExpression.ts
@@ -128,7 +128,11 @@ export function processExpression(
const isDestructureAssignment =
parent && isInDestructureAssignment(parent, parentStack)
- if (isConst(type) || localVars[raw]) {
+ if (
+ isConst(type) ||
+ type === BindingTypes.SETUP_REACTIVE_CONST ||
+ localVars[raw]
+ ) {
return raw
} else if (type === BindingTypes.SETUP_REF) {
return `${raw}.value`
@@ -371,8 +375,6 @@ export function stringifyExpression(exp: ExpressionNode | string): string {
function isConst(type: unknown) {
return (
- type === BindingTypes.SETUP_CONST ||
- type === BindingTypes.LITERAL_CONST ||
- type === BindingTypes.SETUP_REACTIVE_CONST
+ type === BindingTypes.SETUP_CONST || type === BindingTypes.LITERAL_CONST
)
}