moved scanner sources to package 'scan'
This commit is contained in:
+25
-24
@@ -9,25 +9,26 @@ import (
|
||||
"strings"
|
||||
|
||||
"git.portale-stac.it/go-pkg/expr/kern"
|
||||
"git.portale-stac.it/go-pkg/expr/scan"
|
||||
)
|
||||
|
||||
// -------- iterator term
|
||||
|
||||
func newIteratorTerm(tk *Token, args []*term) *term {
|
||||
tk.Sym = SymIterator
|
||||
return &term{
|
||||
tk: *tk,
|
||||
parent: nil,
|
||||
children: args,
|
||||
position: posLeaf,
|
||||
priority: priValue,
|
||||
evalFunc: evalIterator,
|
||||
func newIteratorTerm(tk *scan.Token, args []*scan.Term) *scan.Term {
|
||||
tk.Sym = scan.SymIterator
|
||||
return &scan.Term{
|
||||
Tk: *tk,
|
||||
Parent: nil,
|
||||
Children: args,
|
||||
Position: scan.PosLeaf,
|
||||
Priority: scan.PriValue,
|
||||
EvalFunc: evalIterator,
|
||||
}
|
||||
}
|
||||
|
||||
// -------- eval iterator
|
||||
|
||||
func evalTermArray(ctx kern.ExprContext, terms []*term) (values []any, err error) {
|
||||
func evalTermArray(ctx kern.ExprContext, terms []*scan.Term) (values []any, err error) {
|
||||
values = make([]any, len(terms))
|
||||
for i, t := range terms {
|
||||
var value any
|
||||
@@ -40,17 +41,17 @@ func evalTermArray(ctx kern.ExprContext, terms []*term) (values []any, err error
|
||||
return
|
||||
}
|
||||
|
||||
func evalFirstChild(ctx kern.ExprContext, iteratorTerm *term) (value any, err error) {
|
||||
if len(iteratorTerm.children) < 1 || iteratorTerm.children[0] == nil {
|
||||
func evalFirstChild(ctx kern.ExprContext, iteratorTerm *scan.Term) (value any, err error) {
|
||||
if len(iteratorTerm.Children) < 1 || iteratorTerm.Children[0] == nil {
|
||||
err = iteratorTerm.Errorf("missing the data-source parameter")
|
||||
return
|
||||
}
|
||||
|
||||
value, err = iteratorTerm.children[0].Compute(ctx)
|
||||
value, err = iteratorTerm.Children[0].Compute(ctx)
|
||||
return
|
||||
}
|
||||
|
||||
func getDataSourceDict(iteratorTerm *term, firstChildValue any) (ds map[string]kern.Functor, err error) {
|
||||
func getDataSourceDict(iteratorTerm *scan.Term, firstChildValue any) (ds map[string]kern.Functor, err error) {
|
||||
if dictAny, ok := firstChildValue.(*kern.DictType); ok {
|
||||
requiredFields := []string{kern.NextName}
|
||||
fieldsMask := 0b1
|
||||
@@ -74,13 +75,13 @@ func getDataSourceDict(iteratorTerm *term, firstChildValue any) (ds map[string]k
|
||||
missingFields = append(missingFields, field)
|
||||
}
|
||||
}
|
||||
err = iteratorTerm.children[0].Errorf("the data-source must provide a non-nil %q operator(s)", strings.Join(missingFields, ", "))
|
||||
err = iteratorTerm.Children[0].Errorf("the data-source must provide a non-nil %q operator(s)", strings.Join(missingFields, ", "))
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func evalIterator(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
func evalIterator(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
|
||||
var firstChildValue any
|
||||
var ds map[string]kern.Functor
|
||||
|
||||
@@ -100,8 +101,8 @@ func evalIterator(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
if initFunc, exists := ds[kern.InitName]; exists && initFunc != nil {
|
||||
var args []any
|
||||
var resource any
|
||||
if len(opTerm.children) > 1 {
|
||||
if args, err = evalTermArray(ctx, opTerm.children[1:]); err != nil {
|
||||
if len(opTerm.Children) > 1 {
|
||||
if args, err = evalTermArray(ctx, opTerm.Children[1:]); err != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
@@ -124,33 +125,33 @@ func evalIterator(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
} else {
|
||||
if dictIt, ok := firstChildValue.(*kern.DictType); ok {
|
||||
var args []any
|
||||
if args, err = evalSibling(ctx, opTerm.children, nil); err == nil {
|
||||
if args, err = evalSibling(ctx, opTerm.Children, nil); err == nil {
|
||||
v, err = NewDictIterator(dictIt, args)
|
||||
}
|
||||
} else {
|
||||
err = opTerm.children[0].Errorf("the data-source must be a dictionary")
|
||||
err = opTerm.Children[0].Errorf("the data-source must be a dictionary")
|
||||
}
|
||||
}
|
||||
} else if list, ok := firstChildValue.(*kern.ListType); ok {
|
||||
var args []any
|
||||
if args, err = evalSibling(ctx, opTerm.children, nil); err == nil {
|
||||
if args, err = evalSibling(ctx, opTerm.Children, nil); err == nil {
|
||||
v = NewListIterator(list, args)
|
||||
}
|
||||
} else if intVal, ok := firstChildValue.(int64); ok {
|
||||
var args []any
|
||||
if args, err = evalSibling(ctx, opTerm.children, intVal); err == nil {
|
||||
if args, err = evalSibling(ctx, opTerm.Children, intVal); err == nil {
|
||||
v, err = NewIntIterator(args)
|
||||
}
|
||||
} else {
|
||||
var list []any
|
||||
if list, err = evalSibling(ctx, opTerm.children, firstChildValue); err == nil {
|
||||
if list, err = evalSibling(ctx, opTerm.Children, firstChildValue); err == nil {
|
||||
v = NewArrayIterator(list)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func evalSibling(ctx kern.ExprContext, terms []*term, firstChildValue any) (list []any, err error) {
|
||||
func evalSibling(ctx kern.ExprContext, terms []*scan.Term, firstChildValue any) (list []any, err error) {
|
||||
items := make([]any, 0, len(terms))
|
||||
for i, tree := range terms {
|
||||
var param any
|
||||
|
||||
Reference in New Issue
Block a user