summaryrefslogtreecommitdiff
path: root/src/pkg/go/parser/interface.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2009-07-29 17:01:09 -0700
committerRobert Griesemer <gri@golang.org>2009-07-29 17:01:09 -0700
commit53abf93013954216d6521b5a10a2202f7d7bcb36 (patch)
treefe5b6fe43fb4577157bd2c05385b8db29866ebcc /src/pkg/go/parser/interface.go
parent297317cfed550069aeb8442f968d5cdcec9908aa (diff)
downloadgolang-53abf93013954216d6521b5a10a2202f7d7bcb36.tar.gz
parser:
- Changed filter function for parser.ParsePackage to take an *os.Dir instead of a filename for more powerful filters - Removed TODO in ast.PackageInterface: Now collect package comments from all package files - Cleanups in godoc: Use the new ParsePackage and PackageInterface functions; as a result computing package information is much simpler now. R=rsc DELTA=285 (80 added, 110 deleted, 95 changed) OCL=32473 CL=32486
Diffstat (limited to 'src/pkg/go/parser/interface.go')
-rw-r--r--src/pkg/go/parser/interface.go19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/pkg/go/parser/interface.go b/src/pkg/go/parser/interface.go
index f3a46da40..5fa60c1cd 100644
--- a/src/pkg/go/parser/interface.go
+++ b/src/pkg/go/parser/interface.go
@@ -148,30 +148,31 @@ func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) {
// ParsePackage parses all files in the directory specified by path and
// returns an AST representing the package found. The set of files may be
// restricted by providing a non-nil filter function; only the files with
-// (path-local) filenames passing through the filter are considered. If
-// zero or more then one package is found, an error is returned. Mode
-// flags that control the amount of source text parsed are ignored.
+// os.Dir entries passing through the filter are considered.
+// 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(string) 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);
if err != nil {
return nil, err;
}
- list, err := fd.Readdirnames(-1);
+ list, err := fd.Readdir(-1);
if err != nil {
return nil, err;
}
name := "";
files := make(map[string]*ast.File);
- for _, filename := range list {
- if filter == nil || filter(filename) {
- src, err := ParsePkgFile(name, pathutil.Join(path, filename), mode);
+ for i := 0; i < len(list); i++ {
+ entry := &list[i];
+ if filter == nil || filter(entry) {
+ src, err := ParsePkgFile(name, pathutil.Join(path, entry.Name), mode);
if err != nil {
return nil, err;
}
- files[filename] = src;
+ files[entry.Name] = src;
if name == "" {
name = src.Name.Value;
}