-
Notifications
You must be signed in to change notification settings - Fork 22
/
delegate.go
28 lines (26 loc) · 1.01 KB
/
delegate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package weave
import (
. "github.com/kocircuit/kocircuit/lang/circuit/eval"
. "github.com/kocircuit/kocircuit/lang/circuit/model"
. "github.com/kocircuit/kocircuit/lang/go/eval/symbol"
)
// delegate forwards invocation panics to its caller.
// errors in types are forwarded in the return value.
func (b *Weaver) delegate(delegated *Span, vty *VarietySymbol, fields Fields) (_ *WeaveStepResult, err error) {
if vty == nil {
return &WeaveStepResult{Returns: EmptySymbol{}, Effect: EmptySymbol{}}, nil
}
if stepResult, _, err := vty.Evoke(delegated, fields); err != nil {
return nil, err
} else {
returns, _, err := stepResult.Select(delegated, Path{"returns"})
if err != nil {
return nil, delegated.Errorf(err, "expecting a structure with a returns field")
}
effect, _, err := stepResult.Select(delegated, Path{"effect"})
if err != nil {
return nil, delegated.Errorf(err, "expecting a structure with an effect field")
}
return &WeaveStepResult{Returns: returns.(Symbol), Effect: effect.(Symbol)}, nil
}
}