From 94ad968d5e32e13a21d7ba8393469af42d9579e1 Mon Sep 17 00:00:00 2001 From: Celestino Amoroso Date: Sun, 31 Mar 2024 05:06:24 +0200 Subject: [PATCH] ast.go: presetting of system variables before starting evaluation process --- ast.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/ast.go b/ast.go index 1927549..bf2215c 100644 --- a/ast.go +++ b/ast.go @@ -79,9 +79,44 @@ func (self *ast) insert(tree, node *term) (root *term, err error) { func (self *ast) eval(ctx exprContext) (result any, err error) { if self.root != nil { + initDefaultVars(ctx) result, err = self.root.compute(ctx) } else { err = errors.New("empty expression") } return } + +// Preset variables +const ( + preset_bool_shortcut = "_bool_shortcut" +) + +func initDefaultVars(ctx exprContext) { + ctx.SetValue(preset_bool_shortcut, true) +} + +func enable(ctx exprContext, name string) { + if strings.HasPrefix(name, "_") { + ctx.SetValue(name, true) + } else { + ctx.SetValue("_"+name, true) + } +} + +func disable(ctx exprContext, name string) { + if strings.HasPrefix(name, "_") { + ctx.SetValue(name, false) + } else { + ctx.SetValue("_"+name, false) + } +} + +func isEnabled(ctx exprContext, name string) (status bool) { + if v, exists := ctx.GetValue(name); exists { + if b, ok := v.(bool); ok { + status = b + } + } + return +}