diff --git a/provider/golang/registry.go b/provider/golang/registry.go index 21d024f61..72f0bcf23 100644 --- a/provider/golang/registry.go +++ b/provider/golang/registry.go @@ -8,13 +8,6 @@ import ( "github.com/traefik/yaegi/interp" ) -const Imports = `import ( - "fmt" - "math" - "strings" - "time" -)` - var ( mu sync.Mutex registry = make(map[string]*interp.Interpreter) @@ -31,14 +24,10 @@ func RegisteredVM(name, init string) (*interp.Interpreter, error) { // create new VM if !ok { vm = interp.New(interp.Options{}) - if err := vm.Use(stdlib.Symbols); err != nil { return nil, err } - - if _, err := vm.Eval(Imports); err != nil { - return nil, err - } + vm.ImportUsed() if init != "" { if _, err := vm.Eval(init); err != nil { diff --git a/tariff/embed.go b/tariff/embed.go index c9c523a39..effc0213a 100644 --- a/tariff/embed.go +++ b/tariff/embed.go @@ -5,7 +5,6 @@ import ( "fmt" "time" - "github.com/evcc-io/evcc/provider/golang" "github.com/evcc-io/evcc/provider/golang/stdlib" "github.com/traefik/yaegi/interp" ) @@ -29,35 +28,24 @@ func (t *embed) init() (err error) { return nil } - vm := interp.New(interp.Options{}) - if err := vm.Use(stdlib.Symbols); err != nil { - return err - } - - if _, err := vm.Eval(fmt.Sprintf(`%s - var ( - price float64 - charges float64 = %f - tax float64 = %f - ts time.Time - )`, golang.Imports, t.Charges, t.Tax)); err != nil { - return err - } - - prg, err := vm.Compile(t.Formula) - if err != nil { - return err - } - t.calc = func(price float64, ts time.Time) (float64, error) { + vm := interp.New(interp.Options{}) + if err := vm.Use(stdlib.Symbols); err != nil { + return 0, err + } + vm.ImportUsed() + if _, err := vm.Eval(fmt.Sprintf(` - price = %f + var ( + price float64 = %f + charges float64 = %f + tax float64 = %f ts = time.Unix(%d, 0).Local() - `, price, ts.Unix())); err != nil { + )`, price, t.Charges, t.Tax, ts.Unix())); err != nil { return 0, err } - res, err := vm.Execute(prg) + res, err := vm.Eval(t.Formula) if err != nil { return 0, err }