func (l *lang) Prepare( src map[string]*build8.File, importer build8.Importer, ) []*lex8.Error { importer.Import("$", "asm/builtin", nil) if f := build8.OnlyFile(src); f != nil { return listImport(f.Path, f, importer, l.golike) } f := src["import.g"] if f == nil { return nil } return listImport(f.Path, f, importer, l.golike) }
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 listImport( f string, rc io.ReadCloser, imp build8.Importer, ) []*lex8.Error { astFile, es := parse.File(f, rc) if es != nil { return es } if astFile.Imports == nil { return nil } log := lex8.NewErrorList() impDecl := resolveImportDecl(log, astFile.Imports) if es := log.Errs(); es != nil { return es } for as, stmt := range impDecl.stmts { imp.Import(as, stmt.path, stmt.Path.Pos) } return nil }
func (bareFunc) Prepare( src map[string]*build8.File, importer build8.Importer, ) []*lex8.Error { importer.Import("$", "asm/builtin", nil) return nil }