1
0
mirror of https://github.com/golang/go synced 2024-11-24 21:00:09 -07:00

go/parser: Use explicit parser.Mode type.

R=r, bradfitz
CC=golang-dev
https://golang.org/cl/5574058
This commit is contained in:
Robert Griesemer 2012-01-24 16:36:20 -08:00
parent 324513bc5f
commit e7d513eab0
5 changed files with 16 additions and 11 deletions

View File

@ -16,7 +16,7 @@ import (
"strings"
)
func parse(name string, flags uint) *ast.File {
func parse(name string, flags parser.Mode) *ast.File {
ast1, err := parser.ParseFile(fset, name, nil, flags)
if err != nil {
if list, ok := err.(scanner.ErrorList); ok {

View File

@ -17,7 +17,7 @@ import (
"path/filepath"
)
func parseFile(fset *token.FileSet, filename string, mode uint) (*ast.File, error) {
func parseFile(fset *token.FileSet, filename string, mode parser.Mode) (*ast.File, error) {
src, err := ReadFile(fs, filename)
if err != nil {
return nil, err

View File

@ -44,7 +44,7 @@ var (
fset = token.NewFileSet()
exitCode = 0
rewrite func(*ast.File) *ast.File
parserMode uint
parserMode parser.Mode
printerMode uint
)
@ -60,7 +60,7 @@ func usage() {
}
func initParserMode() {
parserMode = uint(0)
parserMode = parser.Mode(0)
if *comments {
parserMode |= parser.ParseComments
}

View File

@ -45,12 +45,14 @@ func readSource(filename string, src interface{}) ([]byte, error) {
return ioutil.ReadFile(filename)
}
// The mode parameter to the Parse* functions is a set of flags (or 0).
// A Mode value is a set of flags (or 0).
// They control the amount of source code parsed and other optional
// parser functionality.
//
type Mode uint
const (
PackageClauseOnly uint = 1 << iota // parsing stops after package clause
PackageClauseOnly Mode = 1 << iota // parsing stops after package clause
ImportsOnly // parsing stops after import declarations
ParseComments // parse comments and add them to AST
Trace // print a trace of parsed productions
@ -77,7 +79,7 @@ const (
// representing the fragments of erroneous source code). Multiple errors
// are returned via a scanner.ErrorList which is sorted by file position.
//
func ParseFile(fset *token.FileSet, filename string, src interface{}, mode uint) (*ast.File, error) {
func ParseFile(fset *token.FileSet, filename string, src interface{}, mode Mode) (*ast.File, error) {
text, err := readSource(filename, src)
if err != nil {
return nil, err
@ -97,7 +99,7 @@ func ParseFile(fset *token.FileSet, filename string, src interface{}, mode uint)
// returned. If a parse error occurred, a non-nil but incomplete map and the
// first error encountered are returned.
//
func ParseDir(fset *token.FileSet, path string, filter func(os.FileInfo) bool, mode uint) (pkgs map[string]*ast.Package, first error) {
func ParseDir(fset *token.FileSet, path string, filter func(os.FileInfo) bool, mode Mode) (pkgs map[string]*ast.Package, first error) {
fd, err := os.Open(path)
if err != nil {
return nil, err
@ -117,7 +119,10 @@ func ParseDir(fset *token.FileSet, path string, filter func(os.FileInfo) bool, m
name := src.Name.Name
pkg, found := pkgs[name]
if !found {
pkg = &ast.Package{name, nil, nil, make(map[string]*ast.File)}
pkg = &ast.Package{
Name: name,
Files: make(map[string]*ast.File),
}
pkgs[name] = pkg
}
pkg.Files[filename] = src

View File

@ -23,7 +23,7 @@ type parser struct {
scanner scanner.Scanner
// Tracing/debugging
mode uint // parsing mode
mode Mode // parsing mode
trace bool // == (mode & Trace != 0)
indent uint // indentation used for tracing output
@ -52,7 +52,7 @@ type parser struct {
targetStack [][]*ast.Ident // stack of unresolved labels
}
func (p *parser) init(fset *token.FileSet, filename string, src []byte, mode uint) {
func (p *parser) init(fset *token.FileSet, filename string, src []byte, mode Mode) {
p.file = fset.AddFile(filename, fset.Base(), len(src))
var m uint
if mode&ParseComments != 0 {