refactored data-types to reduce plugin sizes
This commit is contained in:
+14
-12
@@ -7,6 +7,8 @@ package expr
|
||||
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/array"
|
||||
"git.portale-stac.it/go-pkg/expr/types/dict"
|
||||
"git.portale-stac.it/go-pkg/expr/util"
|
||||
)
|
||||
|
||||
@@ -44,7 +46,7 @@ func evalDeepCopyAssign(ctx kern.ExprContext, opTerm *scan.Term) (v any, err err
|
||||
|
||||
func assignCollectionItem(ctx kern.ExprContext, collectionTerm, keyListTerm *scan.Term, value any) (err error) {
|
||||
var collectionValue, keyListValue, keyValue any
|
||||
var keyList *kern.ListType
|
||||
var keyList *array.ListType
|
||||
var ok bool
|
||||
|
||||
if collectionValue, err = collectionTerm.Compute(ctx); err != nil {
|
||||
@@ -53,7 +55,7 @@ func assignCollectionItem(ctx kern.ExprContext, collectionTerm, keyListTerm *sca
|
||||
|
||||
if keyListValue, err = keyListTerm.Compute(ctx); err != nil {
|
||||
return
|
||||
} else if keyList, ok = keyListValue.(*kern.ListType); !ok || len(*keyList) != 1 {
|
||||
} else if keyList, ok = keyListValue.(*array.ListType); !ok || len(*keyList) != 1 {
|
||||
err = keyListTerm.Errorf("index/key specification expected, got %v [%s]", keyListValue, kern.TypeName(keyListValue))
|
||||
return
|
||||
}
|
||||
@@ -63,13 +65,13 @@ func assignCollectionItem(ctx kern.ExprContext, collectionTerm, keyListTerm *sca
|
||||
}
|
||||
|
||||
switch collection := collectionValue.(type) {
|
||||
case *kern.ListType:
|
||||
case *array.ListType:
|
||||
if index, ok := keyValue.(int64); ok {
|
||||
err = collection.SetItem(index, value)
|
||||
} else {
|
||||
err = keyListTerm.Errorf("integer expected, got %v [%s]", keyValue, kern.TypeName(keyValue))
|
||||
}
|
||||
case *kern.DictType:
|
||||
case *dict.DictType:
|
||||
collection.SetItem(keyValue, value)
|
||||
default:
|
||||
err = collectionTerm.Errorf("collection expected")
|
||||
@@ -92,7 +94,7 @@ func assignValue(ctx kern.ExprContext, leftTerm *scan.Term, v any, deepCopy bool
|
||||
func evalAssignDictItem(ctx kern.ExprContext, dotTerm *scan.Term, valueTerm kern.Term) (v any, err error) {
|
||||
var ok bool
|
||||
var dictAny, dotKey any
|
||||
var dict *kern.DictType
|
||||
var dt *dict.DictType
|
||||
|
||||
if err = dotTerm.CheckOperands(); err != nil {
|
||||
return
|
||||
@@ -102,8 +104,8 @@ func evalAssignDictItem(ctx kern.ExprContext, dotTerm *scan.Term, valueTerm kern
|
||||
if dictAny, err = dotLeftTerm.Compute(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
if dict, ok = dictAny.(*kern.DictType); !ok {
|
||||
err = dotTerm.Tk.ErrorExpectedGot(kern.DictTypeName)
|
||||
if dt, ok = dictAny.(*dict.DictType); !ok {
|
||||
err = dotTerm.Tk.ErrorExpectedGot(dict.DictTypeName)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -119,7 +121,7 @@ func evalAssignDictItem(ctx kern.ExprContext, dotTerm *scan.Term, valueTerm kern
|
||||
return
|
||||
}
|
||||
|
||||
dict.SetItem(dotKey, v)
|
||||
dt.SetItem(dotKey, v)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -178,7 +180,7 @@ func newOpAssignTerm(tk *scan.Token) (inst *scan.Term) {
|
||||
|
||||
func getCollectionItemValue(ctx kern.ExprContext, collectionTerm, keyListTerm *scan.Term) (value any, err error) {
|
||||
var collectionValue, keyListValue, keyValue any
|
||||
var keyList *kern.ListType
|
||||
var keyList *array.ListType
|
||||
var ok bool
|
||||
|
||||
if collectionValue, err = collectionTerm.Compute(ctx); err != nil {
|
||||
@@ -187,7 +189,7 @@ func getCollectionItemValue(ctx kern.ExprContext, collectionTerm, keyListTerm *s
|
||||
|
||||
if keyListValue, err = keyListTerm.Compute(ctx); err != nil {
|
||||
return
|
||||
} else if keyList, ok = keyListValue.(*kern.ListType); !ok || len(*keyList) != 1 {
|
||||
} else if keyList, ok = keyListValue.(*array.ListType); !ok || len(*keyList) != 1 {
|
||||
err = keyListTerm.Errorf("index/key specification expected, got %v [%s]", keyListValue, kern.TypeName(keyListValue))
|
||||
return
|
||||
}
|
||||
@@ -197,13 +199,13 @@ func getCollectionItemValue(ctx kern.ExprContext, collectionTerm, keyListTerm *s
|
||||
}
|
||||
|
||||
switch collection := collectionValue.(type) {
|
||||
case *kern.ListType:
|
||||
case *array.ListType:
|
||||
if index, ok := keyValue.(int64); ok {
|
||||
value = (*collection)[index]
|
||||
} else {
|
||||
err = keyListTerm.Errorf("integer expected, got %v [%s]", keyValue, kern.TypeName(keyValue))
|
||||
}
|
||||
case *kern.DictType:
|
||||
case *dict.DictType:
|
||||
value = (*collection)[keyValue]
|
||||
default:
|
||||
err = collectionTerm.Errorf("collection expected")
|
||||
|
||||
Reference in New Issue
Block a user