Fix subtract and divide in expression.evaluate

This commit is contained in:
Zaid Abdulla committed 2019-01-16 03:11:45 -08:00
1 parent 0b59811924
commit 192ed6b034
1 file changed
+5 -5
+5 -5
View File
@@ -14,7 +14,7 @@ function reduce(exp, callback) {
while (loop) { while (loop) {
loop = false; loop = false;
for (let i = 2; i < exp.length; ++i) { for (let i = 2; i < exp.length; ++i) {
const res = callback(exp[i - 1], exp[i]); const res = callback(exp[i - 1], exp[i], i - 2);
if (res !== REDUCE_SKIP) { if (res !== REDUCE_SKIP) {
loop = true; loop = true;
exp = exp.slice(); exp = exp.slice();
@@ -126,10 +126,10 @@ function evaluate(exp, obj, now, cb) {
return REDUCE_SKIP; return REDUCE_SKIP;
}); });
} else if (e[0] === "/") { } else if (e[0] === "/") {
return reduce(e, (a, b) => { return reduce(e, (a, b, i) => {
if (!isArray(a) && !isArray(b)) { if (!isArray(a) && !isArray(b)) {
if (a == null || b == null) return null; if (a == null || b == null) return null;
return a / b; return i === 0 ? a / b : a * b;
} }
return REDUCE_SKIP; return REDUCE_SKIP;
}); });
@@ -142,10 +142,10 @@ function evaluate(exp, obj, now, cb) {
return REDUCE_SKIP; return REDUCE_SKIP;
}); });
} else if (e[0] === "-") { } else if (e[0] === "-") {
return reduce(e, (a, b) => { return reduce(e, (a, b, i) => {
if (!isArray(a) && !isArray(b)) { if (!isArray(a) && !isArray(b)) {
if (a == null || b == null) return null; if (a == null || b == null) return null;
return a - b; return i === 0 ? a - b : a + b;
} }
return REDUCE_SKIP; return REDUCE_SKIP;
}); });