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 interp
import "reflect"
// convertFn is the signature of a symbol converter.
type convertFn func(from, to reflect.Type) func(src, dest reflect.Value)
// hooks are external symbol bindings.
type hooks struct {
convert []convertFn
}
func (h *hooks) Parse(m map[string]reflect.Value) {
if con, ok := getConvertFn(m["convert"]); ok {
h.convert = append(h.convert, con)
}
}
func getConvertFn(v reflect.Value) (convertFn, bool) {
if !v.IsValid() {
return nil, false
}
fn, ok := v.Interface().(func(from, to reflect.Type) func(src, dest reflect.Value))
if !ok {
return nil, false
}
return fn, true
}
|