Files
moxa/interp/hooks.go
Marc Vertes a83ec1f925 fix: allow yaegi command to interpret itself
Since the introduction of restricted stdlib and syscall symbols, the
capability of yaegi to interpret itself was broken.
The use of unrestricted symbols is now also controlled by environment
variables, to allow propagation accross nested interpreters.
The interpreter Panic symbol was not wrapped, this is fixed now.
the import path resolution was failing if the working directory was
outside of GOPATH.
The documentation and readme have been ajusted.

Fixes #890.
2020-10-09 11:48:04 +02:00

29 lines
621 B
Go

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
}