github.com/euank/go@v0.0.0-20160829210321-495514729181/src/cmd/compile/internal/syntax/syntax.go (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package syntax 6 7 import ( 8 "fmt" 9 "io" 10 "os" 11 ) 12 13 type Mode uint 14 15 type ErrorHandler func(pos, line int, msg string) 16 17 // TODO(gri) These need a lot more work. 18 19 func ReadFile(filename string, errh ErrorHandler, mode Mode) (*File, error) { 20 src, err := os.Open(filename) 21 if err != nil { 22 return nil, err 23 } 24 defer src.Close() 25 return Read(src, errh, mode) 26 } 27 28 type bytesReader struct { 29 data []byte 30 } 31 32 func (r *bytesReader) Read(p []byte) (int, error) { 33 if len(r.data) > 0 { 34 n := copy(p, r.data) 35 r.data = r.data[n:] 36 return n, nil 37 } 38 return 0, io.EOF 39 } 40 41 func ReadBytes(src []byte, errh ErrorHandler, mode Mode) (*File, error) { 42 return Read(&bytesReader{src}, errh, mode) 43 } 44 45 func Read(src io.Reader, errh ErrorHandler, mode Mode) (*File, error) { 46 var p parser 47 p.init(src, errh) 48 49 p.next() 50 ast := p.file() 51 52 if errh == nil && p.nerrors > 0 { 53 return nil, fmt.Errorf("%d syntax errors", p.nerrors) 54 } 55 56 return ast, nil 57 } 58 59 func Write(w io.Writer, n *File) error { 60 panic("unimplemented") 61 }