mirror of https://github.com/vuejs/core.git
fix(compiler-core): treat floating point numbers as constants
close #8295
This commit is contained in:
parent
c454b9d7f4
commit
8dc8cf852b
|
@ -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', () => {
|
describe('ES Proposals support', () => {
|
||||||
test('bigInt', () => {
|
test('bigInt', () => {
|
||||||
const node = parseWithExpressionTransform(
|
const node = parseWithExpressionTransform(
|
||||||
|
|
|
@ -45,6 +45,10 @@ import { BindingTypes } from '../options'
|
||||||
|
|
||||||
const isLiteralWhitelisted = /*#__PURE__*/ makeMap('true,false,null,this')
|
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) => {
|
export const transformExpression: NodeTransform = (node, context) => {
|
||||||
if (node.type === NodeTypes.INTERPOLATION) {
|
if (node.type === NodeTypes.INTERPOLATION) {
|
||||||
node.content = processExpression(
|
node.content = processExpression(
|
||||||
|
@ -217,7 +221,7 @@ export function processExpression(
|
||||||
// fast path if expression is a simple identifier.
|
// fast path if expression is a simple identifier.
|
||||||
const rawExp = node.content
|
const rawExp = node.content
|
||||||
// bail constant on parens (function invocation) and dot (member access)
|
// 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)) {
|
if (isSimpleIdentifier(rawExp)) {
|
||||||
const isScopeVarReference = context.identifiers[rawExp]
|
const isScopeVarReference = context.identifiers[rawExp]
|
||||||
|
|
Loading…
Reference in New Issue