Files
moxa/interp/src.go
2018-07-24 16:32:08 +02:00

51 lines
1.0 KiB
Go

package interp
import (
"go/build"
"io/ioutil"
"log"
"os"
"path/filepath"
)
func (interp *Interpreter) importSrcFile(path string) {
dir := pkgDir(path)
files, err := ioutil.ReadDir(dir)
if err != nil {
log.Fatal(err)
}
for _, file := range files {
name := file.Name()
if len(name) <= 3 || name[len(name)-3:] != ".go" {
continue
}
if len(name) > 8 && name[len(name)-8:] == "_test.go" {
continue
}
buf, err := ioutil.ReadFile(filepath.Join(dir, name))
if err != nil {
log.Fatal(err)
}
pkgName := interp.Eval(string(buf))
if _, ok := interp.context[pkgName]; !ok {
interp.context[pkgName] = PkgContext{NodeMap: NodeMap{}}
}
}
}
func pkgDir(path string) string {
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
dir = filepath.Join(dir, "vendor", path)
if _, err := os.Stat(dir); err == nil {
return dir
}
dir = filepath.Join(build.Default.GOPATH, "src", path)
if _, err := os.Stat(dir); err != nil {
log.Fatal(err)
}
return dir
}