Function buildActualParams moved from data-cursor.go ro function.go

This commit is contained in:
2024-07-31 09:08:58 +02:00
parent 9070b5c9cc
commit a46753f453
2 changed files with 32 additions and 19 deletions
+30 -4
View File
@@ -6,6 +6,7 @@ package expr
import (
"fmt"
"strconv"
"strings"
)
@@ -223,13 +224,17 @@ func (info *funcInfo) checkExistingParam(paramName string) (exists bool) {
return
}
func (info *funcInfo) initActualParams(ctx ExprContext, name string, callTerm *term) (params map[string]any, err error) {
func (info *funcInfo) initActualParams(ctx ExprContext, name string, callTerm *term) (actualParams map[string]any, err error) {
var varArgs []any
var varName string
namedParamsStarted := false
actualParams := make(map[string]any, len(info.formalParams))
actualParams = make(map[string]any, len(info.formalParams))
if callTerm == nil {
return
}
for i, tree := range callTerm.children {
var paramValue any
paramCtx := ctx.Clone()
@@ -268,7 +273,6 @@ func (info *funcInfo) initActualParams(ctx ExprContext, name string, callTerm *t
if varArgs != nil {
actualParams[varName] = varArgs
}
params = actualParams
}
return
}
@@ -319,7 +323,7 @@ func getAssignVarName(t *term) (name string, ok bool) {
return
}
func CallFunction3(parentCtx ExprContext, name string, callTerm *term) (result any, err error) {
func CallFunction(parentCtx ExprContext, name string, callTerm *term) (result any, err error) {
var actualParams map[string]any
if info, exists := GetFuncInfo(parentCtx, name); exists {
var ctx ExprContext
@@ -333,3 +337,25 @@ func CallFunction3(parentCtx ExprContext, name string, callTerm *term) (result a
}
return
}
func GetParam(args map[string]any, paramName string, paramNum int) (value any, exists bool) {
if value, exists = args[paramName]; !exists {
if paramNum > 0 && paramNum <= len(args) {
value, exists = args["arg"+strconv.Itoa(paramNum)]
}
}
return
}
func buildActualParams(functor Functor, args []any) (actualParams map[string]any) {
formalParams := functor.GetParams()
actualParams = make(map[string]any, len(args))
for i, arg := range args {
if i < len(formalParams) {
actualParams[formalParams[i].Name()] = arg
} else {
actualParams["arg"+strconv.Itoa(i+1)] = arg
}
}
return
}