package parse import ( "errors" "github.com/goplus/llgo/chore/llcppg/ast" ) type Context struct { Files map[string]*ast.File } func NewContext() *Context { return &Context{ Files: make(map[string]*ast.File), } } // ProcessFiles processes the given files and adds them to the context func (p *Context) ProcessFiles(files []string) error { for _, file := range files { if err := p.processFile(file); err != nil { return err } } return nil } // parse file and add it to the context,avoid duplicate parsing func (p *Context) processFile(path string) error { if _, exists := p.Files[path]; exists { return nil } parsedfiles, err := p.parseFile(path) if err != nil { return errors.New("failed to parse file: " + path) } for path, file := range parsedfiles { if _, exist := p.Files[path]; !exist { p.Files[path] = file } } return nil } func (p *Context) parseFile(path string) (map[string]*ast.File, error) { converter, err := NewConverter(path, false) if err != nil { return nil, errors.New("failed to create converter " + path) } defer converter.Dispose() files, err := converter.Convert() if err != nil { return nil, err } return files, nil }