diff --git a/operator-context.go b/operator-context.go index 4ee4685..20b1e1d 100644 --- a/operator-context.go +++ b/operator-context.go @@ -31,16 +31,20 @@ func evalContextValue(ctx ExprContext, self *term) (v any, err error) { } if sourceCtx != nil { - keys := sourceCtx.EnumVars(func(name string) bool { return name[0] != '_' }) - d := make(map[string]any) - for _, key := range keys { - d[key], _ = sourceCtx.GetVar(key) + if formatter, ok := ctx.(Formatter); ok { + v = formatter.ToString(0) + } else { + keys := sourceCtx.EnumVars(func(name string) bool { return name[0] != '_' }) + 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 } - keys = sourceCtx.EnumFuncs(func(name string) bool { return true }) - for _, key := range keys { - d[key], _ =sourceCtx.GetFuncInfo(key) - } - v = d } else { err = self.errIncompatibleType(childValue) }