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 ) }