Browse Source

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

close #8295
pull/7594/head
Evan You 2 years ago
parent
commit
8dc8cf852b
  1. 10
      packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts
  2. 6
      packages/compiler-core/src/transforms/transformExpression.ts

10
packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts

@ -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(

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

@ -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]

Loading…
Cancel
Save