Operator '@@' (export-all) added. Experimental include() function also added
This commit is contained in:
+19
-4
@@ -36,15 +36,16 @@ func evalFuncCall(parentCtx exprContext, self *term) (v any, err error) {
|
||||
}
|
||||
if err == nil {
|
||||
if v, err = ctx.Call(name, params); err == nil {
|
||||
exportAll := isEnabled(ctx, control_export_all)
|
||||
// Export variables
|
||||
for _, refName := range ctx.EnumVars(func(name string) bool { return name[0] == '@' }) {
|
||||
for _, refName := range ctx.EnumVars(func(name string) bool { return exportAll || name[0] == '@' }) {
|
||||
refValue, _ := ctx.GetVar(refName)
|
||||
parentCtx.SetVar(refName[1:], refValue)
|
||||
exportVar(parentCtx, refName, refValue)
|
||||
}
|
||||
// Export functions
|
||||
for _, refName := range ctx.EnumFuncs(func(name string) bool { return name[0] == '@' }) {
|
||||
for _, refName := range ctx.EnumFuncs(func(name string) bool { return exportAll || name[0] == '@' }) {
|
||||
if info := ctx.GetFuncInfo(refName); info != nil {
|
||||
parentCtx.RegisterFunc(refName[1:], info.Functor(), info.MinArgs(), info.MaxArgs())
|
||||
exportFunc(parentCtx, refName, info)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -52,6 +53,20 @@ func evalFuncCall(parentCtx exprContext, self *term) (v any, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func exportVar(ctx exprContext, name string, value any) {
|
||||
if name[0] == '@' {
|
||||
name = name[1:]
|
||||
}
|
||||
ctx.SetVar(name, value)
|
||||
}
|
||||
|
||||
func exportFunc(ctx exprContext, name string, info exprFunc) {
|
||||
if name[0] == '@' {
|
||||
name = name[1:]
|
||||
}
|
||||
ctx.RegisterFunc(name, info.Functor(), info.MinArgs(), info.MaxArgs())
|
||||
}
|
||||
|
||||
// -------- function definition term
|
||||
func newFuncDefTerm(tk *Token, args []*term) *term {
|
||||
return &term{
|
||||
|
||||
Reference in New Issue
Block a user