changed the structer of the selector components: now all case are a list value assigned as right operand of the selector operator

This commit is contained in:
2024-04-13 10:10:25 +02:00
parent efd9af9030
commit 70cdb9367e
4 changed files with 119 additions and 13 deletions
+37 -4
View File
@@ -5,11 +5,15 @@
package expr
// -------- list term
func newListTermA(args ...*term) *term {
return newListTerm(args)
}
func newListTerm(args []*term) *term {
return &term{
tk: *NewToken(0, 0, SymList, "[]"),
tk: *NewValueToken(0, 0, SymList, "[]", args),
parent: nil,
children: args,
children: nil,
position: posLeaf,
priority: priValue,
evalFunc: evalList,
@@ -18,8 +22,9 @@ func newListTerm(args []*term) *term {
// -------- list func
func evalList(ctx ExprContext, self *term) (v any, err error) {
items := make([]any, len(self.children))
for i, tree := range self.children {
list, _ := self.value().([]*term)
items := make([]any, len(list))
for i, tree := range list {
var param any
if param, err = tree.compute(ctx); err != nil {
break
@@ -31,3 +36,31 @@ func evalList(ctx ExprContext, self *term) (v any, err error) {
}
return
}
// // -------- list term
// func newListTerm(args []*term) *term {
// return &term{
// tk: *NewToken(0, 0, SymList, "[]"),
// parent: nil,
// children: args,
// position: posLeaf,
// priority: priValue,
// evalFunc: evalList,
// }
// }
// // -------- list func
// func evalList(ctx ExprContext, self *term) (v any, err error) {
// items := make([]any, len(self.children))
// for i, tree := range self.children {
// var param any
// if param, err = tree.compute(ctx); err != nil {
// break
// }
// items[i] = param
// }
// if err == nil {
// v = items
// }
// return
// }