Skip to content

Commit f995af6

Browse files
committed
Fix a slip in the arithmetic compilation that allowed it to emit NaN.
1 parent 653de19 commit f995af6

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

defaultMethods.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -980,14 +980,14 @@ function numberCoercion (i, buildState) {
980980

981981
// @ts-ignore Allow custom attribute
982982
defaultMethods['+'].compile = function (data, buildState) {
983-
if (Array.isArray(data)) return `(${data.map(i => numberCoercion(i, buildState)).join(' + ')})`
983+
if (Array.isArray(data)) return `precoerceNumber(${data.map(i => numberCoercion(i, buildState)).join(' + ')})`
984984
if (typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean') return `precoerceNumber(+${buildString(data, buildState)})`
985985
return buildState.compile`(Array.isArray(prev = ${data}) ? prev.reduce((a,b) => (+a)+(+precoerceNumber(b)), 0) : +precoerceNumber(prev))`
986986
}
987987

988988
// @ts-ignore Allow custom attribute
989989
defaultMethods['%'].compile = function (data, buildState) {
990-
if (Array.isArray(data)) return `(${data.map(i => numberCoercion(i, buildState)).join(' % ')})`
990+
if (Array.isArray(data)) return `precoerceNumber(${data.map(i => numberCoercion(i, buildState)).join(' % ')})`
991991
return `(${buildString(data, buildState)}).reduce((a,b) => (+precoerceNumber(a))%(+precoerceNumber(b)))`
992992
}
993993

@@ -999,14 +999,14 @@ defaultMethods.in.compile = function (data, buildState) {
999999

10001000
// @ts-ignore Allow custom attribute
10011001
defaultMethods['-'].compile = function (data, buildState) {
1002-
if (Array.isArray(data)) return `${data.length === 1 ? '-' : ''}(${data.map(i => numberCoercion(i, buildState)).join(' - ')})`
1002+
if (Array.isArray(data)) return `${data.length === 1 ? '-' : ''}precoerceNumber(${data.map(i => numberCoercion(i, buildState)).join(' - ')})`
10031003
if (typeof data === 'string' || typeof data === 'number') return `(-${buildString(data, buildState)})`
10041004
return buildState.compile`(Array.isArray(prev = ${data}) ? prev.length === 1 ? -precoerceNumber(prev[0]) : prev.reduce((a,b) => (+precoerceNumber(a))-(+precoerceNumber(b))) : -precoerceNumber(prev))`
10051005
}
10061006
// @ts-ignore Allow custom attribute
10071007
defaultMethods['/'].compile = function (data, buildState) {
10081008
if (Array.isArray(data)) {
1009-
return `(${data.map((i, x) => {
1009+
return `precoerceNumber(${data.map((i, x) => {
10101010
let res = numberCoercion(i, buildState)
10111011
if (x && res === '+0') precoerceNumber(NaN)
10121012
if (x) res = `precoerceNumber(${res} || NaN)`
@@ -1017,7 +1017,7 @@ defaultMethods['/'].compile = function (data, buildState) {
10171017
}
10181018
// @ts-ignore Allow custom attribute
10191019
defaultMethods['*'].compile = function (data, buildState) {
1020-
if (Array.isArray(data)) return `(${data.map(i => numberCoercion(i, buildState)).join(' * ')})`
1020+
if (Array.isArray(data)) return `precoerceNumber(${data.map(i => numberCoercion(i, buildState)).join(' * ')})`
10211021
return `(${buildString(data, buildState)}).reduce((a,b) => (+precoerceNumber(a))*(+precoerceNumber(b)))`
10221022
}
10231023

0 commit comments

Comments
 (0)