function definition and usage rationalized

This commit is contained in:
2024-05-24 06:28:48 +02:00
parent d545a35acf
commit e5f63c3d9d
16 changed files with 342 additions and 251 deletions
+9 -8
View File
@@ -34,14 +34,15 @@ func evalAssign(ctx ExprContext, self *term) (v any, err error) {
funcName := rightChild.source()
if info, exists, _ := GetFuncInfo(ctx, funcName); exists {
// ctx.RegisterFuncInfo(info)
ctx.RegisterFunc2(leftTerm.source(), info.Functor(), info.ReturnType(), info.Params())
} else if funcDef, ok := functor.(*funcDefFunctor); ok {
paramCount := len(funcDef.params)
paramSpecs := make([]ExprFuncParam, paramCount)
for i := range paramSpecs {
paramSpecs[i] = newFuncParam(funcDef.params[i])
}
ctx.RegisterFunc2(leftTerm.source(), functor, typeAny, paramSpecs)
ctx.RegisterFunc(leftTerm.source(), info.Functor(), info.ReturnType(), info.Params())
} else if funcDef, ok := functor.(*exprFunctor); ok {
paramSpecs := ForAll(funcDef.params, newFuncParam)
// paramCount := len(funcDef.params)
// paramSpecs := make([]ExprFuncParam, paramCount)
// for i := range paramSpecs {
// paramSpecs[i] = newFuncParam(funcDef.params[i])
// }
ctx.RegisterFunc(leftTerm.source(), functor, typeAny, paramSpecs)
} else {
err = self.Errorf("unknown function %s()", funcName)
}