From 8ee0bb5701de4db9c5da4fbee7c0fc7947276f38 Mon Sep 17 00:00:00 2001
From: Celestino Amoroso <celestino.amoroso@gmail.com>
Date: Wed, 8 May 2024 07:53:01 +0200
Subject: [PATCH] Some data-type check functions (e.g. IsInteger()) exported

---
 func-import.go       |  2 +-
 func-math.go         |  6 +++---
 operator-builtin.go  |  2 +-
 operator-fact.go     |  2 +-
 operator-include.go  |  4 ++--
 operator-insert.go   |  4 ++--
 operator-length.go   |  4 ++--
 operator-post-inc.go |  2 +-
 operator-prod.go     |  8 ++++----
 operator-rel.go      | 18 +++++++++---------
 operator-sign.go     |  4 ++--
 operator-sum.go      | 14 +++++++-------
 utils.go             | 18 +++++++++---------
 13 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/func-import.go b/func-import.go
index 54204b6..c9cdb9c 100644
--- a/func-import.go
+++ b/func-import.go
@@ -35,7 +35,7 @@ func importGeneral(ctx ExprContext, name string, args []any) (result any, err er
 }
 
 func checkStringParamExpected(funcName string, paramValue any, paramPos int) (err error) {
-	if !(isString(paramValue) /*|| isList(paramValue)*/) {
+	if !(IsString(paramValue) /*|| isList(paramValue)*/) {
 		err = fmt.Errorf("%s(): param nr %d has wrong type %T, string expected", funcName, paramPos+1, paramValue)
 	}
 	return
diff --git a/func-math.go b/func-math.go
index f05721b..47dd55e 100644
--- a/func-math.go
+++ b/func-math.go
@@ -10,7 +10,7 @@ import (
 )
 
 func checkNumberParamExpected(funcName string, paramValue any, paramPos, level, subPos int) (err error) {
-	if !(isNumber(paramValue) || isFraction(paramValue)) /*|| isList(paramValue)*/ {
+	if !(IsNumber(paramValue) || isFraction(paramValue)) /*|| isList(paramValue)*/ {
 		err = fmt.Errorf("%s(): param nr %d (%d in %d) has wrong type %T, number expected",
 			funcName, paramPos+1, subPos+1, level, paramValue)
 	}
@@ -45,7 +45,7 @@ func doAdd(ctx ExprContext, name string, it Iterator, count, level int) (result
 		count++
 
 		if !sumAsFloat {
-			if isFloat(v) {
+			if IsFloat(v) {
 				sumAsFloat = true
 				if sumAsFract {
 					floatSum = fractSum.toFloat()
@@ -120,7 +120,7 @@ func doMul(ctx ExprContext, name string, it Iterator, count, level int) (result
 		count++
 
 		if !mulAsFloat {
-			if isFloat(v) {
+			if IsFloat(v) {
 				mulAsFloat = true
 				if mulAsFract {
 					floatProd = fractProd.toFloat()
diff --git a/operator-builtin.go b/operator-builtin.go
index 4c2d5b1..187a9b2 100644
--- a/operator-builtin.go
+++ b/operator-builtin.go
@@ -26,7 +26,7 @@ func evalBuiltin(ctx ExprContext, self *term) (v any, err error) {
 	}
 
 	count := 0
-	if isString(childValue) {
+	if IsString(childValue) {
 		module, _ := childValue.(string)
 		count, err = ImportInContextByGlobPattern(ctx, module)
 	} else {
diff --git a/operator-fact.go b/operator-fact.go
index 27584b6..3f27823 100644
--- a/operator-fact.go
+++ b/operator-fact.go
@@ -25,7 +25,7 @@ func evalFact(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if isInteger(leftValue) {
+	if IsInteger(leftValue) {
 		if i, _ := leftValue.(int64); i >= 0 {
 			f := int64(1)
 			for k := int64(1); k <= i; k++ {
diff --git a/operator-include.go b/operator-include.go
index 3db3485..906b643 100644
--- a/operator-include.go
+++ b/operator-include.go
@@ -24,7 +24,7 @@ func evalInclude(ctx ExprContext, self *term) (v any, err error) {
 	}
 
 	count := 0
-	if isList(childValue) {
+	if IsList(childValue) {
 		list, _ := childValue.([]any)
 		for i, filePathSpec := range list {
 			if filePath, ok := filePathSpec.(string); ok {
@@ -39,7 +39,7 @@ func evalInclude(ctx ExprContext, self *term) (v any, err error) {
 				break
 			}
 		}
-	} else if isString(childValue) {
+	} else if IsString(childValue) {
 		filePath, _ := childValue.(string)
 		v, err = EvalFile(ctx, filePath)
 	} else {
diff --git a/operator-insert.go b/operator-insert.go
index dfe3836..bddf097 100644
--- a/operator-insert.go
+++ b/operator-insert.go
@@ -33,7 +33,7 @@ func evalInsert(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if isList(rightValue) {
+	if IsList(rightValue) {
 		list, _ := rightValue.(*ListType)
 		newList := append(ListType{leftValue}, *list...)
 		v = &newList
@@ -50,7 +50,7 @@ func evalAppend(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if isList(leftValue) {
+	if IsList(leftValue) {
 		list, _ := leftValue.(*ListType)
 		newList := append(*list, rightValue)
 		v = &newList
diff --git a/operator-length.go b/operator-length.go
index d37d2b3..04c6aad 100644
--- a/operator-length.go
+++ b/operator-length.go
@@ -23,10 +23,10 @@ func evalLength(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if isList(childValue) {
+	if IsList(childValue) {
 		list, _ := childValue.([]any)
 		v = int64(len(list))
-	} else if isString(childValue) {
+	} else if IsString(childValue) {
 		s, _ := childValue.(string)
 		v = int64(len(s))
 	} else if it, ok := childValue.(Iterator); ok {
diff --git a/operator-post-inc.go b/operator-post-inc.go
index 94f87f5..9cf553c 100644
--- a/operator-post-inc.go
+++ b/operator-post-inc.go
@@ -25,7 +25,7 @@ func evalPostInc(ctx ExprContext, self *term) (v any, err error) {
 
 	if it, ok := childValue.(Iterator); ok {
 		v, err = it.Next()
-	} else if isInteger(childValue) && self.children[0].symbol() == SymIdentifier {
+	} else if IsInteger(childValue) && self.children[0].symbol() == SymIdentifier {
 		v = childValue
 		i, _ := childValue.(int64)
 		ctx.SetVar(self.children[0].source(), i+1)
diff --git a/operator-prod.go b/operator-prod.go
index 950795a..b4deef4 100644
--- a/operator-prod.go
+++ b/operator-prod.go
@@ -30,12 +30,12 @@ func evalMultiply(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if isString(leftValue) && isInteger(rightValue) {
+	if IsString(leftValue) && IsInteger(rightValue) {
 		s, _ := leftValue.(string)
 		n, _ := rightValue.(int64)
 		v = strings.Repeat(s, int(n))
 	} else if isNumOrFract(leftValue) && isNumOrFract(rightValue) {
-		if isFloat(leftValue) || isFloat(rightValue) {
+		if IsFloat(leftValue) || IsFloat(rightValue) {
 			v = numAsFloat(leftValue) * numAsFloat(rightValue)
 		} else if isFraction(leftValue) || isFraction(rightValue) {
 			v, err = mulAnyFract(leftValue, rightValue)
@@ -72,7 +72,7 @@ func evalDivide(ctx ExprContext, self *term) (v any, err error) {
 	}
 
 	if isNumOrFract(leftValue) && isNumOrFract(rightValue) {
-		if isFloat(leftValue) || isFloat(rightValue) {
+		if IsFloat(leftValue) || IsFloat(rightValue) {
 			d := numAsFloat(rightValue)
 			if d == 0.0 {
 				err = errors.New("division by zero")
@@ -148,7 +148,7 @@ func evalReminder(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if isInteger(leftValue) && isInteger(rightValue) {
+	if IsInteger(leftValue) && IsInteger(rightValue) {
 		rightInt, _ := rightValue.(int64)
 		if rightInt == 0 {
 			err = errors.New("division by zero")
diff --git a/operator-rel.go b/operator-rel.go
index 761df89..1ffef42 100644
--- a/operator-rel.go
+++ b/operator-rel.go
@@ -25,15 +25,15 @@ func evalEqual(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if isNumber(leftValue) && isNumber(rightValue) {
-		if isInteger(leftValue) && isInteger(rightValue) {
+	if IsNumber(leftValue) && IsNumber(rightValue) {
+		if IsInteger(leftValue) && IsInteger(rightValue) {
 			li, _ := leftValue.(int64)
 			ri, _ := rightValue.(int64)
 			v = li == ri
 		} else {
 			v = numAsFloat(leftValue) == numAsFloat(rightValue)
 		}
-	} else if isString(leftValue) && isString(rightValue) {
+	} else if IsString(leftValue) && IsString(rightValue) {
 		ls, _ := leftValue.(string)
 		rs, _ := rightValue.(string)
 		v = ls == rs
@@ -111,15 +111,15 @@ func evalLess(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if isNumber(leftValue) && isNumber(rightValue) {
-		if isInteger(leftValue) && isInteger(rightValue) {
+	if IsNumber(leftValue) && IsNumber(rightValue) {
+		if IsInteger(leftValue) && IsInteger(rightValue) {
 			li, _ := leftValue.(int64)
 			ri, _ := rightValue.(int64)
 			v = li < ri
 		} else {
 			v = numAsFloat(leftValue) < numAsFloat(rightValue)
 		}
-	} else if isString(leftValue) && isString(rightValue) {
+	} else if IsString(leftValue) && IsString(rightValue) {
 		ls, _ := leftValue.(string)
 		rs, _ := rightValue.(string)
 		v = ls < rs
@@ -148,15 +148,15 @@ func evalLessEqual(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if isNumber(leftValue) && isNumber(rightValue) {
-		if isInteger(leftValue) && isInteger(rightValue) {
+	if IsNumber(leftValue) && IsNumber(rightValue) {
+		if IsInteger(leftValue) && IsInteger(rightValue) {
 			li, _ := leftValue.(int64)
 			ri, _ := rightValue.(int64)
 			v = li <= ri
 		} else {
 			v = numAsFloat(leftValue) <= numAsFloat(rightValue)
 		}
-	} else if isString(leftValue) && isString(rightValue) {
+	} else if IsString(leftValue) && IsString(rightValue) {
 		ls, _ := leftValue.(string)
 		rs, _ := rightValue.(string)
 		v = ls <= rs
diff --git a/operator-sign.go b/operator-sign.go
index d6a2ab1..768025b 100644
--- a/operator-sign.go
+++ b/operator-sign.go
@@ -35,14 +35,14 @@ func evalSign(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if isFloat(rightValue) {
+	if IsFloat(rightValue) {
 		if self.tk.Sym == SymChangeSign {
 			f, _ := rightValue.(float64)
 			v = -f
 		} else {
 			v = rightValue
 		}
-	} else if isInteger(rightValue) {
+	} else if IsInteger(rightValue) {
 		if self.tk.Sym == SymChangeSign {
 			i, _ := rightValue.(int64)
 			v = -i
diff --git a/operator-sum.go b/operator-sum.go
index 843a413..1c816e9 100644
--- a/operator-sum.go
+++ b/operator-sum.go
@@ -28,17 +28,17 @@ func evalPlus(ctx ExprContext, self *term) (v any, err error) {
 		return
 	}
 
-	if (isString(leftValue) && isNumberString(rightValue)) || (isString(rightValue) && isNumberString(leftValue)) {
+	if (IsString(leftValue) && isNumberString(rightValue)) || (IsString(rightValue) && isNumberString(leftValue)) {
 		v = fmt.Sprintf("%v%v", leftValue, rightValue)
-	} else if isNumber(leftValue) && isNumber(rightValue) {
-		if isFloat(leftValue) || isFloat(rightValue) {
+	} else if IsNumber(leftValue) && IsNumber(rightValue) {
+		if IsFloat(leftValue) || IsFloat(rightValue) {
 			v = numAsFloat(leftValue) + numAsFloat(rightValue)
 		} else {
 			leftInt, _ := leftValue.(int64)
 			rightInt, _ := rightValue.(int64)
 			v = leftInt + rightInt
 		}
-	} else if isList(leftValue) || isList(rightValue) {
+	} else if IsList(leftValue) || IsList(rightValue) {
 		var leftList, rightList *ListType
 		var ok bool
 		if leftList, ok = leftValue.(*ListType); !ok {
@@ -56,7 +56,7 @@ func evalPlus(ctx ExprContext, self *term) (v any, err error) {
 		}
 		v = &sumList
 	} else if isFraction(leftValue) || isFraction(rightValue) {
-		if isFloat(leftValue) || isFloat(rightValue) {
+		if IsFloat(leftValue) || IsFloat(rightValue) {
 			v = numAsFloat(leftValue) + numAsFloat(rightValue)
 		} else {
 			v, err = sumAnyFract(leftValue, rightValue)
@@ -87,7 +87,7 @@ func evalMinus(ctx ExprContext, self *term) (v any, err error) {
 	}
 
 	if isNumOrFract(leftValue) && isNumOrFract(rightValue) {
-		if isFloat(leftValue) || isFloat(rightValue) {
+		if IsFloat(leftValue) || IsFloat(rightValue) {
 			v = numAsFloat(leftValue) - numAsFloat(rightValue)
 		} else if isFraction(leftValue) || isFraction(rightValue) {
 			v, err = subAnyFract(leftValue, rightValue)
@@ -96,7 +96,7 @@ func evalMinus(ctx ExprContext, self *term) (v any, err error) {
 			rightInt, _ := rightValue.(int64)
 			v = leftInt - rightInt
 		}
-	} else if isList(leftValue) && isList(rightValue) {
+	} else if IsList(leftValue) && IsList(rightValue) {
 		leftList, _ := leftValue.(*ListType)
 		rightList, _ := rightValue.(*ListType)
 		diffList := make(ListType, 0, len(*leftList)-len(*rightList))
diff --git a/utils.go b/utils.go
index a0f6851..56ca6e3 100644
--- a/utils.go
+++ b/utils.go
@@ -9,41 +9,41 @@ import (
 	"reflect"
 )
 
-func isString(v any) (ok bool) {
+func IsString(v any) (ok bool) {
 	_, ok = v.(string)
 	return ok
 }
 
-func isInteger(v any) (ok bool) {
+func IsInteger(v any) (ok bool) {
 	_, ok = v.(int64)
 	return ok
 }
 
-func isFloat(v any) (ok bool) {
+func IsFloat(v any) (ok bool) {
 	_, ok = v.(float64)
 	return ok
 }
 
-func isList(v any) (ok bool) {
+func IsList(v any) (ok bool) {
 	_, ok = v.(*ListType)
 	return ok
 }
 
-func isDict(v any) (ok bool) {
+func IsDict(v any) (ok bool) {
 	_, ok = v.(map[any]any)
 	return ok
 }
 
-func isNumber(v any) (ok bool) {
-	return isFloat(v) || isInteger(v)
+func IsNumber(v any) (ok bool) {
+	return IsFloat(v) || IsInteger(v)
 }
 
 func isNumOrFract(v any) (ok bool) {
-	return isFloat(v) || isInteger(v) || isFraction(v)
+	return IsFloat(v) || IsInteger(v) || isFraction(v)
 }
 
 func isNumberString(v any) (ok bool) {
-	return isString(v) || isNumber(v)
+	return IsString(v) || IsNumber(v)
 }
 
 func isFunctor(v any) (ok bool) {