fix(compiler-core): treat floating point numbers as constants

close #8295
This commit is contained in:
Evan You 2023-05-12 10:53:40 +01:00
parent c454b9d7f4
commit 8dc8cf852b
2 changed files with 15 additions and 1 deletions

View File

@ -431,6 +431,16 @@ describe('compiler: expression transform', () => {
})
})
// #8295
test('should treat floating point number literals as constant', () => {
const node = parseWithExpressionTransform(
`{{ [1, 2.1] }}`
) as InterpolationNode
expect(node.content).toMatchObject({
constType: ConstantTypes.CAN_STRINGIFY
})
})
describe('ES Proposals support', () => {
test('bigInt', () => {
const node = parseWithExpressionTransform(

View File

@ -45,6 +45,10 @@ import { BindingTypes } from '../options'
const isLiteralWhitelisted = /*#__PURE__*/ makeMap('true,false,null,this')
// a heuristic safeguard to bail constant expressions on presence of
// likely function invocation and member access
const constantBailRE = /\w\s*\(|\.[^\d]/
export const transformExpression: NodeTransform = (node, context) => {
if (node.type === NodeTypes.INTERPOLATION) {
node.content = processExpression(
@ -217,7 +221,7 @@ export function processExpression(
// fast path if expression is a simple identifier.
const rawExp = node.content
// bail constant on parens (function invocation) and dot (member access)
const bailConstant = rawExp.indexOf(`(`) > -1 || rawExp.indexOf('.') > 0
const bailConstant = constantBailRE.test(rawExp)
if (isSimpleIdentifier(rawExp)) {
const isScopeVarReference = context.identifiers[rawExp]