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
|
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
|
// build up arg list
|
||||||
args := []types.Value{}
|
args := []types.Value{}
|
||||||
for _, name := range obj.Type.Ord {
|
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 {
|
if name == operatorArgName {
|
||||||
op = v.Str()
|
op = v.Str()
|
||||||
continue // skip over the operator arg
|
continue // skip over the operator arg
|
||||||
@@ -895,7 +912,8 @@ func (obj *OperatorFunc) Stream(ctx context.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if op == "" {
|
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
|
// operator selection is dynamic now, although mostly it
|
||||||
// should not change... to do so is probably uncommon...
|
// 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
|
// String returns a simple name for this function. This is needed so this struct
|
||||||
// can satisfy the pgraph.Vertex interface.
|
// can satisfy the pgraph.Vertex interface.
|
||||||
func (obj *WrappedFunc) String() string {
|
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.
|
// 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
|
// String returns a simple name for this function. This is needed so this struct
|
||||||
// can satisfy the pgraph.Vertex interface.
|
// can satisfy the pgraph.Vertex interface.
|
||||||
func (obj *WrappedFunc) String() string {
|
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.
|
// 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")
|
panic("unexpected type")
|
||||||
}
|
}
|
||||||
obj.fn = fn
|
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
|
obj.fn.T = typ.Copy() // overwrites any contained "variant" type
|
||||||
}
|
|
||||||
|
|
||||||
return obj.fn.T
|
return obj.fn.T
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user