forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
| //===- parser.go - parser wrapper -----------------------------------------===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // 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
 | |
| }
 |