From: Evan You Date: Mon, 29 Apr 2024 08:21:25 +0000 (+0800) Subject: fix(compiler-core): fix bail constant for globals X-Git-Tag: v3.4.26~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fefce06b41e3b75de3d748dc6399628ec5056e78;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-core): fix bail constant for globals --- diff --git a/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts b/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts index 8ecc2fb0fb..273634dd57 100644 --- a/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts +++ b/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts @@ -431,6 +431,21 @@ describe('compiler: expression transform', () => { }) }) + test('should not bail constant on strings w/ ()', () => { + const node = parseWithExpressionTransform( + `{{ new Date().getFullYear() }}`, + ) as InterpolationNode + expect(node.content).toMatchObject({ + children: [ + 'new ', + { constType: ConstantTypes.NOT_CONSTANT }, + '().', + { constType: ConstantTypes.NOT_CONSTANT }, + '()', + ], + }) + }) + describe('ES Proposals support', () => { test('bigInt', () => { const node = parseWithExpressionTransform( diff --git a/packages/compiler-core/src/transforms/transformExpression.ts b/packages/compiler-core/src/transforms/transformExpression.ts index 2d8dc8bc85..35aa9a373a 100644 --- a/packages/compiler-core/src/transforms/transformExpression.ts +++ b/packages/compiler-core/src/transforms/transformExpression.ts @@ -311,7 +311,12 @@ export function processExpression( } else { // The identifier is considered constant unless it's pointing to a // local scope variable (a v-for alias, or a v-slot prop) - if (!(needPrefix && isLocal)) { + if ( + !(needPrefix && isLocal) && + parent.type !== 'CallExpression' && + parent.type !== 'NewExpression' && + parent.type !== 'MemberExpression' + ) { ;(node as QualifiedId).isConstant = true } // also generate sub-expressions for other identifiers for better