func listImport( f string, rc io.ReadCloser, imp build8.Importer, golike bool, ) []*lex8.Error { fast, _, es := parse.File(f, rc, golike) if es != nil { return es } if fast.Imports == nil { return nil } m := make(map[string]*importDecl) log := lex8.NewErrorList() for _, d := range fast.Imports.Decls { p, as, e := ast.ImportPathAs(d) if e != nil { log.Errorf(d.Path.Pos, "invalid path string %s", d.Path.Lit) continue } pos := ast.ImportPos(d) if other, found := m[as]; found { log.Errorf(pos, "%s already imported", as) log.Errorf(other.pos, " previously imported here") continue } m[as] = &importDecl{as: as, path: p, pos: pos} } if errs := log.Errs(); errs != nil { return errs } for as, d := range m { imp.Import(as, d.path, d.pos) } return nil }
func buildImports( b *builder, f *ast.File, imps map[string]*build8.Package, ) []*sym8.Symbol { if f.Imports == nil { return nil } var ret []*sym8.Symbol for _, d := range f.Imports.Decls { _, as, e := ast.ImportPathAs(d) if e != nil { b.Errorf(d.Path.Pos, "invalid import path") continue } p := imps[as] if p == nil { b.Errorf(d.Path.Pos, "package %s missing", as) continue } pos := ast.ImportPos(d) if !(p.Lang == "asm8" || p.Lang == "g8") { b.Errorf(pos, "cannot import %q pacakge %q", p.Lang, as, ) continue } t := &types.Pkg{as, p.Lang, p.Symbols} sym := sym8.Make(b.path, as, tast.SymImport, nil, t, pos) conflict := b.scope.Declare(sym) if conflict != nil { b.Errorf(pos, "%s already imported", as) continue } ret = append(ret, sym) } return ret }