Compare commits
	
		
			3 Commits
		
	
	
		
			3a30d890c6
			...
			5910345c08
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5910345c08 | |||
| 8b4dad1381 | |||
| 6ef468408c | 
| @ -34,16 +34,16 @@ func evalMultiply(ctx ExprContext, self *term) (v any, err error) { | ||||
| 		s, _ := leftValue.(string) | ||||
| 		n, _ := rightValue.(int64) | ||||
| 		v = strings.Repeat(s, int(n)) | ||||
| 	} else if isNumber(leftValue) && isNumber(rightValue) { | ||||
| 	} else if isNumOrFract(leftValue) && isNumOrFract(rightValue) { | ||||
| 		if isFloat(leftValue) || isFloat(rightValue) { | ||||
| 			v = numAsFloat(leftValue) * numAsFloat(rightValue) | ||||
| 		} else if isFraction(leftValue) || isFraction(rightValue) { | ||||
| 			v, err = mulAnyFract(leftValue, rightValue) | ||||
| 		} else { | ||||
| 			leftInt, _ := leftValue.(int64) | ||||
| 			rightInt, _ := rightValue.(int64) | ||||
| 			v = leftInt * rightInt | ||||
| 		} | ||||
| 	} else if isFraction(leftValue) || isFraction(rightValue) { | ||||
| 		v, err = mulAnyFract(leftValue, rightValue) | ||||
| 	} else { | ||||
| 		err = self.errIncompatibleTypes(leftValue, rightValue) | ||||
| 	} | ||||
| @ -71,7 +71,7 @@ func evalDivide(ctx ExprContext, self *term) (v any, err error) { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if isNumber(leftValue) && isNumber(rightValue) { | ||||
| 	if isNumOrFract(leftValue) && isNumOrFract(rightValue) { | ||||
| 		if isFloat(leftValue) || isFloat(rightValue) { | ||||
| 			d := numAsFloat(rightValue) | ||||
| 			if d == 0.0 { | ||||
| @ -79,6 +79,8 @@ func evalDivide(ctx ExprContext, self *term) (v any, err error) { | ||||
| 			} else { | ||||
| 				v = numAsFloat(leftValue) / d | ||||
| 			} | ||||
| 		} else if isFraction(leftValue) || isFraction(rightValue) { | ||||
| 			v, err = divAnyFract(leftValue, rightValue) | ||||
| 		} else { | ||||
| 			leftInt, _ := leftValue.(int64) | ||||
| 			if rightInt, _ := rightValue.(int64); rightInt == 0 { | ||||
| @ -87,8 +89,6 @@ func evalDivide(ctx ExprContext, self *term) (v any, err error) { | ||||
| 				v = leftInt / rightInt | ||||
| 			} | ||||
| 		} | ||||
| 	} else if isFraction(leftValue) || isFraction(rightValue) { | ||||
| 		v, err = divAnyFract(leftValue, rightValue) | ||||
| 	} else { | ||||
| 		err = self.errIncompatibleTypes(leftValue, rightValue) | ||||
| 	} | ||||
| @ -114,7 +114,7 @@ func evalDivideAsFloat(ctx ExprContext, self *term) (v any, err error) { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if isNumber(leftValue) && isNumber(rightValue) { | ||||
| 	if isNumOrFract(leftValue) && isNumOrFract(rightValue) { | ||||
| 		d := numAsFloat(rightValue) | ||||
| 		if d == 0.0 { | ||||
| 			err = errors.New("division by zero") | ||||
|  | ||||
| @ -56,7 +56,11 @@ func evalPlus(ctx ExprContext, self *term) (v any, err error) { | ||||
| 		} | ||||
| 		v = &sumList | ||||
| 	} else if isFraction(leftValue) || isFraction(rightValue) { | ||||
| 		if isFloat(leftValue) || isFloat(rightValue) { | ||||
| 			v = numAsFloat(leftValue) + numAsFloat(rightValue) | ||||
| 		} else { | ||||
| 			v, err = sumAnyFract(leftValue, rightValue) | ||||
| 		} | ||||
| 	} else { | ||||
| 		err = self.errIncompatibleTypes(leftValue, rightValue) | ||||
| 	} | ||||
| @ -82,9 +86,11 @@ func evalMinus(ctx ExprContext, self *term) (v any, err error) { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if isNumber(leftValue) && isNumber(rightValue) { | ||||
| 	if isNumOrFract(leftValue) && isNumOrFract(rightValue) { | ||||
| 		if isFloat(leftValue) || isFloat(rightValue) { | ||||
| 			v = numAsFloat(leftValue) - numAsFloat(rightValue) | ||||
| 		} else if isFraction(leftValue) || isFraction(rightValue) { | ||||
| 			v, err = subAnyFract(leftValue, rightValue) | ||||
| 		} else { | ||||
| 			leftInt, _ := leftValue.(int64) | ||||
| 			rightInt, _ := rightValue.(int64) | ||||
| @ -100,8 +106,6 @@ func evalMinus(ctx ExprContext, self *term) (v any, err error) { | ||||
| 			} | ||||
| 		} | ||||
| 		v = &diffList | ||||
| 	} else if isFraction(leftValue) || isFraction(rightValue) { | ||||
| 		v, err = subAnyFract(leftValue, rightValue) | ||||
| 	} else { | ||||
| 		err = self.errIncompatibleTypes(leftValue, rightValue) | ||||
| 	} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user