55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
|
// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
|
||
|
// All rights reserved.
|
||
|
|
||
|
// global-context.go
|
||
|
package expr
|
||
|
|
||
|
import "path/filepath"
|
||
|
|
||
|
var globalCtx *SimpleFuncStore
|
||
|
|
||
|
func ImportInContext(name string) (exists bool) {
|
||
|
var mod *module
|
||
|
if mod, exists = moduleRegister[name]; exists {
|
||
|
mod.importFunc(globalCtx)
|
||
|
mod.imported = true
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func ImportInContextByGlobPattern(pattern string) (count int, err error) {
|
||
|
var matched bool
|
||
|
for name, mod := range moduleRegister {
|
||
|
if matched, err = filepath.Match(pattern, name); err == nil {
|
||
|
if matched {
|
||
|
count++
|
||
|
mod.importFunc(globalCtx)
|
||
|
mod.imported = true
|
||
|
}
|
||
|
} else {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func GetVar(ctx ExprContext, name string) (value any, exists bool) {
|
||
|
if value, exists = ctx.GetVar(name); !exists {
|
||
|
value, exists = globalCtx.GetVar(name)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func GetFuncInfo(ctx ExprContext, name string) (item ExprFunc, exists bool, ownerCtx ExprContext) {
|
||
|
if item, exists = ctx.GetFuncInfo(name); exists {
|
||
|
ownerCtx = ctx
|
||
|
} else if item, exists = globalCtx.GetFuncInfo(name); exists {
|
||
|
ownerCtx = globalCtx
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func init() {
|
||
|
globalCtx = NewSimpleFuncStore()
|
||
|
}
|