operator-assign.go -- Fix: Assigning a functor to a collection's item didn't work

This commit is contained in:
Celestino Amoroso 2024-07-11 06:49:02 +02:00
parent d8aed9dd7a
commit 990e04f957

View File

@ -76,14 +76,18 @@ func evalAssign(ctx ExprContext, opTerm *term) (v any, err error) {
if v, err = rightChild.compute(ctx); err == nil { if v, err = rightChild.compute(ctx); err == nil {
if functor, ok := v.(Functor); ok { if functor, ok := v.(Functor); ok {
if info := functor.GetFunc(); info != nil { if leftSym == SymVariable {
ctx.RegisterFunc(leftTerm.source(), info.Functor(), info.ReturnType(), info.Params()) if info := functor.GetFunc(); info != nil {
} else if funcDef, ok := functor.(*exprFunctor); ok { ctx.RegisterFunc(leftTerm.source(), info.Functor(), info.ReturnType(), info.Params())
paramSpecs := ForAll(funcDef.params, func(p ExprFuncParam) ExprFuncParam { return p }) } else if funcDef, ok := functor.(*exprFunctor); ok {
paramSpecs := ForAll(funcDef.params, func(p ExprFuncParam) ExprFuncParam { return p })
ctx.RegisterFunc(leftTerm.source(), functor, TypeAny, paramSpecs) ctx.RegisterFunc(leftTerm.source(), functor, TypeAny, paramSpecs)
} else {
err = opTerm.Errorf("unknown function %s()", rightChild.source())
}
} else { } else {
err = opTerm.Errorf("unknown function %s()", rightChild.source()) err = assignValue(ctx, leftTerm, v)
} }
} else { } else {
err = assignValue(ctx, leftTerm, v) err = assignValue(ctx, leftTerm, v)