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.
29 lines
621 B
Go
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
|
|
}
|