func Eval(src interface{}, globals map[string]interface{}, load LoadFunc) (map[string]interface{}, error) {
	dict, err := convert.MakeStringDict(globals)
	if err != nil {
		return nil, err
	}
	thread := &starlark.Thread{
		Load: load,
	}
	filename, ok := src.(string)
	if ok {
		dict, err = starlark.ExecFile(thread, filename, nil, dict)
	} else {
		dict, err = starlark.ExecFile(thread, "eval.sky", src, dict)
	}
	if err != nil {
		return nil, err
	}
	return convert.FromStringDict(dict), nil
}
Eval evaluates the starlark source with the given global variables. The type
of the argument for the src parameter must be string (filename), []byte, or io.Reader.
package starlight
import (
	"fmt"
	"io/ioutil"
	"path/filepath"
	"sync"
	"github.com/starlight-go/starlight/convert"
	"go.starlark.net/resolve"
	"go.starlark.net/starlark"
)
func init() {
	resolve.AllowNestedDef = true  
	resolve.AllowLambda = true     
	resolve.AllowFloat = true      
	resolve.AllowSet = true        
	resolve.AllowBitwise = true    
}
type LoadFunc func(thread *starlark.Thread, module string) (starlark.StringDict, error)