//===- parser.go - parser wrapper -----------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains functions for calling the parser in an appropriate way for // llgo. // //===----------------------------------------------------------------------===// package driver import ( "fmt" "go/ast" "go/parser" "go/scanner" "go/token" ) func parseFile(fset *token.FileSet, filename string) (*ast.File, error) { // Retain comments; this is important for annotation processing. mode := parser.DeclarationErrors | parser.ParseComments return parser.ParseFile(fset, filename, nil, mode) } func ParseFiles(fset *token.FileSet, filenames []string) ([]*ast.File, error) { files := make([]*ast.File, len(filenames)) for i, filename := range filenames { file, err := parseFile(fset, filename) if _, ok := err.(scanner.ErrorList); ok { return nil, err } else if err != nil { return nil, fmt.Errorf("%q: %v", filename, err) } files[i] = file } return files, nil }