1
0
mirror of https://github.com/golang/go synced 2024-11-25 03:57:56 -07:00

Don't ignore flags controlling the amount of source code parsed

in parser's ParsePkgFile and ParsePackage functions.

R=rsc
CC=golang-dev, rog
https://golang.org/cl/180070
This commit is contained in:
Robert Griesemer 2009-12-16 14:12:24 -08:00
parent 42a2e95989
commit b6bac1c0a5
2 changed files with 10 additions and 10 deletions

View File

@ -135,8 +135,7 @@ func ParseFile(filename string, src interface{}, mode uint) (*ast.File, os.Error
// ParsePkgFile parses the file specified by filename and returns the // ParsePkgFile parses the file specified by filename and returns the
// corresponding AST. If the file cannot be read, has syntax errors, or // corresponding AST. If the file cannot be read, has syntax errors, or
// does not belong to the package (i.e., pkgname != "" and the package // does not belong to the package (i.e., pkgname != "" and the package
// name in the file doesn't match pkkname), an error is returned. Mode // name in the file doesn't match pkkname), an error is returned.
// flags that control the amount of source text parsed are ignored.
// //
func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) { func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) {
src, err := ioutil.ReadFile(filename) src, err := ioutil.ReadFile(filename)
@ -152,10 +151,12 @@ func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) {
if prog.Name.Value != pkgname { if prog.Name.Value != pkgname {
return nil, os.NewError(fmt.Sprintf("multiple packages found: %s, %s", prog.Name.Value, pkgname)) return nil, os.NewError(fmt.Sprintf("multiple packages found: %s, %s", prog.Name.Value, pkgname))
} }
if mode == PackageClauseOnly {
return prog, nil
}
} }
// ignore flags that control partial parsing return ParseFile(filename, src, mode)
return ParseFile(filename, src, mode&^(PackageClauseOnly|ImportsOnly))
} }
@ -164,7 +165,6 @@ func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) {
// restricted by providing a non-nil filter function; only the files with // restricted by providing a non-nil filter function; only the files with
// os.Dir entries passing through the filter are considered. // os.Dir entries passing through the filter are considered.
// If ParsePackage does not find exactly one package, it returns an error. // If ParsePackage does not find exactly one package, it returns an error.
// Mode flags that control the amount of source text parsed are ignored.
// //
func ParsePackage(path string, filter func(*os.Dir) bool, mode uint) (*ast.Package, os.Error) { func ParsePackage(path string, filter func(*os.Dir) bool, mode uint) (*ast.Package, os.Error) {
fd, err := os.Open(path, os.O_RDONLY, 0) fd, err := os.Open(path, os.O_RDONLY, 0)

View File

@ -135,8 +135,7 @@ func ParseFile(filename string, src interface{}, mode uint) (*ast.File, os.Error
// ParsePkgFile parses the file specified by filename and returns the // ParsePkgFile parses the file specified by filename and returns the
// corresponding AST. If the file cannot be read, has syntax errors, or // corresponding AST. If the file cannot be read, has syntax errors, or
// does not belong to the package (i.e., pkgname != "" and the package // does not belong to the package (i.e., pkgname != "" and the package
// name in the file doesn't match pkkname), an error is returned. Mode // name in the file doesn't match pkkname), an error is returned.
// flags that control the amount of source text parsed are ignored.
// //
func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) { func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) {
src, err := ioutil.ReadFile(filename) src, err := ioutil.ReadFile(filename)
@ -152,10 +151,12 @@ func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) {
if prog.Name.Value != pkgname { if prog.Name.Value != pkgname {
return nil, os.NewError(fmt.Sprintf("multiple packages found: %s, %s", prog.Name.Value, pkgname)) return nil, os.NewError(fmt.Sprintf("multiple packages found: %s, %s", prog.Name.Value, pkgname))
} }
if mode == PackageClauseOnly {
return prog, nil
}
} }
// ignore flags that control partial parsing return ParseFile(filename, src, mode)
return ParseFile(filename, src, mode&^(PackageClauseOnly|ImportsOnly))
} }
@ -164,7 +165,6 @@ func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) {
// restricted by providing a non-nil filter function; only the files with // restricted by providing a non-nil filter function; only the files with
// os.Dir entries passing through the filter are considered. // os.Dir entries passing through the filter are considered.
// If ParsePackage does not find exactly one package, it returns an error. // If ParsePackage does not find exactly one package, it returns an error.
// Mode flags that control the amount of source text parsed are ignored.
// //
func ParsePackage(path string, filter func(*os.Dir) bool, mode uint) (*ast.Package, os.Error) { func ParsePackage(path string, filter func(*os.Dir) bool, mode uint) (*ast.Package, os.Error) {
fd, err := os.Open(path, os.O_RDONLY, 0) fd, err := os.Open(path, os.O_RDONLY, 0)