lang: Don't block the engine for empty values
If the user passed an empty list or map, we should send that and not block. This also includes a simple test to ensure this keeps working.
This commit is contained in:
@@ -119,6 +119,20 @@ func (obj *CompositeFunc) Stream() error {
|
|||||||
select {
|
select {
|
||||||
case input, ok := <-obj.init.Input:
|
case input, ok := <-obj.init.Input:
|
||||||
if !ok {
|
if !ok {
|
||||||
|
obj.init.Input = nil // don't infinite loop back
|
||||||
|
|
||||||
|
if obj.last == nil {
|
||||||
|
// FIXME: can we get an empty struct?
|
||||||
|
result := obj.Type.New() // new list or map
|
||||||
|
obj.result = result
|
||||||
|
select {
|
||||||
|
case obj.init.Output <- result: // send
|
||||||
|
// pass
|
||||||
|
case <-obj.closeChan:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil // can't output any more
|
return nil // can't output any more
|
||||||
}
|
}
|
||||||
//if err := input.Type().Cmp(obj.Info().Sig.Input); err != nil {
|
//if err := input.Type().Cmp(obj.Info().Sig.Input); err != nil {
|
||||||
|
|||||||
1
lang/interpret_test/TestAstFunc2/empty-list.output
Normal file
1
lang/interpret_test/TestAstFunc2/empty-list.output
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Vertex: test[name]
|
||||||
5
lang/interpret_test/TestAstFunc2/empty-list/main.mcl
Normal file
5
lang/interpret_test/TestAstFunc2/empty-list/main.mcl
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# make sure the engine works with empty values
|
||||||
|
test "name" {
|
||||||
|
slicestring => [], # empty list
|
||||||
|
mapintfloat => {}, # empty map
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user