increased test coverage (83.9%)
This commit is contained in:
+23
-21
@@ -40,23 +40,7 @@ func evalContextValue(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error
|
||||
}
|
||||
|
||||
if sourceCtx != nil {
|
||||
if formatter, ok := sourceCtx.(kern.DictFormat); ok {
|
||||
v = formatter.ToDict()
|
||||
} else if formatter, ok := sourceCtx.(kern.Formatter); ok {
|
||||
v = formatter.ToString(0)
|
||||
} else {
|
||||
// keys := sourceCtx.EnumVars(func(name string) bool { return name[0] != '_' })
|
||||
keys := sourceCtx.EnumVars(nil)
|
||||
d := make(map[string]any)
|
||||
for _, key := range keys {
|
||||
d[key], _ = sourceCtx.GetVar(key)
|
||||
}
|
||||
keys = sourceCtx.EnumFuncs(func(name string) bool { return true })
|
||||
for _, key := range keys {
|
||||
d[key], _ = sourceCtx.GetFuncInfo(key)
|
||||
}
|
||||
v = d
|
||||
}
|
||||
v = contextToDict(sourceCtx)
|
||||
} else if childValue != nil {
|
||||
it, ok := childValue.(kern.Iterator)
|
||||
if !ok {
|
||||
@@ -64,18 +48,14 @@ func evalContextValue(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error
|
||||
}
|
||||
if err == nil {
|
||||
var item any
|
||||
// values := kern.NewListA()
|
||||
values := kern.NewLinkedListA()
|
||||
for item, err = it.Next(); err == nil; item, err = it.Next() {
|
||||
// values.AppendItem(item)
|
||||
values.PushBack(item)
|
||||
}
|
||||
if err == io.EOF {
|
||||
err = nil
|
||||
v = values
|
||||
}
|
||||
// } else {
|
||||
// err = opTerm.ErrIncompatiblePrefixPostfixType(childValue)
|
||||
}
|
||||
} else {
|
||||
err = opTerm.ErrIncompatiblePrefixPostfixType(childValue)
|
||||
@@ -83,6 +63,28 @@ func evalContextValue(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error
|
||||
return
|
||||
}
|
||||
|
||||
func contextToDict(ctx kern.ExprContext) (dict *kern.DictType) {
|
||||
// Variables
|
||||
keys := ctx.EnumVars(nil)
|
||||
vars := kern.MakeDict()
|
||||
for _, key := range keys {
|
||||
value, _ := ctx.GetVar(key)
|
||||
vars.SetItem(key, value)
|
||||
}
|
||||
// Functions
|
||||
keys = ctx.EnumFuncs(func(name string) bool { return true })
|
||||
funcs := kern.MakeDict()
|
||||
for _, key := range keys {
|
||||
funcInfo, _ := ctx.GetFuncInfo(key)
|
||||
funcs.SetItem(key, funcInfo)
|
||||
}
|
||||
|
||||
dict = kern.MakeDict()
|
||||
dict.SetItem("vars", vars)
|
||||
dict.SetItem("funcs", funcs)
|
||||
return
|
||||
}
|
||||
|
||||
// init
|
||||
func init() {
|
||||
scan.RegisterTermConstructor(scan.SymDoubleDollar, newContextTerm)
|
||||
|
||||
Reference in New Issue
Block a user