lang: funcs: simple, simplepoly, operator: Misc fix ups for lambdas
These core functions need some small fixups to bring us up to our lambdas branch. Co-authored-by: Samuel Gélineau <gelisam@gmail.com>
This commit is contained in:
@@ -883,10 +883,27 @@ func (obj *OperatorFunc) Stream(ctx context.Context) error {
|
||||
}
|
||||
obj.last = input // store for next
|
||||
|
||||
// programming error safety check...
|
||||
programmingError := false
|
||||
keys := []string{}
|
||||
for k := range input.Struct() {
|
||||
keys = append(keys, k)
|
||||
if !util.StrInList(k, obj.Type.Ord) {
|
||||
programmingError = true
|
||||
}
|
||||
}
|
||||
if programmingError {
|
||||
return fmt.Errorf("bad args, got: %v, want: %v", keys, obj.Type.Ord)
|
||||
}
|
||||
|
||||
// build up arg list
|
||||
args := []types.Value{}
|
||||
for _, name := range obj.Type.Ord {
|
||||
v := input.Struct()[name]
|
||||
v, exists := input.Struct()[name]
|
||||
if !exists {
|
||||
// programming error
|
||||
return fmt.Errorf("function engine was early, missing arg: %s", name)
|
||||
}
|
||||
if name == operatorArgName {
|
||||
op = v.Str()
|
||||
continue // skip over the operator arg
|
||||
@@ -895,7 +912,8 @@ func (obj *OperatorFunc) Stream(ctx context.Context) error {
|
||||
}
|
||||
|
||||
if op == "" {
|
||||
return fmt.Errorf("operator cannot be empty")
|
||||
// programming error
|
||||
return fmt.Errorf("operator cannot be empty, args: %v", keys)
|
||||
}
|
||||
// operator selection is dynamic now, although mostly it
|
||||
// should not change... to do so is probably uncommon...
|
||||
|
||||
@@ -84,7 +84,7 @@ type WrappedFunc struct {
|
||||
// String returns a simple name for this function. This is needed so this struct
|
||||
// can satisfy the pgraph.Vertex interface.
|
||||
func (obj *WrappedFunc) String() string {
|
||||
return fmt.Sprintf("%s@%p", obj.Name, obj) // be more unique!
|
||||
return fmt.Sprintf("%s @ %p", obj.Name, obj) // be more unique!
|
||||
}
|
||||
|
||||
// ArgGen returns the Nth arg name for this function.
|
||||
|
||||
@@ -149,7 +149,7 @@ type WrappedFunc struct {
|
||||
// String returns a simple name for this function. This is needed so this struct
|
||||
// can satisfy the pgraph.Vertex interface.
|
||||
func (obj *WrappedFunc) String() string {
|
||||
return fmt.Sprintf("%s@%p", obj.Name, obj) // be more unique!
|
||||
return fmt.Sprintf("%s @ %p", obj.Name, obj) // be more unique!
|
||||
}
|
||||
|
||||
// ArgGen returns the Nth arg name for this function.
|
||||
@@ -501,9 +501,8 @@ func (obj *WrappedFunc) buildFunction(typ *types.Type, ix int) *types.Type {
|
||||
panic("unexpected type")
|
||||
}
|
||||
obj.fn = fn
|
||||
if obj.fn.T == nil { // XXX: should this even ever happen? What about argnames here?
|
||||
// FIXME: if obj.fn.T == nil {} // occasionally this is nil, is it a bug?
|
||||
obj.fn.T = typ.Copy() // overwrites any contained "variant" type
|
||||
}
|
||||
|
||||
return obj.fn.T
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user