refactored data-types to reduce plugin sizes

This commit is contained in:
2026-06-08 07:02:56 +02:00
parent fec7cc546c
commit b6da9bcad4
90 changed files with 1039 additions and 803 deletions
+23 -18
View File
@@ -9,6 +9,11 @@ import (
"git.portale-stac.it/go-pkg/expr/kern"
"git.portale-stac.it/go-pkg/expr/scan"
"git.portale-stac.it/go-pkg/expr/types"
"git.portale-stac.it/go-pkg/expr/types/array"
"git.portale-stac.it/go-pkg/expr/types/boolean"
"git.portale-stac.it/go-pkg/expr/types/fract"
"git.portale-stac.it/go-pkg/expr/types/str"
)
//-------- equal term
@@ -26,22 +31,22 @@ func newEqualTerm(tk *scan.Token) (inst *scan.Term) {
// type deepFuncTemplate func(a, b any) (eq bool, err error)
func equals(a, b any, deepCmp kern.DeepFuncTemplate) (eq bool, err error) {
if kern.IsNumOrFract(a) && kern.IsNumOrFract(b) {
if kern.IsNumber(a) && kern.IsNumber(b) {
if kern.IsInteger(a) && kern.IsInteger(b) {
if types.IsNumOrFract(a) && types.IsNumOrFract(b) {
if types.IsNumber(a) && types.IsNumber(b) {
if types.IsInteger(a) && types.IsInteger(b) {
li, _ := a.(int64)
ri, _ := b.(int64)
eq = li == ri
} else {
eq = kern.NumAsFloat(a) == kern.NumAsFloat(b)
eq = types.NumAsFloat(a) == types.NumAsFloat(b)
}
} else {
var cmp int
if cmp, err = kern.CmpAnyFract(a, b); err == nil {
if cmp, err = fract.CmpAnyFract(a, b); err == nil {
eq = cmp == 0
}
}
} else if deepCmp != nil && kern.IsList(a) && kern.IsList(b) {
} else if deepCmp != nil && array.IsList(a) && array.IsList(b) {
eq, err = deepCmp(a, b)
} else {
eq = reflect.DeepEqual(a, b)
@@ -75,7 +80,7 @@ func newNotEqualTerm(tk *scan.Token) (inst *scan.Term) {
func evalNotEqual(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
if v, err = evalEqual(ctx, opTerm); err == nil {
b, _ := kern.ToBool(v)
b, _ := boolean.ToBool(v)
v = !b
}
return
@@ -94,29 +99,29 @@ func newLessTerm(tk *scan.Token) (inst *scan.Term) {
}
func lessThan(self *scan.Term, a, b any) (isLess bool, err error) {
if kern.IsNumOrFract(a) && kern.IsNumOrFract(b) {
if kern.IsNumber(a) && kern.IsNumber(b) {
if kern.IsInteger(a) && kern.IsInteger(b) {
if types.IsNumOrFract(a) && types.IsNumOrFract(b) {
if types.IsNumber(a) && types.IsNumber(b) {
if types.IsInteger(a) && types.IsInteger(b) {
li, _ := a.(int64)
ri, _ := b.(int64)
isLess = li < ri
} else {
isLess = kern.NumAsFloat(a) < kern.NumAsFloat(b)
isLess = types.NumAsFloat(a) < types.NumAsFloat(b)
}
} else {
var cmp int
if cmp, err = kern.CmpAnyFract(a, b); err == nil {
if cmp, err = fract.CmpAnyFract(a, b); err == nil {
isLess = cmp < 0
}
}
} else if kern.IsString(a) && kern.IsString(b) {
} else if str.IsString(a) && str.IsString(b) {
ls, _ := a.(string)
rs, _ := b.(string)
isLess = ls < rs
// Inclusion test
} else if kern.IsList(a) && kern.IsList(b) {
aList, _ := a.(*kern.ListType)
bList, _ := b.(*kern.ListType)
} else if array.IsList(a) && array.IsList(b) {
aList, _ := a.(*array.ListType)
bList, _ := b.(*array.ListType)
isLess = len(*aList) < len(*bList) && bList.Contains(aList)
} else {
err = self.ErrIncompatibleTypes(a, b)
@@ -149,8 +154,8 @@ func newLessEqualTerm(tk *scan.Token) (inst *scan.Term) {
func lessThanOrEqual(self *scan.Term, a, b any) (isLessEq bool, err error) {
if isLessEq, err = lessThan(self, a, b); err == nil {
if !isLessEq {
if kern.IsList(a) && kern.IsList(b) {
isLessEq, err = kern.SameContent(a, b)
if array.IsList(a) && array.IsList(b) {
isLessEq, err = array.SameContent(a, b)
} else {
isLessEq, err = equals(a, b, nil)
}