diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-02-01 19:26:59 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-02-01 19:26:59 +0000 |
commit | 9af4cb9545ce481b8d9d4a13acfe26512032e21b (patch) | |
tree | 7e7e6083ebe59999943a211a17f8ef6f07f17c2f /libgo/go/exp/ebnflint/ebnflint.go | |
parent | 6b6cd722f329a168f98d1f421834cf40bb33a77d (diff) | |
download | gcc-9af4cb9545ce481b8d9d4a13acfe26512032e21b.zip gcc-9af4cb9545ce481b8d9d4a13acfe26512032e21b.tar.gz gcc-9af4cb9545ce481b8d9d4a13acfe26512032e21b.tar.bz2 |
libgo: Update to weekly.2012-01-27.
From-SVN: r183810
Diffstat (limited to 'libgo/go/exp/ebnflint/ebnflint.go')
-rw-r--r-- | libgo/go/exp/ebnflint/ebnflint.go | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/libgo/go/exp/ebnflint/ebnflint.go b/libgo/go/exp/ebnflint/ebnflint.go index 6d6f516..2cb5aa6 100644 --- a/libgo/go/exp/ebnflint/ebnflint.go +++ b/libgo/go/exp/ebnflint/ebnflint.go @@ -11,6 +11,7 @@ import ( "fmt" "go/scanner" "go/token" + "io" "io/ioutil" "os" "path/filepath" @@ -76,34 +77,46 @@ func main() { flag.Parse() var ( - filename string - src []byte - err error + name string + r io.Reader ) switch flag.NArg() { case 0: - filename = "<stdin>" - src, err = ioutil.ReadAll(os.Stdin) + name, r = "<stdin>", os.Stdin case 1: - filename = flag.Arg(0) - src, err = ioutil.ReadFile(filename) + name = flag.Arg(0) default: usage() } - if err != nil { + + if err := verify(name, *start, r); err != nil { report(err) } +} - if filepath.Ext(filename) == ".html" || bytes.Index(src, open) >= 0 { - src = extractEBNF(src) +func verify(name, start string, r io.Reader) error { + if r == nil { + f, err := os.Open(name) + if err != nil { + return err + } + defer f.Close() + r = f } - grammar, err := ebnf.Parse(filename, bytes.NewBuffer(src)) + src, err := ioutil.ReadAll(r) if err != nil { - report(err) + return err } - if err = ebnf.Verify(grammar, *start); err != nil { - report(err) + if filepath.Ext(name) == ".html" || bytes.Index(src, open) >= 0 { + src = extractEBNF(src) + } + + grammar, err := ebnf.Parse(name, bytes.NewBuffer(src)) + if err != nil { + return err } + + return ebnf.Verify(grammar, start) } |