1
0
mirror of https://github.com/golang/go synced 2024-07-08 12:18:55 +00:00

non-pkg: gofix -r error -force=error

R=golang-dev, iant, r, r
CC=golang-dev
https://golang.org/cl/5307066
This commit is contained in:
Russ Cox 2011-11-01 22:06:05 -04:00
parent eb6929299b
commit 44526cdbe0
63 changed files with 300 additions and 320 deletions

View File

@ -1,9 +1,9 @@
package main package main
import ( import (
"errors"
"http" "http"
"io/ioutil" "io/ioutil"
"os"
"regexp" "regexp"
"template" "template"
) )
@ -13,12 +13,12 @@ type Page struct {
Body []byte Body []byte
} }
func (p *Page) save() os.Error { func (p *Page) save() error {
filename := p.Title + ".txt" filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600) return ioutil.WriteFile(filename, p.Body, 0600)
} }
func loadPage(title string) (*Page, os.Error) { func loadPage(title string) (*Page, error) {
filename := title + ".txt" filename := title + ".txt"
body, err := ioutil.ReadFile(filename) body, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {
@ -61,21 +61,21 @@ func saveHandler(w http.ResponseWriter, r *http.Request) {
p := &Page{Title: title, Body: []byte(body)} p := &Page{Title: title, Body: []byte(body)}
err = p.save() err = p.save()
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
http.Redirect(w, r, "/view/"+title, http.StatusFound) http.Redirect(w, r, "/view/"+title, http.StatusFound)
} }
func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) { func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) {
t, err := template.ParseFile(tmpl+".html") t, err := template.ParseFile(tmpl + ".html")
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
err = t.Execute(w, p) err = t.Execute(w, p)
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
} }
} }
@ -83,11 +83,11 @@ const lenPath = len("/view/")
var titleValidator = regexp.MustCompile("^[a-zA-Z0-9]+$") var titleValidator = regexp.MustCompile("^[a-zA-Z0-9]+$")
func getTitle(w http.ResponseWriter, r *http.Request) (title string, err os.Error) { func getTitle(w http.ResponseWriter, r *http.Request) (title string, err error) {
title = r.URL.Path[lenPath:] title = r.URL.Path[lenPath:]
if !titleValidator.MatchString(title) { if !titleValidator.MatchString(title) {
http.NotFound(w, r) http.NotFound(w, r)
err = os.NewError("Invalid Page Title") err = errors.New("Invalid Page Title")
} }
return return
} }

View File

@ -3,7 +3,6 @@ package main
import ( import (
"http" "http"
"io/ioutil" "io/ioutil"
"os"
"template" "template"
) )
@ -12,12 +11,12 @@ type Page struct {
Body []byte Body []byte
} }
func (p *Page) save() os.Error { func (p *Page) save() error {
filename := p.Title + ".txt" filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600) return ioutil.WriteFile(filename, p.Body, 0600)
} }
func loadPage(title string) (*Page, os.Error) { func loadPage(title string) (*Page, error) {
filename := title + ".txt" filename := title + ".txt"
body, err := ioutil.ReadFile(filename) body, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {

View File

@ -3,7 +3,6 @@ package main
import ( import (
"http" "http"
"io/ioutil" "io/ioutil"
"os"
"regexp" "regexp"
"template" "template"
) )
@ -13,12 +12,12 @@ type Page struct {
Body []byte Body []byte
} }
func (p *Page) save() os.Error { func (p *Page) save() error {
filename := p.Title + ".txt" filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600) return ioutil.WriteFile(filename, p.Body, 0600)
} }
func loadPage(title string) (*Page, os.Error) { func loadPage(title string) (*Page, error) {
filename := title + ".txt" filename := title + ".txt"
body, err := ioutil.ReadFile(filename) body, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {
@ -49,7 +48,7 @@ func saveHandler(w http.ResponseWriter, r *http.Request, title string) {
p := &Page{Title: title, Body: []byte(body)} p := &Page{Title: title, Body: []byte(body)}
err := p.save() err := p.save()
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
http.Redirect(w, r, "/view/"+title, http.StatusFound) http.Redirect(w, r, "/view/"+title, http.StatusFound)
@ -58,12 +57,12 @@ func saveHandler(w http.ResponseWriter, r *http.Request, title string) {
func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) { func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) {
t, err := template.ParseFile(tmpl+".html", nil) t, err := template.ParseFile(tmpl+".html", nil)
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
err = t.Execute(w, p) err = t.Execute(w, p)
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
} }
} }

View File

@ -3,7 +3,6 @@ package main
import ( import (
"http" "http"
"io/ioutil" "io/ioutil"
"os"
"template" "template"
) )
@ -12,12 +11,12 @@ type Page struct {
Body []byte Body []byte
} }
func (p *Page) save() os.Error { func (p *Page) save() error {
filename := p.Title + ".txt" filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600) return ioutil.WriteFile(filename, p.Body, 0600)
} }
func loadPage(title string) (*Page, os.Error) { func loadPage(title string) (*Page, error) {
filename := title + ".txt" filename := title + ".txt"
body, err := ioutil.ReadFile(filename) body, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {

View File

@ -3,7 +3,6 @@ package main
import ( import (
"http" "http"
"io/ioutil" "io/ioutil"
"os"
"regexp" "regexp"
"template" "template"
) )
@ -13,12 +12,12 @@ type Page struct {
Body []byte Body []byte
} }
func (p *Page) save() os.Error { func (p *Page) save() error {
filename := p.Title + ".txt" filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600) return ioutil.WriteFile(filename, p.Body, 0600)
} }
func loadPage(title string) (*Page, os.Error) { func loadPage(title string) (*Page, error) {
filename := title + ".txt" filename := title + ".txt"
body, err := ioutil.ReadFile(filename) body, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {
@ -49,7 +48,7 @@ func saveHandler(w http.ResponseWriter, r *http.Request, title string) {
p := &Page{Title: title, Body: []byte(body)} p := &Page{Title: title, Body: []byte(body)}
err := p.save() err := p.save()
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
http.Redirect(w, r, "/view/"+title, http.StatusFound) http.Redirect(w, r, "/view/"+title, http.StatusFound)
@ -59,7 +58,7 @@ var templates = make(map[string]*template.Template)
func init() { func init() {
for _, tmpl := range []string{"edit", "view"} { for _, tmpl := range []string{"edit", "view"} {
t := template.Must(template.ParseFile(tmpl+".html")) t := template.Must(template.ParseFile(tmpl + ".html"))
templates[tmpl] = t templates[tmpl] = t
} }
} }
@ -67,7 +66,7 @@ func init() {
func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) { func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) {
err := templates[tmpl].Execute(w, p) err := templates[tmpl].Execute(w, p)
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
} }
} }

View File

@ -32,7 +32,7 @@ func main() {
log.Fatal("no url supplied") log.Fatal("no url supplied")
} }
var r *http.Response var r *http.Response
var err os.Error var err error
if *post != "" { if *post != "" {
b := strings.NewReader(*post) b := strings.NewReader(*post)
r, err = http.Post(url, "application/x-www-form-urlencoded", b) r, err = http.Post(url, "application/x-www-form-urlencoded", b)

View File

@ -98,7 +98,7 @@ But what about persistent storage? We can address that by creating a
</p> </p>
<pre> <pre>
func (p *Page) save() os.Error { func (p *Page) save() error {
filename := p.Title + &#34;.txt&#34; filename := p.Title + &#34;.txt&#34;
return ioutil.WriteFile(filename, p.Body, 0600) return ioutil.WriteFile(filename, p.Body, 0600)
} }
@ -165,7 +165,7 @@ function to return <code>*Page</code> and <code>os.Error</code>.
</p> </p>
<pre> <pre>
func loadPage(title string) (*Page, os.Error) { func loadPage(title string) (*Page, error) {
filename := title + &#34;.txt&#34; filename := title + &#34;.txt&#34;
body, err := ioutil.ReadFile(filename) body, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {
@ -645,12 +645,12 @@ First, let's handle the errors in <code>renderTemplate</code>:
func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) { func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) {
t, err := template.ParseFile(tmpl+&#34;.html&#34;, nil) t, err := template.ParseFile(tmpl+&#34;.html&#34;, nil)
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
err = t.Execute(w, p) err = t.Execute(w, p)
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
} }
} }
</pre> </pre>
@ -675,7 +675,7 @@ func saveHandler(w http.ResponseWriter, r *http.Request) {
p := &amp;Page{Title: title, Body: []byte(body)} p := &amp;Page{Title: title, Body: []byte(body)}
err = p.save() err = p.save()
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
http.Redirect(w, r, &#34;/view/&#34;+title, http.StatusFound) http.Redirect(w, r, &#34;/view/&#34;+title, http.StatusFound)
@ -741,7 +741,7 @@ the <code>Execute</code> method on the appropriate <code>Template</code> from
func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) { func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) {
err := templates[tmpl].Execute(w, p) err := templates[tmpl].Execute(w, p)
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
} }
} }
</pre> </pre>
@ -777,11 +777,11 @@ URL, and tests it against our <code>TitleValidator</code> expression:
</p> </p>
<pre> <pre>
func getTitle(w http.ResponseWriter, r *http.Request) (title string, err os.Error) { func getTitle(w http.ResponseWriter, r *http.Request) (title string, err error) {
title = r.URL.Path[lenPath:] title = r.URL.Path[lenPath:]
if !titleValidator.MatchString(title) { if !titleValidator.MatchString(title) {
http.NotFound(w, r) http.NotFound(w, r)
err = os.NewError(&#34;Invalid Page Title&#34;) err = errors.New(&#34;Invalid Page Title&#34;)
} }
return return
} }
@ -833,7 +833,7 @@ func saveHandler(w http.ResponseWriter, r *http.Request) {
p := &amp;Page{Title: title, Body: []byte(body)} p := &amp;Page{Title: title, Body: []byte(body)}
err = p.save() err = p.save()
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
http.Redirect(w, r, &#34;/view/&#34;+title, http.StatusFound) http.Redirect(w, r, &#34;/view/&#34;+title, http.StatusFound)
@ -958,7 +958,7 @@ func saveHandler(w http.ResponseWriter, r *http.Request, title string) {
p := &amp;Page{Title: title, Body: []byte(body)} p := &amp;Page{Title: title, Body: []byte(body)}
err := p.save() err := p.save()
if err != nil { if err != nil {
http.Error(w, err.String(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
http.Redirect(w, r, &#34;/view/&#34;+title, http.StatusFound) http.Redirect(w, r, &#34;/view/&#34;+title, http.StatusFound)

View File

@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"http" "http"
"io/ioutil" "io/ioutil"
"os"
) )
type Page struct { type Page struct {
@ -12,12 +11,12 @@ type Page struct {
Body []byte Body []byte
} }
func (p *Page) save() os.Error { func (p *Page) save() error {
filename := p.Title + ".txt" filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600) return ioutil.WriteFile(filename, p.Body, 0600)
} }
func loadPage(title string) (*Page, os.Error) { func loadPage(title string) (*Page, error) {
filename := title + ".txt" filename := title + ".txt"
body, err := ioutil.ReadFile(filename) body, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {

View File

@ -3,7 +3,6 @@ package main
import ( import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os"
) )
type Page struct { type Page struct {
@ -11,7 +10,7 @@ type Page struct {
Body []byte Body []byte
} }
func (p *Page) save() os.Error { func (p *Page) save() error {
filename := p.Title + ".txt" filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600) return ioutil.WriteFile(filename, p.Body, 0600)
} }

View File

@ -3,7 +3,6 @@ package main
import ( import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os"
) )
type Page struct { type Page struct {
@ -11,12 +10,12 @@ type Page struct {
Body []byte Body []byte
} }
func (p *Page) save() os.Error { func (p *Page) save() error {
filename := p.Title + ".txt" filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600) return ioutil.WriteFile(filename, p.Body, 0600)
} }
func loadPage(title string) (*Page, os.Error) { func loadPage(title string) (*Page, error) {
filename := title + ".txt" filename := title + ".txt"
body, err := ioutil.ReadFile(filename) body, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {

View File

@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"http" "http"
"io/ioutil" "io/ioutil"
"os"
) )
type Page struct { type Page struct {
@ -12,12 +11,12 @@ type Page struct {
Body []byte Body []byte
} }
func (p *Page) save() os.Error { func (p *Page) save() error {
filename := p.Title + ".txt" filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600) return ioutil.WriteFile(filename, p.Body, 0600)
} }
func loadPage(title string) (*Page, os.Error) { func loadPage(title string) (*Page, error) {
filename := title + ".txt" filename := title + ".txt"
body, err := ioutil.ReadFile(filename) body, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {

View File

@ -71,7 +71,7 @@ func (r *Resource) Poll() string {
if err != nil { if err != nil {
log.Println("Error", r.url, err) log.Println("Error", r.url, err)
r.errCount++ r.errCount++
return err.String() return err.Error()
} }
r.errCount = 0 r.errCount = 0
return resp.Status return resp.Status

View File

@ -556,7 +556,7 @@ The <code>newFile</code> function was not exported because it's internal. The pr
exported factory to use is <code>OpenFile</code> (we'll explain that name in a moment): exported factory to use is <code>OpenFile</code> (we'll explain that name in a moment):
<p> <p>
<pre><!--{{code "progs/file.go" `/func.OpenFile/` `/^}/`}} <pre><!--{{code "progs/file.go" `/func.OpenFile/` `/^}/`}}
-->func OpenFile(name string, mode int, perm uint32) (file *File, err os.Error) { -->func OpenFile(name string, mode int, perm uint32) (file *File, err error) {
r, e := syscall.Open(name, mode, perm) r, e := syscall.Open(name, mode, perm)
if e != 0 { if e != 0 {
err = os.Errno(e) err = os.Errno(e)
@ -603,13 +603,13 @@ the tricky standard arguments to open and, especially, to create a file:
O_TRUNC = syscall.O_TRUNC O_TRUNC = syscall.O_TRUNC
) )
func Open(name string) (file *File, err os.Error) { func Open(name string) (file *File, err error) {
return OpenFile(name, O_RDONLY, 0) return OpenFile(name, O_RDONLY, 0)
} }
</pre> </pre>
<p> <p>
<pre><!--{{code "progs/file.go" `/func.Create/` `/^}/`}} <pre><!--{{code "progs/file.go" `/func.Create/` `/^}/`}}
-->func Create(name string) (file *File, err os.Error) { -->func Create(name string) (file *File, err error) {
return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666) return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
} }
</pre> </pre>
@ -622,7 +622,7 @@ in parentheses before the function name. Here are some methods for <code>*File</
each of which declares a receiver variable <code>file</code>. each of which declares a receiver variable <code>file</code>.
<p> <p>
<pre><!--{{code "progs/file.go" `/Close/` "$"}} <pre><!--{{code "progs/file.go" `/Close/` "$"}}
-->func (file *File) Close() os.Error { -->func (file *File) Close() error {
if file == nil { if file == nil {
return os.EINVAL return os.EINVAL
} }
@ -634,7 +634,7 @@ each of which declares a receiver variable <code>file</code>.
return nil return nil
} }
func (file *File) Read(b []byte) (ret int, err os.Error) { func (file *File) Read(b []byte) (ret int, err error) {
if file == nil { if file == nil {
return -1, os.EINVAL return -1, os.EINVAL
} }
@ -645,7 +645,7 @@ func (file *File) Read(b []byte) (ret int, err os.Error) {
return int(r), err return int(r), err
} }
func (file *File) Write(b []byte) (ret int, err os.Error) { func (file *File) Write(b []byte) (ret int, err error) {
if file == nil { if file == nil {
return -1, os.EINVAL return -1, os.EINVAL
} }
@ -690,7 +690,7 @@ func main() {
file.Stdout.Write(hello) file.Stdout.Write(hello)
f, err := file.Open(&#34;/does/not/exist&#34;) f, err := file.Open(&#34;/does/not/exist&#34;)
if f == nil { if f == nil {
fmt.Printf(&#34;can&#39;t open file; err=%s\n&#34;, err.String()) fmt.Printf(&#34;can&#39;t open file; err=%s\n&#34;, err.Error())
os.Exit(1) os.Exit(1)
} }
} }
@ -793,7 +793,7 @@ Here is code from <code>progs/cat_rot13.go</code>:
<p> <p>
<pre><!--{{code "progs/cat_rot13.go" `/type.reader/` `/^}/`}} <pre><!--{{code "progs/cat_rot13.go" `/type.reader/` `/^}/`}}
-->type reader interface { -->type reader interface {
Read(b []byte) (ret int, err os.Error) Read(b []byte) (ret int, err error)
String() string String() string
} }
</pre> </pre>
@ -817,7 +817,7 @@ func newRotate13(source reader) *rotate13 {
return &amp;rotate13{source} return &amp;rotate13{source}
} }
func (r13 *rotate13) Read(b []byte) (ret int, err os.Error) { func (r13 *rotate13) Read(b []byte) (ret int, err error) {
r, e := r13.source.Read(b) r, e := r13.source.Read(b)
for i := 0; i &lt; r; i++ { for i := 0; i &lt; r; i++ {
b[i] = rot13(b[i]) b[i] = rot13(b[i])

View File

@ -24,7 +24,7 @@ func rot13(b byte) byte {
} }
type reader interface { type reader interface {
Read(b []byte) (ret int, err os.Error) Read(b []byte) (ret int, err error)
String() string String() string
} }
@ -36,7 +36,7 @@ func newRotate13(source reader) *rotate13 {
return &rotate13{source} return &rotate13{source}
} }
func (r13 *rotate13) Read(b []byte) (ret int, err os.Error) { func (r13 *rotate13) Read(b []byte) (ret int, err error) {
r, e := r13.source.Read(b) r, e := r13.source.Read(b)
for i := 0; i < r; i++ { for i := 0; i < r; i++ {
b[i] = rot13(b[i]) b[i] = rot13(b[i])

View File

@ -27,7 +27,7 @@ var (
Stderr = newFile(syscall.Stderr, "/dev/stderr") Stderr = newFile(syscall.Stderr, "/dev/stderr")
) )
func OpenFile(name string, mode int, perm uint32) (file *File, err os.Error) { func OpenFile(name string, mode int, perm uint32) (file *File, err error) {
r, e := syscall.Open(name, mode, perm) r, e := syscall.Open(name, mode, perm)
if e != 0 { if e != 0 {
err = os.Errno(e) err = os.Errno(e)
@ -42,15 +42,15 @@ const (
O_TRUNC = syscall.O_TRUNC O_TRUNC = syscall.O_TRUNC
) )
func Open(name string) (file *File, err os.Error) { func Open(name string) (file *File, err error) {
return OpenFile(name, O_RDONLY, 0) return OpenFile(name, O_RDONLY, 0)
} }
func Create(name string) (file *File, err os.Error) { func Create(name string) (file *File, err error) {
return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666) return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
} }
func (file *File) Close() os.Error { func (file *File) Close() error {
if file == nil { if file == nil {
return os.EINVAL return os.EINVAL
} }
@ -62,7 +62,7 @@ func (file *File) Close() os.Error {
return nil return nil
} }
func (file *File) Read(b []byte) (ret int, err os.Error) { func (file *File) Read(b []byte) (ret int, err error) {
if file == nil { if file == nil {
return -1, os.EINVAL return -1, os.EINVAL
} }
@ -73,7 +73,7 @@ func (file *File) Read(b []byte) (ret int, err os.Error) {
return int(r), err return int(r), err
} }
func (file *File) Write(b []byte) (ret int, err os.Error) { func (file *File) Write(b []byte) (ret int, err error) {
if file == nil { if file == nil {
return -1, os.EINVAL return -1, os.EINVAL
} }

View File

@ -27,7 +27,7 @@ var (
Stderr = newFile(syscall.Stderr, "/dev/stderr") Stderr = newFile(syscall.Stderr, "/dev/stderr")
) )
func OpenFile(name string, mode int, perm uint32) (file *File, err os.Error) { func OpenFile(name string, mode int, perm uint32) (file *File, err error) {
r, e := syscall.Open(name, mode, perm) r, e := syscall.Open(name, mode, perm)
if e != 0 { if e != 0 {
err = os.Errno(e) err = os.Errno(e)
@ -42,15 +42,15 @@ const (
O_TRUNC = syscall.O_TRUNC O_TRUNC = syscall.O_TRUNC
) )
func Open(name string) (file *File, err os.Error) { func Open(name string) (file *File, err error) {
return OpenFile(name, O_RDONLY, 0) return OpenFile(name, O_RDONLY, 0)
} }
func Create(name string) (file *File, err os.Error) { func Create(name string) (file *File, err error) {
return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666) return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
} }
func (file *File) Close() os.Error { func (file *File) Close() error {
if file == nil { if file == nil {
return os.EINVAL return os.EINVAL
} }
@ -62,7 +62,7 @@ func (file *File) Close() os.Error {
return nil return nil
} }
func (file *File) Read(b []byte) (ret int, err os.Error) { func (file *File) Read(b []byte) (ret int, err error) {
if file == nil { if file == nil {
return -1, os.EINVAL return -1, os.EINVAL
} }
@ -73,7 +73,7 @@ func (file *File) Read(b []byte) (ret int, err os.Error) {
return int(r), err return int(r), err
} }
func (file *File) Write(b []byte) (ret int, err os.Error) { func (file *File) Write(b []byte) (ret int, err error) {
if file == nil { if file == nil {
return -1, os.EINVAL return -1, os.EINVAL
} }

View File

@ -15,7 +15,7 @@ func main() {
file.Stdout.Write(hello) file.Stdout.Write(hello)
f, err := file.Open("/does/not/exist") f, err := file.Open("/does/not/exist")
if f == nil { if f == nil {
fmt.Printf("can't open file; err=%s\n", err.String()) fmt.Printf("can't open file; err=%s\n", err.Error())
os.Exit(1) os.Exit(1)
} }
} }

View File

@ -15,7 +15,7 @@ import (
"os" "os"
) )
func EncryptAndGzip(dstfile, srcfile string, key, iv []byte) os.Error { func EncryptAndGzip(dstfile, srcfile string, key, iv []byte) error {
r, err := os.Open(srcfile) r, err := os.Open(srcfile)
if err != nil { if err != nil {
return err return err
@ -39,7 +39,7 @@ func EncryptAndGzip(dstfile, srcfile string, key, iv []byte) os.Error {
return err return err
} }
func DecryptAndGunzip(dstfile, srcfile string, key, iv []byte) os.Error { func DecryptAndGunzip(dstfile, srcfile string, key, iv []byte) error {
f, err := os.Open(srcfile) f, err := os.Open(srcfile)
if err != nil { if err != nil {
return err return err

View File

@ -15,7 +15,7 @@ import (
"os" "os"
) )
func EncryptAndGzip(dstfile, srcfile string, key, iv []byte) os.Error { func EncryptAndGzip(dstfile, srcfile string, key, iv []byte) error {
r, err := os.Open(srcfile) r, err := os.Open(srcfile)
if err != nil { if err != nil {
return err return err

View File

@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// The template uses the function "code" to inject program // The template uses the function "code" to inject program
// source into the output by extracting code from files and // source into the output by extracting code from files and
// injecting them as HTML-escaped <pre> blocks. // injecting them as HTML-escaped <pre> blocks.
@ -81,7 +80,7 @@ func format(arg interface{}) string {
return "" return ""
} }
func code(file string, arg ...interface{}) (string, os.Error) { func code(file string, arg ...interface{}) (string, error) {
text := contents(file) text := contents(file)
var command string var command string
switch len(arg) { switch len(arg) {

View File

@ -179,7 +179,7 @@ func (z *Int) SetInt64(x int64) *Int {
// SetString interprets s as a number in the given base // SetString interprets s as a number in the given base
// and sets z to that value. The base must be in the range [2,36]. // and sets z to that value. The base must be in the range [2,36].
// SetString returns an error if s cannot be parsed or the base is invalid. // SetString returns an error if s cannot be parsed or the base is invalid.
func (z *Int) SetString(s string, base int) os.Error { func (z *Int) SetString(s string, base int) error {
z.doinit() z.doinit()
if base < 2 || base > 36 { if base < 2 || base > 36 {
return os.EINVAL return os.EINVAL

View File

@ -69,7 +69,7 @@ func uuidgen() {
C.uuid_generate(&uuid[0]) C.uuid_generate(&uuid[0])
} }
func Size(name string) (int64, os.Error) { func Size(name string) (int64, error) {
var st C.struct_stat var st C.struct_stat
p := C.CString(name) p := C.CString(name)
_, err := C.stat(p, &st) _, err := C.stat(p, &st)
@ -80,7 +80,7 @@ func Size(name string) (int64, os.Error) {
return int64(C.ulong(st.st_size)), nil return int64(C.ulong(st.st_size)), nil
} }
func Strtol(s string, base int) (int, os.Error) { func Strtol(s string, base int) (int, error) {
p := C.CString(s) p := C.CString(s)
n, err := C.strtol(p, nil, C.int(base)) n, err := C.strtol(p, nil, C.int(base))
C.free(unsafe.Pointer(p)) C.free(unsafe.Pointer(p))

View File

@ -14,7 +14,7 @@ import (
) )
// run is a simple wrapper for exec.Run/Close // run is a simple wrapper for exec.Run/Close
func run(envv []string, dir string, argv ...string) os.Error { func run(envv []string, dir string, argv ...string) error {
if *verbose { if *verbose {
log.Println("run", argv) log.Println("run", argv)
} }
@ -31,7 +31,7 @@ func run(envv []string, dir string, argv ...string) os.Error {
// process combined stdout and stderr output, exit status and error. // process combined stdout and stderr output, exit status and error.
// The error returned is nil, if process is started successfully, // The error returned is nil, if process is started successfully,
// even if exit status is not 0. // even if exit status is not 0.
func runLog(envv []string, logfile, dir string, argv ...string) (string, int, os.Error) { func runLog(envv []string, logfile, dir string, argv ...string) (string, int, error) {
if *verbose { if *verbose {
log.Println("runLog", argv) log.Println("runLog", argv)
} }
@ -56,7 +56,7 @@ func runLog(envv []string, logfile, dir string, argv ...string) (string, int, os
err := cmd.Run() err := cmd.Run()
if err != nil { if err != nil {
if ws, ok := err.(*os.Waitmsg); ok { if ws, ok := err.(*exec.ExitError); ok {
return b.String(), ws.ExitStatus(), nil return b.String(), ws.ExitStatus(), nil
} }
} }

View File

@ -6,11 +6,11 @@ package main
import ( import (
"bytes" "bytes"
"errors"
"fmt" "fmt"
"http" "http"
"json" "json"
"log" "log"
"os"
"strconv" "strconv"
"url" "url"
) )
@ -20,9 +20,9 @@ type param map[string]string
// dash runs the given method and command on the dashboard. // dash runs the given method and command on the dashboard.
// If args is not nil, it is the query or post parameters. // If args is not nil, it is the query or post parameters.
// If resp is not nil, dash unmarshals the body as JSON into resp. // If resp is not nil, dash unmarshals the body as JSON into resp.
func dash(meth, cmd string, resp interface{}, args param) os.Error { func dash(meth, cmd string, resp interface{}, args param) error {
var r *http.Response var r *http.Response
var err os.Error var err error
if *verbose { if *verbose {
log.Println("dash", cmd, args) log.Println("dash", cmd, args)
} }
@ -57,7 +57,7 @@ func dash(meth, cmd string, resp interface{}, args param) os.Error {
return nil return nil
} }
func dashStatus(meth, cmd string, args param) os.Error { func dashStatus(meth, cmd string, args param) error {
var resp struct { var resp struct {
Status string Status string
Error string Error string
@ -67,13 +67,13 @@ func dashStatus(meth, cmd string, args param) os.Error {
return err return err
} }
if resp.Status != "OK" { if resp.Status != "OK" {
return os.NewError("/build: " + resp.Error) return errors.New("/build: " + resp.Error)
} }
return nil return nil
} }
// todo returns the next hash to build. // todo returns the next hash to build.
func (b *Builder) todo() (rev string, err os.Error) { func (b *Builder) todo() (rev string, err error) {
var resp []struct { var resp []struct {
Hash string Hash string
} }
@ -87,7 +87,7 @@ func (b *Builder) todo() (rev string, err os.Error) {
} }
// recordResult sends build results to the dashboard // recordResult sends build results to the dashboard
func (b *Builder) recordResult(buildLog string, hash string) os.Error { func (b *Builder) recordResult(buildLog string, hash string) error {
return dash("POST", "build", nil, param{ return dash("POST", "build", nil, param{
"builder": b.name, "builder": b.name,
"key": b.key, "key": b.key,
@ -97,7 +97,7 @@ func (b *Builder) recordResult(buildLog string, hash string) os.Error {
} }
// packages fetches a list of package paths from the dashboard // packages fetches a list of package paths from the dashboard
func packages() (pkgs []string, err os.Error) { func packages() (pkgs []string, err error) {
var resp struct { var resp struct {
Packages []struct { Packages []struct {
Path string Path string
@ -114,7 +114,7 @@ func packages() (pkgs []string, err os.Error) {
} }
// updatePackage sends package build results and info dashboard // updatePackage sends package build results and info dashboard
func (b *Builder) updatePackage(pkg string, ok bool, buildLog, info string) os.Error { func (b *Builder) updatePackage(pkg string, ok bool, buildLog, info string) error {
return dash("POST", "package", nil, param{ return dash("POST", "package", nil, param{
"builder": b.name, "builder": b.name,
"key": b.key, "key": b.key,
@ -126,7 +126,7 @@ func (b *Builder) updatePackage(pkg string, ok bool, buildLog, info string) os.E
} }
// postCommit informs the dashboard of a new commit // postCommit informs the dashboard of a new commit
func postCommit(key string, l *HgLog) os.Error { func postCommit(key string, l *HgLog) error {
return dashStatus("POST", "commit", param{ return dashStatus("POST", "commit", param{
"key": key, "key": key,
"node": l.Hash, "node": l.Hash,

View File

@ -5,6 +5,7 @@
package main package main
import ( import (
"errors"
"flag" "flag"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
@ -158,7 +159,7 @@ func main() {
} }
} }
func NewBuilder(builder string) (*Builder, os.Error) { func NewBuilder(builder string) (*Builder, error) {
b := &Builder{name: builder} b := &Builder{name: builder}
// get goos/goarch from builder string // get goos/goarch from builder string
@ -259,7 +260,7 @@ func (b *Builder) build() bool {
return true return true
} }
func (b *Builder) buildHash(hash string) (err os.Error) { func (b *Builder) buildHash(hash string) (err error) {
defer func() { defer func() {
if err != nil { if err != nil {
err = fmt.Errorf("%s build: %s: %s", b.name, hash, err) err = fmt.Errorf("%s build: %s: %s", b.name, hash, err)
@ -301,7 +302,7 @@ func (b *Builder) buildHash(hash string) (err os.Error) {
// if we're in external mode, build all packages and return // if we're in external mode, build all packages and return
if *external { if *external {
if status != 0 { if status != 0 {
return os.NewError("go build failed") return errors.New("go build failed")
} }
return b.buildPackages(workpath, hash) return b.buildPackages(workpath, hash)
} }
@ -572,7 +573,7 @@ func addCommit(hash, key string) bool {
} }
// fullHash returns the full hash for the given Mercurial revision. // fullHash returns the full hash for the given Mercurial revision.
func fullHash(rev string) (hash string, err os.Error) { func fullHash(rev string) (hash string, err error) {
defer func() { defer func() {
if err != nil { if err != nil {
err = fmt.Errorf("fullHash: %s: %s", rev, err) err = fmt.Errorf("fullHash: %s: %s", rev, err)
@ -601,7 +602,7 @@ func fullHash(rev string) (hash string, err os.Error) {
var revisionRe = regexp.MustCompile(`^([^ ]+) +[0-9]+:([0-9a-f]+)$`) var revisionRe = regexp.MustCompile(`^([^ ]+) +[0-9]+:([0-9a-f]+)$`)
// firstTag returns the hash and tag of the most recent tag matching re. // firstTag returns the hash and tag of the most recent tag matching re.
func firstTag(re *regexp.Regexp) (hash string, tag string, err os.Error) { func firstTag(re *regexp.Regexp) (hash string, tag string, err error) {
o, _, err := runLog(nil, "", goroot, "hg", "tags") o, _, err := runLog(nil, "", goroot, "hg", "tags")
for _, l := range strings.Split(o, "\n") { for _, l := range strings.Split(o, "\n") {
if l == "" { if l == "" {
@ -609,7 +610,7 @@ func firstTag(re *regexp.Regexp) (hash string, tag string, err os.Error) {
} }
s := revisionRe.FindStringSubmatch(l) s := revisionRe.FindStringSubmatch(l)
if s == nil { if s == nil {
err = os.NewError("couldn't find revision number") err = errors.New("couldn't find revision number")
return return
} }
if !re.MatchString(s[1]) { if !re.MatchString(s[1]) {
@ -619,6 +620,6 @@ func firstTag(re *regexp.Regexp) (hash string, tag string, err os.Error) {
hash, err = fullHash(s[2]) hash, err = fullHash(s[2])
return return
} }
err = os.NewError("no matching tag found") err = errors.New("no matching tag found")
return return
} }

View File

@ -5,6 +5,7 @@
package main package main
import ( import (
"errors"
"fmt" "fmt"
"go/doc" "go/doc"
"go/parser" "go/parser"
@ -17,7 +18,7 @@ import (
const MaxCommentLength = 500 // App Engine won't store more in a StringProperty. const MaxCommentLength = 500 // App Engine won't store more in a StringProperty.
func (b *Builder) buildPackages(workpath string, hash string) os.Error { func (b *Builder) buildPackages(workpath string, hash string) error {
logdir := filepath.Join(*buildroot, "log") logdir := filepath.Join(*buildroot, "log")
if err := os.Mkdir(logdir, 0755); err != nil { if err := os.Mkdir(logdir, 0755); err != nil {
return err return err
@ -87,7 +88,7 @@ func isGoFile(fi *os.FileInfo) bool {
filepath.Ext(fi.Name) == ".go" filepath.Ext(fi.Name) == ".go"
} }
func packageComment(pkg, pkgpath string) (info string, err os.Error) { func packageComment(pkg, pkgpath string) (info string, err error) {
fset := token.NewFileSet() fset := token.NewFileSet()
pkgs, err := parser.ParseDir(fset, pkgpath, isGoFile, parser.PackageClauseOnly|parser.ParseComments) pkgs, err := parser.ParseDir(fset, pkgpath, isGoFile, parser.PackageClauseOnly|parser.ParseComments)
if err != nil { if err != nil {
@ -102,7 +103,7 @@ func packageComment(pkg, pkgpath string) (info string, err os.Error) {
continue continue
} }
if info != "" { if info != "" {
return "", os.NewError("multiple packages with docs") return "", errors.New("multiple packages with docs")
} }
info = pdoc.Doc info = pdoc.Doc
} }

View File

@ -84,14 +84,14 @@ func Compile(w http.ResponseWriter, req *http.Request) {
// write request Body to x.go // write request Body to x.go
f, err := os.Create(src) f, err := os.Create(src)
if err != nil { if err != nil {
error(w, nil, err) error_(w, nil, err)
return return
} }
defer os.Remove(src) defer os.Remove(src)
defer f.Close() defer f.Close()
_, err = io.Copy(f, req.Body) _, err = io.Copy(f, req.Body)
if err != nil { if err != nil {
error(w, nil, err) error_(w, nil, err)
return return
} }
f.Close() f.Close()
@ -100,7 +100,7 @@ func Compile(w http.ResponseWriter, req *http.Request) {
out, err := run(archChar+"g", "-o", obj, src) out, err := run(archChar+"g", "-o", obj, src)
defer os.Remove(obj) defer os.Remove(obj)
if err != nil { if err != nil {
error(w, out, err) error_(w, out, err)
return return
} }
@ -108,14 +108,14 @@ func Compile(w http.ResponseWriter, req *http.Request) {
out, err = run(archChar+"l", "-o", bin, obj) out, err = run(archChar+"l", "-o", bin, obj)
defer os.Remove(bin) defer os.Remove(bin)
if err != nil { if err != nil {
error(w, out, err) error_(w, out, err)
return return
} }
// run x // run x
out, err = run(bin) out, err = run(bin)
if err != nil { if err != nil {
error(w, out, err) error_(w, out, err)
} }
// write the output of x as the http response // write the output of x as the http response
@ -128,17 +128,17 @@ func Compile(w http.ResponseWriter, req *http.Request) {
// error writes compile, link, or runtime errors to the HTTP connection. // error writes compile, link, or runtime errors to the HTTP connection.
// The JavaScript interface uses the 404 status code to identify the error. // The JavaScript interface uses the 404 status code to identify the error.
func error(w http.ResponseWriter, out []byte, err os.Error) { func error_(w http.ResponseWriter, out []byte, err error) {
w.WriteHeader(404) w.WriteHeader(404)
if out != nil { if out != nil {
output.Execute(w, out) output.Execute(w, out)
} else { } else {
output.Execute(w, err.String()) output.Execute(w, err.Error())
} }
} }
// run executes the specified command and returns its output and an error. // run executes the specified command and returns its output and an error.
func run(cmd ...string) ([]byte, os.Error) { func run(cmd ...string) ([]byte, error) {
return exec.Command(cmd[0], cmd[1:]...).CombinedOutput() return exec.Command(cmd[0], cmd[1:]...).CombinedOutput()
} }

View File

@ -71,7 +71,7 @@ func (f *File) ReadGo(name string) {
} }
sawC = true sawC = true
if s.Name != nil { if s.Name != nil {
error(s.Path.Pos(), `cannot rename import "C"`) error_(s.Path.Pos(), `cannot rename import "C"`)
} }
cg := s.Doc cg := s.Doc
if cg == nil && len(d.Specs) == 1 { if cg == nil && len(d.Specs) == 1 {
@ -84,7 +84,7 @@ func (f *File) ReadGo(name string) {
} }
} }
if !sawC { if !sawC {
error(token.NoPos, `cannot find import "C"`) error_(token.NoPos, `cannot find import "C"`)
} }
// In ast2, strip the import "C" line. // In ast2, strip the import "C" line.
@ -149,7 +149,7 @@ func (f *File) saveRef(x interface{}, context string) {
} }
goname := sel.Sel.Name goname := sel.Sel.Name
if goname == "errno" { if goname == "errno" {
error(sel.Pos(), "cannot refer to errno directly; see documentation") error_(sel.Pos(), "cannot refer to errno directly; see documentation")
return return
} }
name := f.Name[goname] name := f.Name[goname]
@ -186,11 +186,11 @@ func (f *File) saveExport(x interface{}, context string) {
name := strings.TrimSpace(string(c.Text[9:])) name := strings.TrimSpace(string(c.Text[9:]))
if name == "" { if name == "" {
error(c.Pos(), "export missing name") error_(c.Pos(), "export missing name")
} }
if name != n.Name.Name { if name != n.Name.Name {
error(c.Pos(), "export comment has wrong name %q, want %q", name, n.Name.Name) error_(c.Pos(), "export comment has wrong name %q, want %q", name, n.Name.Name)
} }
f.ExpFunc = append(f.ExpFunc, &ExpFunc{ f.ExpFunc = append(f.ExpFunc, &ExpFunc{
@ -225,7 +225,7 @@ func (f *File) walk(x interface{}, context string, visit func(*File, interface{}
// everything else just recurs // everything else just recurs
default: default:
error(token.NoPos, "unexpected type %T in walk", x, visit) error_(token.NoPos, "unexpected type %T in walk", x, visit)
panic("unexpected type") panic("unexpected type")
case nil: case nil:

View File

@ -14,6 +14,7 @@ import (
"debug/macho" "debug/macho"
"debug/pe" "debug/pe"
"encoding/binary" "encoding/binary"
"errors"
"flag" "flag"
"fmt" "fmt"
"go/ast" "go/ast"
@ -147,10 +148,10 @@ func (p *Package) addToFlag(flag string, args []string) {
// pkgConfig runs pkg-config and extracts --libs and --cflags information // pkgConfig runs pkg-config and extracts --libs and --cflags information
// for packages. // for packages.
func pkgConfig(packages []string) (cflags, ldflags []string, err os.Error) { func pkgConfig(packages []string) (cflags, ldflags []string, err error) {
for _, name := range packages { for _, name := range packages {
if len(name) == 0 || name[0] == '-' { if len(name) == 0 || name[0] == '-' {
return nil, nil, os.NewError(fmt.Sprintf("invalid name: %q", name)) return nil, nil, errors.New(fmt.Sprintf("invalid name: %q", name))
} }
} }
@ -158,7 +159,7 @@ func pkgConfig(packages []string) (cflags, ldflags []string, err os.Error) {
stdout, stderr, ok := run(nil, args) stdout, stderr, ok := run(nil, args)
if !ok { if !ok {
os.Stderr.Write(stderr) os.Stderr.Write(stderr)
return nil, nil, os.NewError("pkg-config failed") return nil, nil, errors.New("pkg-config failed")
} }
cflags, err = splitQuoted(string(stdout)) cflags, err = splitQuoted(string(stdout))
if err != nil { if err != nil {
@ -169,7 +170,7 @@ func pkgConfig(packages []string) (cflags, ldflags []string, err os.Error) {
stdout, stderr, ok = run(nil, args) stdout, stderr, ok = run(nil, args)
if !ok { if !ok {
os.Stderr.Write(stderr) os.Stderr.Write(stderr)
return nil, nil, os.NewError("pkg-config failed") return nil, nil, errors.New("pkg-config failed")
} }
ldflags, err = splitQuoted(string(stdout)) ldflags, err = splitQuoted(string(stdout))
return return
@ -191,7 +192,7 @@ func pkgConfig(packages []string) (cflags, ldflags []string, err os.Error) {
// //
// []string{"a", "b:c d", "ef", `g"`} // []string{"a", "b:c d", "ef", `g"`}
// //
func splitQuoted(s string) (r []string, err os.Error) { func splitQuoted(s string) (r []string, err error) {
var args []string var args []string
arg := make([]rune, len(s)) arg := make([]rune, len(s))
escaped := false escaped := false
@ -229,9 +230,9 @@ func splitQuoted(s string) (r []string, err os.Error) {
args = append(args, string(arg[:i])) args = append(args, string(arg[:i]))
} }
if quote != 0 { if quote != 0 {
err = os.NewError("unclosed quote") err = errors.New("unclosed quote")
} else if escaped { } else if escaped {
err = os.NewError("unfinished escaping") err = errors.New("unfinished escaping")
} }
return args, err return args, err
} }
@ -420,7 +421,7 @@ func (p *Package) guessKinds(f *File) []*Name {
case strings.Contains(line, ": statement with no effect"): case strings.Contains(line, ": statement with no effect"):
what = "not-type" // const or func or var what = "not-type" // const or func or var
case strings.Contains(line, "undeclared"): case strings.Contains(line, "undeclared"):
error(token.NoPos, "%s", strings.TrimSpace(line[colon+1:])) error_(token.NoPos, "%s", strings.TrimSpace(line[colon+1:]))
case strings.Contains(line, "is not an integer constant"): case strings.Contains(line, "is not an integer constant"):
isConst[i] = false isConst[i] = false
continue continue
@ -448,7 +449,7 @@ func (p *Package) guessKinds(f *File) []*Name {
if n.Kind != "" { if n.Kind != "" {
continue continue
} }
error(token.NoPos, "could not determine kind of name for C.%s", n.Go) error_(token.NoPos, "could not determine kind of name for C.%s", n.Go)
} }
if nerrors > 0 { if nerrors > 0 {
fatalf("unresolved names") fatalf("unresolved names")
@ -617,7 +618,7 @@ func (p *Package) rewriteRef(f *File) {
// functions are only used in calls. // functions are only used in calls.
for _, r := range f.Ref { for _, r := range f.Ref {
if r.Name.Kind == "const" && r.Name.Const == "" { if r.Name.Kind == "const" && r.Name.Const == "" {
error(r.Pos(), "unable to find value of constant C.%s", r.Name.Go) error_(r.Pos(), "unable to find value of constant C.%s", r.Name.Go)
} }
var expr ast.Expr = ast.NewIdent(r.Name.Mangle) // default var expr ast.Expr = ast.NewIdent(r.Name.Mangle) // default
switch r.Context { switch r.Context {
@ -628,12 +629,12 @@ func (p *Package) rewriteRef(f *File) {
expr = r.Name.Type.Go expr = r.Name.Type.Go
break break
} }
error(r.Pos(), "call of non-function C.%s", r.Name.Go) error_(r.Pos(), "call of non-function C.%s", r.Name.Go)
break break
} }
if r.Context == "call2" { if r.Context == "call2" {
if r.Name.FuncType.Result == nil { if r.Name.FuncType.Result == nil {
error(r.Pos(), "assignment count mismatch: 2 = 0") error_(r.Pos(), "assignment count mismatch: 2 = 0")
} }
// Invent new Name for the two-result function. // Invent new Name for the two-result function.
n := f.Name["2"+r.Name.Go] n := f.Name["2"+r.Name.Go]
@ -650,7 +651,7 @@ func (p *Package) rewriteRef(f *File) {
} }
case "expr": case "expr":
if r.Name.Kind == "func" { if r.Name.Kind == "func" {
error(r.Pos(), "must call C.%s", r.Name.Go) error_(r.Pos(), "must call C.%s", r.Name.Go)
} }
if r.Name.Kind == "type" { if r.Name.Kind == "type" {
// Okay - might be new(T) // Okay - might be new(T)
@ -662,13 +663,13 @@ func (p *Package) rewriteRef(f *File) {
case "type": case "type":
if r.Name.Kind != "type" { if r.Name.Kind != "type" {
error(r.Pos(), "expression C.%s used as type", r.Name.Go) error_(r.Pos(), "expression C.%s used as type", r.Name.Go)
} else { } else {
expr = r.Name.Type.Go expr = r.Name.Type.Go
} }
default: default:
if r.Name.Kind == "func" { if r.Name.Kind == "func" {
error(r.Pos(), "must call C.%s", r.Name.Go) error_(r.Pos(), "must call C.%s", r.Name.Go)
} }
} }
*r.Expr = expr *r.Expr = expr

View File

@ -255,7 +255,7 @@ func (p *Package) Record(f *File) {
if p.PackageName == "" { if p.PackageName == "" {
p.PackageName = f.Package p.PackageName = f.Package
} else if p.PackageName != f.Package { } else if p.PackageName != f.Package {
error(token.NoPos, "inconsistent package names: %s, %s", p.PackageName, f.Package) error_(token.NoPos, "inconsistent package names: %s, %s", p.PackageName, f.Package)
} }
if p.Name == nil { if p.Name == nil {
@ -265,7 +265,7 @@ func (p *Package) Record(f *File) {
if p.Name[k] == nil { if p.Name[k] == nil {
p.Name[k] = v p.Name[k] = v
} else if !reflect.DeepEqual(p.Name[k], v) { } else if !reflect.DeepEqual(p.Name[k], v) {
error(token.NoPos, "inconsistent definitions for C.%s", k) error_(token.NoPos, "inconsistent definitions for C.%s", k)
} }
} }
} }

View File

@ -650,7 +650,7 @@ func (p *Package) cgoType(e ast.Expr) *Type {
} }
return r return r
} }
error(e.Pos(), "unrecognized Go type %s", t.Name) error_(e.Pos(), "unrecognized Go type %s", t.Name)
return &Type{Size: 4, Align: 4, C: c("int")} return &Type{Size: 4, Align: 4, C: c("int")}
case *ast.SelectorExpr: case *ast.SelectorExpr:
id, ok := t.X.(*ast.Ident) id, ok := t.X.(*ast.Ident)
@ -658,7 +658,7 @@ func (p *Package) cgoType(e ast.Expr) *Type {
return &Type{Size: p.PtrSize, Align: p.PtrSize, C: c("void*")} return &Type{Size: p.PtrSize, Align: p.PtrSize, C: c("void*")}
} }
} }
error(e.Pos(), "unrecognized Go type %T", e) error_(e.Pos(), "unrecognized Go type %T", e)
return &Type{Size: 4, Align: 4, C: c("int")} return &Type{Size: 4, Align: 4, C: c("int")}
} }

View File

@ -72,7 +72,7 @@ func fatalf(msg string, args ...interface{}) {
var nerrors int var nerrors int
func error(pos token.Pos, msg string, args ...interface{}) { func error_(pos token.Pos, msg string, args ...interface{}) {
nerrors++ nerrors++
if pos.IsValid() { if pos.IsValid() {
fmt.Fprintf(os.Stderr, "%s: ", fset.Position(pos).String()) fmt.Fprintf(os.Stderr, "%s: ", fset.Position(pos).String())

View File

@ -11,11 +11,10 @@ import (
"archive/zip" "archive/zip"
"http" "http"
"log" "log"
"os"
"path" "path"
) )
func serveError(w http.ResponseWriter, r *http.Request, relpath string, err os.Error) { func serveError(w http.ResponseWriter, r *http.Request, relpath string, err error) {
contents := applyTemplate(errorHTML, "errorHTML", err) // err may contain an absolute path! contents := applyTemplate(errorHTML, "errorHTML", err) // err may contain an absolute path!
w.WriteHeader(http.StatusNotFound) w.WriteHeader(http.StatusNotFound)
servePage(w, "File "+relpath, "", "", contents) servePage(w, "File "+relpath, "", "", contents)

View File

@ -13,6 +13,7 @@
package main package main
import ( import (
"errors"
"fmt" "fmt"
"http" "http"
"io" "io"
@ -84,7 +85,7 @@ type Codestep struct {
XML string `xml:"innerxml"` XML string `xml:"innerxml"`
// Derived from Src; not in XML. // Derived from Src; not in XML.
Err os.Error Err error
File string File string
Lo int Lo int
LoByte int LoByte int
@ -107,7 +108,7 @@ func (st *Codestep) String() string {
} }
// loadCodewalk reads a codewalk from the named XML file. // loadCodewalk reads a codewalk from the named XML file.
func loadCodewalk(filename string) (*Codewalk, os.Error) { func loadCodewalk(filename string) (*Codewalk, error) {
f, err := fs.Open(filename) f, err := fs.Open(filename)
if err != nil { if err != nil {
return nil, err return nil, err
@ -252,7 +253,7 @@ func codewalkFileprint(w http.ResponseWriter, r *http.Request, f string) {
// It returns the lo and hi byte offset of the matched region within data. // It returns the lo and hi byte offset of the matched region within data.
// See http://plan9.bell-labs.com/sys/doc/sam/sam.html Table II // See http://plan9.bell-labs.com/sys/doc/sam/sam.html Table II
// for details on the syntax. // for details on the syntax.
func addrToByteRange(addr string, start int, data []byte) (lo, hi int, err os.Error) { func addrToByteRange(addr string, start int, data []byte) (lo, hi int, err error) {
var ( var (
dir byte dir byte
prevc byte prevc byte
@ -264,7 +265,7 @@ func addrToByteRange(addr string, start int, data []byte) (lo, hi int, err os.Er
c := addr[0] c := addr[0]
switch c { switch c {
default: default:
err = os.NewError("invalid address syntax near " + string(c)) err = errors.New("invalid address syntax near " + string(c))
case ',': case ',':
if len(addr) == 1 { if len(addr) == 1 {
hi = len(data) hi = len(data)
@ -348,7 +349,7 @@ func addrToByteRange(addr string, start int, data []byte) (lo, hi int, err os.Er
// (or characters) after hi. Applying -n (or -#n) means to back up n lines // (or characters) after hi. Applying -n (or -#n) means to back up n lines
// (or characters) before lo. // (or characters) before lo.
// The return value is the new lo, hi. // The return value is the new lo, hi.
func addrNumber(data []byte, lo, hi int, dir byte, n int, charOffset bool) (int, int, os.Error) { func addrNumber(data []byte, lo, hi int, dir byte, n int, charOffset bool) (int, int, error) {
switch dir { switch dir {
case 0: case 0:
lo = 0 lo = 0
@ -424,13 +425,13 @@ func addrNumber(data []byte, lo, hi int, dir byte, n int, charOffset bool) (int,
} }
} }
return 0, 0, os.NewError("address out of range") return 0, 0, errors.New("address out of range")
} }
// addrRegexp searches for pattern in the given direction starting at lo, hi. // addrRegexp searches for pattern in the given direction starting at lo, hi.
// The direction dir is '+' (search forward from hi) or '-' (search backward from lo). // The direction dir is '+' (search forward from hi) or '-' (search backward from lo).
// Backward searches are unimplemented. // Backward searches are unimplemented.
func addrRegexp(data []byte, lo, hi int, dir byte, pattern string) (int, int, os.Error) { func addrRegexp(data []byte, lo, hi int, dir byte, pattern string) (int, int, error) {
re, err := regexp.Compile(pattern) re, err := regexp.Compile(pattern)
if err != nil { if err != nil {
return 0, 0, err return 0, 0, err
@ -438,7 +439,7 @@ func addrRegexp(data []byte, lo, hi int, dir byte, pattern string) (int, int, os
if dir == '-' { if dir == '-' {
// Could implement reverse search using binary search // Could implement reverse search using binary search
// through file, but that seems like overkill. // through file, but that seems like overkill.
return 0, 0, os.NewError("reverse search not implemented") return 0, 0, errors.New("reverse search not implemented")
} }
m := re.FindIndex(data[hi:]) m := re.FindIndex(data[hi:])
if len(m) > 0 { if len(m) > 0 {
@ -449,7 +450,7 @@ func addrRegexp(data []byte, lo, hi int, dir byte, pattern string) (int, int, os
m = re.FindIndex(data) m = re.FindIndex(data)
} }
if len(m) == 0 { if len(m) == 0 {
return 0, 0, os.NewError("no match for " + pattern) return 0, 0, errors.New("no match for " + pattern)
} }
return m[0], m[1], nil return m[0], m[1], nil
} }

View File

@ -27,14 +27,14 @@ type FileInfo interface {
// The FileSystem interface specifies the methods godoc is using // The FileSystem interface specifies the methods godoc is using
// to access the file system for which it serves documentation. // to access the file system for which it serves documentation.
type FileSystem interface { type FileSystem interface {
Open(path string) (io.ReadCloser, os.Error) Open(path string) (io.ReadCloser, error)
Lstat(path string) (FileInfo, os.Error) Lstat(path string) (FileInfo, error)
Stat(path string) (FileInfo, os.Error) Stat(path string) (FileInfo, error)
ReadDir(path string) ([]FileInfo, os.Error) ReadDir(path string) ([]FileInfo, error)
} }
// ReadFile reads the file named by path from fs and returns the contents. // ReadFile reads the file named by path from fs and returns the contents.
func ReadFile(fs FileSystem, path string) ([]byte, os.Error) { func ReadFile(fs FileSystem, path string) ([]byte, error) {
rc, err := fs.Open(path) rc, err := fs.Open(path)
if err != nil { if err != nil {
return nil, err return nil, err
@ -71,7 +71,7 @@ func (fi osFI) Mtime_ns() int64 {
// osFS is the OS-specific implementation of FileSystem // osFS is the OS-specific implementation of FileSystem
type osFS struct{} type osFS struct{}
func (osFS) Open(path string) (io.ReadCloser, os.Error) { func (osFS) Open(path string) (io.ReadCloser, error) {
f, err := os.Open(path) f, err := os.Open(path)
if err != nil { if err != nil {
return nil, err return nil, err
@ -86,17 +86,17 @@ func (osFS) Open(path string) (io.ReadCloser, os.Error) {
return f, nil return f, nil
} }
func (osFS) Lstat(path string) (FileInfo, os.Error) { func (osFS) Lstat(path string) (FileInfo, error) {
fi, err := os.Lstat(path) fi, err := os.Lstat(path)
return osFI{fi}, err return osFI{fi}, err
} }
func (osFS) Stat(path string) (FileInfo, os.Error) { func (osFS) Stat(path string) (FileInfo, error) {
fi, err := os.Stat(path) fi, err := os.Stat(path)
return osFI{fi}, err return osFI{fi}, err
} }
func (osFS) ReadDir(path string) ([]FileInfo, os.Error) { func (osFS) ReadDir(path string) ([]FileInfo, error) {
l0, err := ioutil.ReadDir(path) // l0 is sorted l0, err := ioutil.ReadDir(path) // l0 is sorted
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -148,7 +148,7 @@ func getPathFilter() func(string) bool {
// readDirList reads a file containing a newline-separated list // readDirList reads a file containing a newline-separated list
// of directory paths and returns the list of paths. // of directory paths and returns the list of paths.
func readDirList(filename string) ([]string, os.Error) { func readDirList(filename string) ([]string, error) {
contents, err := ReadFile(fs, filename) contents, err := ReadFile(fs, filename)
if err != nil { if err != nil {
return nil, err return nil, err
@ -299,7 +299,7 @@ type tconv struct {
indent int // valid if state == indenting indent int // valid if state == indenting
} }
func (p *tconv) writeIndent() (err os.Error) { func (p *tconv) writeIndent() (err error) {
i := p.indent i := p.indent
for i >= len(spaces) { for i >= len(spaces) {
i -= len(spaces) i -= len(spaces)
@ -314,7 +314,7 @@ func (p *tconv) writeIndent() (err os.Error) {
return return
} }
func (p *tconv) Write(data []byte) (n int, err os.Error) { func (p *tconv) Write(data []byte) (n int, err error) {
if len(data) == 0 { if len(data) == 0 {
return return
} }
@ -855,7 +855,7 @@ type PageInfo struct {
Dirs *DirList // nil if no directory information Dirs *DirList // nil if no directory information
DirTime int64 // directory time stamp in seconds since epoch DirTime int64 // directory time stamp in seconds since epoch
IsPkg bool // false if this is not documenting a real package IsPkg bool // false if this is not documenting a real package
Err os.Error // directory read error or nil Err error // directory read error or nil
} }
func (info *PageInfo) IsEmpty() bool { func (info *PageInfo) IsEmpty() bool {
@ -869,7 +869,7 @@ type httpHandler struct {
} }
// fsReadDir implements ReadDir for the go/build package. // fsReadDir implements ReadDir for the go/build package.
func fsReadDir(dir string) ([]*os.FileInfo, os.Error) { func fsReadDir(dir string) ([]*os.FileInfo, error) {
fi, err := fs.ReadDir(dir) fi, err := fs.ReadDir(dir)
if err != nil { if err != nil {
return nil, err return nil, err
@ -888,7 +888,7 @@ func fsReadDir(dir string) ([]*os.FileInfo, os.Error) {
} }
// fsReadFile implements ReadFile for the go/build package. // fsReadFile implements ReadFile for the go/build package.
func fsReadFile(dir, name string) (path string, data []byte, err os.Error) { func fsReadFile(dir, name string) (path string, data []byte, err error) {
path = filepath.Join(dir, name) path = filepath.Join(dir, name)
data, err = ReadFile(fs, path) data, err = ReadFile(fs, path)
return return
@ -1172,12 +1172,12 @@ func lookup(query string) (result SearchResult) {
index := index.(*Index) index := index.(*Index)
// identifier search // identifier search
var err os.Error var err error
result.Pak, result.Hit, result.Alt, err = index.Lookup(query) result.Pak, result.Hit, result.Alt, err = index.Lookup(query)
if err != nil && *maxResults <= 0 { if err != nil && *maxResults <= 0 {
// ignore the error if full text search is enabled // ignore the error if full text search is enabled
// since the query may be a valid regular expression // since the query may be a valid regular expression
result.Alert = "Error in query string: " + err.String() result.Alert = "Error in query string: " + err.Error()
return return
} }
@ -1185,7 +1185,7 @@ func lookup(query string) (result SearchResult) {
if *maxResults > 0 && query != "" { if *maxResults > 0 && query != "" {
rx, err := regexp.Compile(query) rx, err := regexp.Compile(query)
if err != nil { if err != nil {
result.Alert = "Error in query regular expression: " + err.String() result.Alert = "Error in query regular expression: " + err.Error()
return return
} }
// If we get maxResults+1 results we know that there are more than // If we get maxResults+1 results we know that there are more than
@ -1280,7 +1280,7 @@ func fsDirnames() <-chan string {
return c return c
} }
func readIndex(filenames string) os.Error { func readIndex(filenames string) error {
matches, err := filepath.Glob(filenames) matches, err := filepath.Glob(filenames)
if err != nil { if err != nil {
return err return err

View File

@ -50,7 +50,7 @@ type httpZipFile struct {
list zipList list zipList
} }
func (f *httpZipFile) Close() os.Error { func (f *httpZipFile) Close() error {
if f.info.IsRegular() { if f.info.IsRegular() {
return f.ReadCloser.Close() return f.ReadCloser.Close()
} }
@ -58,11 +58,11 @@ func (f *httpZipFile) Close() os.Error {
return nil return nil
} }
func (f *httpZipFile) Stat() (*os.FileInfo, os.Error) { func (f *httpZipFile) Stat() (*os.FileInfo, error) {
return &f.info, nil return &f.info, nil
} }
func (f *httpZipFile) Readdir(count int) ([]os.FileInfo, os.Error) { func (f *httpZipFile) Readdir(count int) ([]os.FileInfo, error) {
var list []os.FileInfo var list []os.FileInfo
dirname := f.path + "/" dirname := f.path + "/"
prevname := "" prevname := ""
@ -106,13 +106,13 @@ func (f *httpZipFile) Readdir(count int) ([]os.FileInfo, os.Error) {
} }
if count >= 0 && len(list) == 0 { if count >= 0 && len(list) == 0 {
return nil, os.EOF return nil, io.EOF
} }
return list, nil return list, nil
} }
func (f *httpZipFile) Seek(offset int64, whence int) (int64, os.Error) { func (f *httpZipFile) Seek(offset int64, whence int) (int64, error) {
return 0, fmt.Errorf("Seek not implemented for zip file entry: %s", f.info.Name) return 0, fmt.Errorf("Seek not implemented for zip file entry: %s", f.info.Name)
} }
@ -123,7 +123,7 @@ type httpZipFS struct {
root string root string
} }
func (fs *httpZipFS) Open(name string) (http.File, os.Error) { func (fs *httpZipFS) Open(name string) (http.File, error) {
// fs.root does not start with '/'. // fs.root does not start with '/'.
path := path.Join(fs.root, name) // path is clean path := path.Join(fs.root, name) // path is clean
index, exact := fs.list.lookup(path) index, exact := fs.list.lookup(path)
@ -165,7 +165,7 @@ func (fs *httpZipFS) Open(name string) (http.File, os.Error) {
}, nil }, nil
} }
func (fs *httpZipFS) Close() os.Error { func (fs *httpZipFS) Close() error {
fs.list = nil fs.list = nil
return fs.ReadCloser.Close() return fs.ReadCloser.Close()
} }

View File

@ -40,6 +40,7 @@ package main
import ( import (
"bufio" "bufio"
"bytes" "bytes"
"errors"
"go/ast" "go/ast"
"go/parser" "go/parser"
"go/token" "go/token"
@ -47,7 +48,6 @@ import (
"gob" "gob"
"index/suffixarray" "index/suffixarray"
"io" "io"
"os"
"path/filepath" "path/filepath"
"regexp" "regexp"
"sort" "sort"
@ -841,16 +841,16 @@ type fileIndex struct {
Fulltext bool Fulltext bool
} }
func (x *fileIndex) Write(w io.Writer) os.Error { func (x *fileIndex) Write(w io.Writer) error {
return gob.NewEncoder(w).Encode(x) return gob.NewEncoder(w).Encode(x)
} }
func (x *fileIndex) Read(r io.Reader) os.Error { func (x *fileIndex) Read(r io.Reader) error {
return gob.NewDecoder(r).Decode(x) return gob.NewDecoder(r).Decode(x)
} }
// Write writes the index x to w. // Write writes the index x to w.
func (x *Index) Write(w io.Writer) os.Error { func (x *Index) Write(w io.Writer) error {
fulltext := false fulltext := false
if x.suffixes != nil { if x.suffixes != nil {
fulltext = true fulltext = true
@ -877,7 +877,7 @@ func (x *Index) Write(w io.Writer) os.Error {
// Read reads the index from r into x; x must not be nil. // Read reads the index from r into x; x must not be nil.
// If r does not also implement io.ByteReader, it will be wrapped in a bufio.Reader. // If r does not also implement io.ByteReader, it will be wrapped in a bufio.Reader.
func (x *Index) Read(r io.Reader) os.Error { func (x *Index) Read(r io.Reader) error {
// We use the ability to read bytes as a plausible surrogate for buffering. // We use the ability to read bytes as a plausible surrogate for buffering.
if _, ok := r.(io.ByteReader); !ok { if _, ok := r.(io.ByteReader); !ok {
r = bufio.NewReader(r) r = bufio.NewReader(r)
@ -934,13 +934,13 @@ func isIdentifier(s string) bool {
// identifier, Lookup returns a list of packages, a LookupResult, and a // identifier, Lookup returns a list of packages, a LookupResult, and a
// list of alternative spellings, if any. Any and all results may be nil. // list of alternative spellings, if any. Any and all results may be nil.
// If the query syntax is wrong, an error is reported. // If the query syntax is wrong, an error is reported.
func (x *Index) Lookup(query string) (paks HitList, match *LookupResult, alt *AltWords, err os.Error) { func (x *Index) Lookup(query string) (paks HitList, match *LookupResult, alt *AltWords, err error) {
ss := strings.Split(query, ".") ss := strings.Split(query, ".")
// check query syntax // check query syntax
for _, s := range ss { for _, s := range ss {
if !isIdentifier(s) { if !isIdentifier(s) {
err = os.NewError("all query parts must be identifiers") err = errors.New("all query parts must be identifiers")
return return
} }
} }
@ -968,7 +968,7 @@ func (x *Index) Lookup(query string) (paks HitList, match *LookupResult, alt *Al
} }
default: default:
err = os.NewError("query is not a (qualified) identifier") err = errors.New("query is not a (qualified) identifier")
} }
return return

View File

@ -28,6 +28,7 @@ package main
import ( import (
"archive/zip" "archive/zip"
"bytes" "bytes"
"errors"
_ "expvar" // to serve /debug/vars _ "expvar" // to serve /debug/vars
"flag" "flag"
"fmt" "fmt"
@ -74,7 +75,7 @@ var (
query = flag.Bool("q", false, "arguments are considered search queries") query = flag.Bool("q", false, "arguments are considered search queries")
) )
func serveError(w http.ResponseWriter, r *http.Request, relpath string, err os.Error) { func serveError(w http.ResponseWriter, r *http.Request, relpath string, err error) {
contents := applyTemplate(errorHTML, "errorHTML", err) // err may contain an absolute path! contents := applyTemplate(errorHTML, "errorHTML", err) // err may contain an absolute path!
w.WriteHeader(http.StatusNotFound) w.WriteHeader(http.StatusNotFound)
servePage(w, "File "+relpath, "", "", contents) servePage(w, "File "+relpath, "", "", contents)
@ -163,7 +164,7 @@ func loggingHandler(h http.Handler) http.Handler {
}) })
} }
func remoteSearch(query string) (res *http.Response, err os.Error) { func remoteSearch(query string) (res *http.Response, err error) {
search := "/search?f=text&q=" + url.QueryEscape(query) search := "/search?f=text&q=" + url.QueryEscape(query)
// list of addresses to try // list of addresses to try
@ -188,7 +189,7 @@ func remoteSearch(query string) (res *http.Response, err os.Error) {
} }
if err == nil && res.StatusCode != http.StatusOK { if err == nil && res.StatusCode != http.StatusOK {
err = os.NewError(res.Status) err = errors.New(res.Status)
} }
return return

View File

@ -13,11 +13,10 @@ import (
"go/ast" "go/ast"
"go/parser" "go/parser"
"go/token" "go/token"
"os"
"path/filepath" "path/filepath"
) )
func parseFile(fset *token.FileSet, filename string, mode uint) (*ast.File, os.Error) { func parseFile(fset *token.FileSet, filename string, mode uint) (*ast.File, error) {
src, err := ReadFile(fs, filename) src, err := ReadFile(fs, filename)
if err != nil { if err != nil {
return nil, err return nil, err
@ -25,7 +24,7 @@ func parseFile(fset *token.FileSet, filename string, mode uint) (*ast.File, os.E
return parser.ParseFile(fset, filename, src, mode) return parser.ParseFile(fset, filename, src, mode)
} }
func parseFiles(fset *token.FileSet, filenames []string) (pkgs map[string]*ast.Package, first os.Error) { func parseFiles(fset *token.FileSet, filenames []string) (pkgs map[string]*ast.Package, first error) {
pkgs = make(map[string]*ast.Package) pkgs = make(map[string]*ast.Package)
for _, filename := range filenames { for _, filename := range filenames {
file, err := parseFile(fset, filename, parser.ParseComments) file, err := parseFile(fset, filename, parser.ParseComments)
@ -48,7 +47,7 @@ func parseFiles(fset *token.FileSet, filenames []string) (pkgs map[string]*ast.P
return return
} }
func parseDir(fset *token.FileSet, path string, filter func(FileInfo) bool) (map[string]*ast.Package, os.Error) { func parseDir(fset *token.FileSet, path string, filter func(FileInfo) bool) (map[string]*ast.Package, error) {
list, err := fs.ReadDir(path) list, err := fs.ReadDir(path)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -93,7 +93,7 @@ func canonicalizePaths(list []string, filter func(path string) bool) []string {
// writeFileAtomically writes data to a temporary file and then // writeFileAtomically writes data to a temporary file and then
// atomically renames that file to the file named by filename. // atomically renames that file to the file named by filename.
// //
func writeFileAtomically(filename string, data []byte) os.Error { func writeFileAtomically(filename string, data []byte) error {
// TODO(gri) this won't work on appengine // TODO(gri) this won't work on appengine
f, err := ioutil.TempFile(filepath.Split(filename)) f, err := ioutil.TempFile(filepath.Split(filename))
if err != nil { if err != nil {

View File

@ -22,7 +22,6 @@ import (
"archive/zip" "archive/zip"
"fmt" "fmt"
"io" "io"
"os"
"path" "path"
"sort" "sort"
"strings" "strings"
@ -66,7 +65,7 @@ type zipFS struct {
list zipList list zipList
} }
func (fs *zipFS) Close() os.Error { func (fs *zipFS) Close() error {
fs.list = nil fs.list = nil
return fs.ReadCloser.Close() return fs.ReadCloser.Close()
} }
@ -79,7 +78,7 @@ func zipPath(name string) string {
return name[1:] // strip leading '/' return name[1:] // strip leading '/'
} }
func (fs *zipFS) stat(abspath string) (int, zipFI, os.Error) { func (fs *zipFS) stat(abspath string) (int, zipFI, error) {
i, exact := fs.list.lookup(abspath) i, exact := fs.list.lookup(abspath)
if i < 0 { if i < 0 {
// abspath has leading '/' stripped - print it explicitly // abspath has leading '/' stripped - print it explicitly
@ -93,7 +92,7 @@ func (fs *zipFS) stat(abspath string) (int, zipFI, os.Error) {
return i, zipFI{name, file}, nil return i, zipFI{name, file}, nil
} }
func (fs *zipFS) Open(abspath string) (io.ReadCloser, os.Error) { func (fs *zipFS) Open(abspath string) (io.ReadCloser, error) {
_, fi, err := fs.stat(zipPath(abspath)) _, fi, err := fs.stat(zipPath(abspath))
if err != nil { if err != nil {
return nil, err return nil, err
@ -104,17 +103,17 @@ func (fs *zipFS) Open(abspath string) (io.ReadCloser, os.Error) {
return fi.file.Open() return fi.file.Open()
} }
func (fs *zipFS) Lstat(abspath string) (FileInfo, os.Error) { func (fs *zipFS) Lstat(abspath string) (FileInfo, error) {
_, fi, err := fs.stat(zipPath(abspath)) _, fi, err := fs.stat(zipPath(abspath))
return fi, err return fi, err
} }
func (fs *zipFS) Stat(abspath string) (FileInfo, os.Error) { func (fs *zipFS) Stat(abspath string) (FileInfo, error) {
_, fi, err := fs.stat(zipPath(abspath)) _, fi, err := fs.stat(zipPath(abspath))
return fi, err return fi, err
} }
func (fs *zipFS) ReadDir(abspath string) ([]FileInfo, os.Error) { func (fs *zipFS) ReadDir(abspath string) ([]FileInfo, error) {
path := zipPath(abspath) path := zipPath(abspath)
i, fi, err := fs.stat(path) i, fi, err := fs.stat(path)
if err != nil { if err != nil {

View File

@ -102,9 +102,9 @@ var printConfig = &printer.Config{
tabWidth, tabWidth,
} }
func processFile(filename string, useStdin bool) os.Error { func processFile(filename string, useStdin bool) error {
var f *os.File var f *os.File
var err os.Error var err error
var fixlog bytes.Buffer var fixlog bytes.Buffer
var buf bytes.Buffer var buf bytes.Buffer
@ -196,12 +196,12 @@ func gofmt(n interface{}) string {
gofmtBuf.Reset() gofmtBuf.Reset()
_, err := printConfig.Fprint(&gofmtBuf, fset, n) _, err := printConfig.Fprint(&gofmtBuf, fset, n)
if err != nil { if err != nil {
return "<" + err.String() + ">" return "<" + err.Error() + ">"
} }
return gofmtBuf.String() return gofmtBuf.String()
} }
func report(err os.Error) { func report(err error) {
scanner.PrintError(os.Stderr, err) scanner.PrintError(os.Stderr, err)
exitCode = 2 exitCode = 2
} }
@ -210,7 +210,7 @@ func walkDir(path string) {
filepath.Walk(path, visitFile) filepath.Walk(path, visitFile)
} }
func visitFile(path string, f *os.FileInfo, err os.Error) os.Error { func visitFile(path string, f *os.FileInfo, err error) error {
if err == nil && isGoFile(f) { if err == nil && isGoFile(f) {
err = processFile(path, false) err = processFile(path, false)
} }
@ -225,7 +225,7 @@ func isGoFile(f *os.FileInfo) bool {
return f.IsRegular() && !strings.HasPrefix(f.Name, ".") && strings.HasSuffix(f.Name, ".go") return f.IsRegular() && !strings.HasPrefix(f.Name, ".") && strings.HasSuffix(f.Name, ".go")
} }
func diff(b1, b2 []byte) (data []byte, err os.Error) { func diff(b1, b2 []byte) (data []byte, err error) {
f1, err := ioutil.TempFile("", "gofix") f1, err := ioutil.TempFile("", "gofix")
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -49,7 +49,7 @@ var (
printerMode uint printerMode uint
) )
func report(err os.Error) { func report(err error) {
scanner.PrintError(os.Stderr, err) scanner.PrintError(os.Stderr, err)
exitCode = 2 exitCode = 2
} }
@ -86,7 +86,7 @@ func isGoFile(f *os.FileInfo) bool {
} }
// If in == nil, the source is the contents of the file with the given filename. // If in == nil, the source is the contents of the file with the given filename.
func processFile(filename string, in io.Reader, out io.Writer, stdin bool) os.Error { func processFile(filename string, in io.Reader, out io.Writer, stdin bool) error {
if in == nil { if in == nil {
f, err := os.Open(filename) f, err := os.Open(filename)
if err != nil { if err != nil {
@ -156,7 +156,7 @@ func processFile(filename string, in io.Reader, out io.Writer, stdin bool) os.Er
return err return err
} }
func visitFile(path string, f *os.FileInfo, err os.Error) os.Error { func visitFile(path string, f *os.FileInfo, err error) error {
if err == nil && isGoFile(f) { if err == nil && isGoFile(f) {
err = processFile(path, nil, os.Stdout, false) err = processFile(path, nil, os.Stdout, false)
} }
@ -225,7 +225,7 @@ func gofmtMain() {
} }
} }
func diff(b1, b2 []byte) (data []byte, err os.Error) { func diff(b1, b2 []byte) (data []byte, err error) {
f1, err := ioutil.TempFile("", "gofmt") f1, err := ioutil.TempFile("", "gofmt")
if err != nil { if err != nil {
return return
@ -255,7 +255,7 @@ func diff(b1, b2 []byte) (data []byte, err os.Error) {
// parse parses src, which was read from filename, // parse parses src, which was read from filename,
// as a Go source file or statement list. // as a Go source file or statement list.
func parse(filename string, src []byte, stdin bool) (*ast.File, func(orig, src []byte) []byte, os.Error) { func parse(filename string, src []byte, stdin bool) (*ast.File, func(orig, src []byte) []byte, error) {
// Try as whole source file. // Try as whole source file.
file, err := parser.ParseFile(fset, filename, src, parserMode) file, err := parser.ParseFile(fset, filename, src, parserMode)
if err == nil { if err == nil {
@ -264,7 +264,7 @@ func parse(filename string, src []byte, stdin bool) (*ast.File, func(orig, src [
// If the error is that the source file didn't begin with a // If the error is that the source file didn't begin with a
// package line and this is standard input, fall through to // package line and this is standard input, fall through to
// try as a source fragment. Stop and return on any other error. // try as a source fragment. Stop and return on any other error.
if !stdin || !strings.Contains(err.String(), "expected 'package'") { if !stdin || !strings.Contains(err.Error(), "expected 'package'") {
return nil, nil, err return nil, nil, err
} }
@ -286,7 +286,7 @@ func parse(filename string, src []byte, stdin bool) (*ast.File, func(orig, src [
// If the error is that the source file didn't begin with a // If the error is that the source file didn't begin with a
// declaration, fall through to try as a statement list. // declaration, fall through to try as a statement list.
// Stop and return on any other error. // Stop and return on any other error.
if !strings.Contains(err.String(), "expected declaration") { if !strings.Contains(err.Error(), "expected declaration") {
return nil, nil, err return nil, nil, err
} }

View File

@ -8,6 +8,7 @@ package main
import ( import (
"bytes" "bytes"
"errors"
"exec" "exec"
"fmt" "fmt"
"http" "http"
@ -120,7 +121,7 @@ var vcsList = []*vcs{&git, &hg, &bzr, &svn}
type host struct { type host struct {
pattern *regexp.Regexp pattern *regexp.Regexp
getVcs func(repo, path string) (*vcsMatch, os.Error) getVcs func(repo, path string) (*vcsMatch, error)
} }
var knownHosts = []host{ var knownHosts = []host{
@ -147,7 +148,7 @@ type vcsMatch struct {
prefix, repo string prefix, repo string
} }
func googleVcs(repo, path string) (*vcsMatch, os.Error) { func googleVcs(repo, path string) (*vcsMatch, error) {
parts := strings.SplitN(repo, "/", 2) parts := strings.SplitN(repo, "/", 2)
url := "https://" + repo url := "https://" + repo
switch parts[1] { switch parts[1] {
@ -158,21 +159,21 @@ func googleVcs(repo, path string) (*vcsMatch, os.Error) {
case "hg": case "hg":
return &vcsMatch{&hg, repo, url}, nil return &vcsMatch{&hg, repo, url}, nil
} }
return nil, os.NewError("unsupported googlecode vcs: " + parts[1]) return nil, errors.New("unsupported googlecode vcs: " + parts[1])
} }
func githubVcs(repo, path string) (*vcsMatch, os.Error) { func githubVcs(repo, path string) (*vcsMatch, error) {
if strings.HasSuffix(repo, ".git") { if strings.HasSuffix(repo, ".git") {
return nil, os.NewError("path must not include .git suffix") return nil, errors.New("path must not include .git suffix")
} }
return &vcsMatch{&git, repo, "http://" + repo + ".git"}, nil return &vcsMatch{&git, repo, "http://" + repo + ".git"}, nil
} }
func bitbucketVcs(repo, path string) (*vcsMatch, os.Error) { func bitbucketVcs(repo, path string) (*vcsMatch, error) {
const bitbucketApiUrl = "https://api.bitbucket.org/1.0/repositories/" const bitbucketApiUrl = "https://api.bitbucket.org/1.0/repositories/"
if strings.HasSuffix(repo, ".git") { if strings.HasSuffix(repo, ".git") {
return nil, os.NewError("path must not include .git suffix") return nil, errors.New("path must not include .git suffix")
} }
parts := strings.SplitN(repo, "/", 2) parts := strings.SplitN(repo, "/", 2)
@ -205,16 +206,16 @@ func bitbucketVcs(repo, path string) (*vcsMatch, os.Error) {
return &vcsMatch{&hg, repo, "http://" + repo}, nil return &vcsMatch{&hg, repo, "http://" + repo}, nil
} }
return nil, os.NewError("unsupported bitbucket vcs: " + response.Vcs) return nil, errors.New("unsupported bitbucket vcs: " + response.Vcs)
} }
func launchpadVcs(repo, path string) (*vcsMatch, os.Error) { func launchpadVcs(repo, path string) (*vcsMatch, error) {
return &vcsMatch{&bzr, repo, "https://" + repo}, nil return &vcsMatch{&bzr, repo, "https://" + repo}, nil
} }
// findPublicRepo checks whether pkg is located at one of // findPublicRepo checks whether pkg is located at one of
// the supported code hosting sites and, if so, returns a match. // the supported code hosting sites and, if so, returns a match.
func findPublicRepo(pkg string) (*vcsMatch, os.Error) { func findPublicRepo(pkg string) (*vcsMatch, error) {
for _, host := range knownHosts { for _, host := range knownHosts {
if hm := host.pattern.FindStringSubmatch(pkg); hm != nil { if hm := host.pattern.FindStringSubmatch(pkg); hm != nil {
return host.getVcs(hm[1], hm[2]) return host.getVcs(hm[1], hm[2])
@ -224,7 +225,7 @@ func findPublicRepo(pkg string) (*vcsMatch, os.Error) {
} }
// findAnyRepo looks for a vcs suffix in pkg (.git, etc) and returns a match. // findAnyRepo looks for a vcs suffix in pkg (.git, etc) and returns a match.
func findAnyRepo(pkg string) (*vcsMatch, os.Error) { func findAnyRepo(pkg string) (*vcsMatch, error) {
for _, v := range vcsList { for _, v := range vcsList {
i := strings.Index(pkg+"/", v.suffix+"/") i := strings.Index(pkg+"/", v.suffix+"/")
if i < 0 { if i < 0 {
@ -272,9 +273,9 @@ func isRemote(pkg string) bool {
} }
// download checks out or updates pkg from the remote server. // download checks out or updates pkg from the remote server.
func download(pkg, srcDir string) (public bool, err os.Error) { func download(pkg, srcDir string) (public bool, err error) {
if strings.Contains(pkg, "..") { if strings.Contains(pkg, "..") {
err = os.NewError("invalid path (contains ..)") err = errors.New("invalid path (contains ..)")
return return
} }
m, err := findPublicRepo(pkg) m, err := findPublicRepo(pkg)
@ -290,7 +291,7 @@ func download(pkg, srcDir string) (public bool, err os.Error) {
} }
} }
if m == nil { if m == nil {
err = os.NewError("cannot download: " + pkg) err = errors.New("cannot download: " + pkg)
return return
} }
err = m.checkoutRepo(srcDir, m.prefix, m.repo) err = m.checkoutRepo(srcDir, m.prefix, m.repo)
@ -300,7 +301,7 @@ func download(pkg, srcDir string) (public bool, err os.Error) {
// updateRepo gets a list of tags in the repository and // updateRepo gets a list of tags in the repository and
// checks out the tag closest to the current runtime.Version. // checks out the tag closest to the current runtime.Version.
// If no matching tag is found, it just updates to tip. // If no matching tag is found, it just updates to tip.
func (v *vcs) updateRepo(dst string) os.Error { func (v *vcs) updateRepo(dst string) error {
if v.tagList == "" || v.tagListRe == nil { if v.tagList == "" || v.tagListRe == nil {
// TODO(adg): fix for svn // TODO(adg): fix for svn
return run(dst, nil, v.cmd, v.update) return run(dst, nil, v.cmd, v.update)
@ -382,11 +383,11 @@ func selectTag(goVersion string, tags []string) (match string) {
// exists and -u was specified on the command line) // exists and -u was specified on the command line)
// the repository at tag/branch "release". If there is no // the repository at tag/branch "release". If there is no
// such tag or branch, it falls back to the repository tip. // such tag or branch, it falls back to the repository tip.
func (vcs *vcs) checkoutRepo(srcDir, pkgprefix, repo string) os.Error { func (vcs *vcs) checkoutRepo(srcDir, pkgprefix, repo string) error {
dst := filepath.Join(srcDir, filepath.FromSlash(pkgprefix)) dst := filepath.Join(srcDir, filepath.FromSlash(pkgprefix))
dir, err := os.Stat(filepath.Join(dst, vcs.metadir)) dir, err := os.Stat(filepath.Join(dst, vcs.metadir))
if err == nil && !dir.IsDirectory() { if err == nil && !dir.IsDirectory() {
return os.NewError("not a directory: " + dst) return errors.New("not a directory: " + dst)
} }
if err != nil { if err != nil {
parent, _ := filepath.Split(dst) parent, _ := filepath.Split(dst)

View File

@ -6,6 +6,7 @@ package main
import ( import (
"bytes" "bytes"
"errors"
"exec" "exec"
"flag" "flag"
"fmt" "fmt"
@ -31,7 +32,7 @@ const logfile = "goinstall.log"
var ( var (
fset = token.NewFileSet() fset = token.NewFileSet()
argv0 = os.Args[0] argv0 = os.Args[0]
errors = false errors_ = false
parents = make(map[string]string) parents = make(map[string]string)
visit = make(map[string]status) visit = make(map[string]status)
installedPkgs = make(map[string]map[string]bool) installedPkgs = make(map[string]map[string]bool)
@ -67,7 +68,7 @@ func printf(format string, args ...interface{}) {
} }
func errorf(format string, args ...interface{}) { func errorf(format string, args ...interface{}) {
errors = true errors_ = true
logf(format, args...) logf(format, args...)
} }
@ -119,7 +120,7 @@ func main() {
install(path, "") install(path, "")
} }
if errors { if errors_ {
os.Exit(1) os.Exit(1)
} }
} }
@ -243,7 +244,7 @@ func install(pkg, parent string) {
install(p, pkg) install(p, pkg)
} }
} }
if errors { if errors_ {
return return
} }
@ -304,17 +305,17 @@ func isStandardPath(s string) bool {
// run runs the command cmd in directory dir with standard input stdin. // run runs the command cmd in directory dir with standard input stdin.
// If the command fails, run prints the command and output on standard error // If the command fails, run prints the command and output on standard error
// in addition to returning a non-nil os.Error. // in addition to returning a non-nil os.Error.
func run(dir string, stdin []byte, cmd ...string) os.Error { func run(dir string, stdin []byte, cmd ...string) error {
return genRun(dir, stdin, cmd, false) return genRun(dir, stdin, cmd, false)
} }
// quietRun is like run but prints nothing on failure unless -v is used. // quietRun is like run but prints nothing on failure unless -v is used.
func quietRun(dir string, stdin []byte, cmd ...string) os.Error { func quietRun(dir string, stdin []byte, cmd ...string) error {
return genRun(dir, stdin, cmd, true) return genRun(dir, stdin, cmd, true)
} }
// genRun implements run and quietRun. // genRun implements run and quietRun.
func genRun(dir string, stdin []byte, arg []string, quiet bool) os.Error { func genRun(dir string, stdin []byte, arg []string, quiet bool) error {
cmd := exec.Command(arg[0], arg[1:]...) cmd := exec.Command(arg[0], arg[1:]...)
cmd.Stdin = bytes.NewBuffer(stdin) cmd.Stdin = bytes.NewBuffer(stdin)
cmd.Dir = dir cmd.Dir = dir
@ -329,7 +330,7 @@ func genRun(dir string, stdin []byte, arg []string, quiet bool) os.Error {
os.Stderr.Write(out) os.Stderr.Write(out)
fmt.Fprintf(os.Stderr, "--- %s\n", err) fmt.Fprintf(os.Stderr, "--- %s\n", err)
} }
return os.NewError("running " + arg[0] + ": " + err.String()) return errors.New("running " + arg[0] + ": " + err.Error())
} }
return nil return nil
} }

View File

@ -8,8 +8,8 @@ package main
import ( import (
"bytes" "bytes"
"errors"
"go/build" "go/build"
"os"
"path" // use for import paths "path" // use for import paths
"strings" "strings"
"template" "template"
@ -18,7 +18,7 @@ import (
// domake builds the package in dir. // domake builds the package in dir.
// domake generates a standard Makefile and passes it // domake generates a standard Makefile and passes it
// to make on standard input. // to make on standard input.
func domake(dir, pkg string, tree *build.Tree, isCmd bool) (err os.Error) { func domake(dir, pkg string, tree *build.Tree, isCmd bool) (err error) {
makefile, err := makeMakefile(dir, pkg, tree, isCmd) makefile, err := makeMakefile(dir, pkg, tree, isCmd)
if err != nil { if err != nil {
return err return err
@ -36,9 +36,9 @@ func domake(dir, pkg string, tree *build.Tree, isCmd bool) (err os.Error) {
// makeMakefile computes the standard Makefile for the directory dir // makeMakefile computes the standard Makefile for the directory dir
// installing as package pkg. It includes all *.go files in the directory // installing as package pkg. It includes all *.go files in the directory
// except those in package main and those ending in _test.go. // except those in package main and those ending in _test.go.
func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Error) { func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, error) {
if !safeName(pkg) { if !safeName(pkg) {
return nil, os.NewError("unsafe name: " + pkg) return nil, errors.New("unsafe name: " + pkg)
} }
targ := pkg targ := pkg
targDir := tree.PkgDir() targDir := tree.PkgDir()
@ -56,7 +56,7 @@ func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Err
isCgo := make(map[string]bool, len(cgoFiles)) isCgo := make(map[string]bool, len(cgoFiles))
for _, file := range cgoFiles { for _, file := range cgoFiles {
if !safeName(file) { if !safeName(file) {
return nil, os.NewError("bad name: " + file) return nil, errors.New("bad name: " + file)
} }
isCgo[file] = true isCgo[file] = true
} }
@ -64,7 +64,7 @@ func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Err
goFiles := make([]string, 0, len(dirInfo.GoFiles)) goFiles := make([]string, 0, len(dirInfo.GoFiles))
for _, file := range dirInfo.GoFiles { for _, file := range dirInfo.GoFiles {
if !safeName(file) { if !safeName(file) {
return nil, os.NewError("unsafe name: " + file) return nil, errors.New("unsafe name: " + file)
} }
if !isCgo[file] { if !isCgo[file] {
goFiles = append(goFiles, file) goFiles = append(goFiles, file)
@ -75,7 +75,7 @@ func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Err
cgoOFiles := make([]string, 0, len(dirInfo.CFiles)) cgoOFiles := make([]string, 0, len(dirInfo.CFiles))
for _, file := range dirInfo.CFiles { for _, file := range dirInfo.CFiles {
if !safeName(file) { if !safeName(file) {
return nil, os.NewError("unsafe name: " + file) return nil, errors.New("unsafe name: " + file)
} }
// When cgo is in use, C files are compiled with gcc, // When cgo is in use, C files are compiled with gcc,
// otherwise they're compiled with gc. // otherwise they're compiled with gc.
@ -88,7 +88,7 @@ func makeMakefile(dir, pkg string, tree *build.Tree, isCmd bool) ([]byte, os.Err
for _, file := range dirInfo.SFiles { for _, file := range dirInfo.SFiles {
if !safeName(file) { if !safeName(file) {
return nil, os.NewError("unsafe name: " + file) return nil, errors.New("unsafe name: " + file)
} }
oFiles = append(oFiles, file[:len(file)-2]+".$O") oFiles = append(oFiles, file[:len(file)-2]+".$O")
} }

View File

@ -307,7 +307,7 @@ func doRun(argv []string, returnStdout bool) string {
command = "bash" command = "bash"
argv = []string{"bash", "-c", cmd} argv = []string{"bash", "-c", cmd}
} }
var err os.Error var err error
argv[0], err = exec.LookPath(argv[0]) argv[0], err = exec.LookPath(argv[0])
if err != nil { if err != nil {
Fatalf("can't find %s: %s", command, err) Fatalf("can't find %s: %s", command, err)

View File

@ -61,7 +61,7 @@ func main() {
} }
skip := 0 skip := 0
if colon := strings.LastIndex(name, ":"); colon > 0 { if colon := strings.LastIndex(name, ":"); colon > 0 {
var err os.Error var err error
skip, err = strconv.Atoi(name[colon+1:]) skip, err = strconv.Atoi(name[colon+1:])
if err != nil { if err != nil {
errorf(`illegal format for "Func:N" argument %q; %s`, name, err) errorf(`illegal format for "Func:N" argument %q; %s`, name, err)
@ -105,7 +105,7 @@ func doFile(name string, reader io.Reader) {
file.checkFile(name, parsedFile) file.checkFile(name, parsedFile)
} }
func visit(path string, f *os.FileInfo, err os.Error) os.Error { func visit(path string, f *os.FileInfo, err error) error {
if err != nil { if err != nil {
errorf("walk error: %s", err) errorf("walk error: %s", err)
return nil return nil

View File

@ -31,7 +31,7 @@ func main() {
args := flag.Args() args := flag.Args()
var data []byte var data []byte
var err os.Error var err error
switch len(args) { switch len(args) {
case 0: case 0:
data, err = ioutil.ReadAll(os.Stdin) data, err = ioutil.ReadAll(os.Stdin)
@ -189,7 +189,7 @@ func makeParent(name string) {
// Copy of os.MkdirAll but adds to undo log after // Copy of os.MkdirAll but adds to undo log after
// creating a directory. // creating a directory.
func mkdirAll(path string, perm uint32) os.Error { func mkdirAll(path string, perm uint32) error {
dir, err := os.Lstat(path) dir, err := os.Lstat(path)
if err == nil { if err == nil {
if dir.IsDirectory() { if dir.IsDirectory() {
@ -230,7 +230,7 @@ func mkdirAll(path string, perm uint32) os.Error {
} }
// If err != nil, process the undo log and exit. // If err != nil, process the undo log and exit.
func chk(err os.Error) { func chk(err error) {
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err) fmt.Fprintf(os.Stderr, "%s\n", err)
runUndo() runUndo()
@ -239,15 +239,15 @@ func chk(err os.Error) {
} }
// Undo log // Undo log
type undo func() os.Error type undo func() error
var undoLog []undo var undoLog []undo
func undoRevert(name string) { func undoRevert(name string) {
undoLog = append(undoLog, undo(func() os.Error { return hgRevert(name) })) undoLog = append(undoLog, undo(func() error { return hgRevert(name) }))
} }
func undoRm(name string) { undoLog = append(undoLog, undo(func() os.Error { return os.Remove(name) })) } func undoRm(name string) { undoLog = append(undoLog, undo(func() error { return os.Remove(name) })) }
func runUndo() { func runUndo() {
for i := len(undoLog) - 1; i >= 0; i-- { for i := len(undoLog) - 1; i >= 0; i-- {
@ -258,7 +258,7 @@ func runUndo() {
} }
// hgRoot returns the root directory of the repository. // hgRoot returns the root directory of the repository.
func hgRoot() (string, os.Error) { func hgRoot() (string, error) {
out, err := run([]string{"hg", "root"}, nil) out, err := run([]string{"hg", "root"}, nil)
if err != nil { if err != nil {
return "", err return "", err
@ -276,7 +276,7 @@ func hgIncoming() bool {
// hgModified returns a list of the modified files in the // hgModified returns a list of the modified files in the
// repository. // repository.
func hgModified() ([]string, os.Error) { func hgModified() ([]string, error) {
out, err := run([]string{"hg", "status", "-n"}, nil) out, err := run([]string{"hg", "status", "-n"}, nil)
if err != nil { if err != nil {
return nil, err return nil, err
@ -285,33 +285,33 @@ func hgModified() ([]string, os.Error) {
} }
// hgAdd adds name to the repository. // hgAdd adds name to the repository.
func hgAdd(name string) os.Error { func hgAdd(name string) error {
_, err := run([]string{"hg", "add", name}, nil) _, err := run([]string{"hg", "add", name}, nil)
return err return err
} }
// hgRemove removes name from the repository. // hgRemove removes name from the repository.
func hgRemove(name string) os.Error { func hgRemove(name string) error {
_, err := run([]string{"hg", "rm", name}, nil) _, err := run([]string{"hg", "rm", name}, nil)
return err return err
} }
// hgRevert reverts name. // hgRevert reverts name.
func hgRevert(name string) os.Error { func hgRevert(name string) error {
_, err := run([]string{"hg", "revert", name}, nil) _, err := run([]string{"hg", "revert", name}, nil)
return err return err
} }
// hgCopy copies src to dst in the repository. // hgCopy copies src to dst in the repository.
// Note that the argument order matches io.Copy, not "hg cp". // Note that the argument order matches io.Copy, not "hg cp".
func hgCopy(dst, src string) os.Error { func hgCopy(dst, src string) error {
_, err := run([]string{"hg", "cp", src, dst}, nil) _, err := run([]string{"hg", "cp", src, dst}, nil)
return err return err
} }
// hgRename renames src to dst in the repository. // hgRename renames src to dst in the repository.
// Note that the argument order matches io.Copy, not "hg mv". // Note that the argument order matches io.Copy, not "hg mv".
func hgRename(dst, src string) os.Error { func hgRename(dst, src string) error {
_, err := run([]string{"hg", "mv", src, dst}, nil) _, err := run([]string{"hg", "mv", src, dst}, nil)
return err return err
} }
@ -326,7 +326,7 @@ var lookPathCache = make(map[string]string)
// run runs the command argv, resolving argv[0] if necessary by searching $PATH. // run runs the command argv, resolving argv[0] if necessary by searching $PATH.
// It provides input on standard input to the command. // It provides input on standard input to the command.
func run(argv []string, input []byte) (out string, err os.Error) { func run(argv []string, input []byte) (out string, err error) {
if len(argv) < 1 { if len(argv) < 1 {
return "", &runError{dup(argv), os.EINVAL} return "", &runError{dup(argv), os.EINVAL}
} }
@ -354,7 +354,7 @@ func run(argv []string, input []byte) (out string, err os.Error) {
// A runError represents an error that occurred while running a command. // A runError represents an error that occurred while running a command.
type runError struct { type runError struct {
cmd []string cmd []string
err os.Error err error
} }
func (e *runError) String() string { return strings.Join(e.cmd, " ") + ": " + e.err.String() } func (e *runError) Error() string { return strings.Join(e.cmd, " ") + ": " + e.err.Error() }

View File

@ -21,7 +21,7 @@ func f(left, right chan int) {
func main() { func main() {
var n = 10000 var n = 10000
if len(os.Args) > 1 { if len(os.Args) > 1 {
var err os.Error var err error
n, err = strconv.Atoi(os.Args[1]) n, err = strconv.Atoi(os.Args[1])
if err != nil { if err != nil {
print("bad arg\n") print("bad arg\n")

View File

@ -14,7 +14,7 @@ import (
func main() { func main() {
ga, e0 := os.Getenverror("GOARCH") ga, e0 := os.Getenverror("GOARCH")
if e0 != nil { if e0 != nil {
print("$GOARCH: ", e0.String(), "\n") print("$GOARCH: ", e0.Error(), "\n")
os.Exit(1) os.Exit(1)
} }
if ga != runtime.GOARCH { if ga != runtime.GOARCH {
@ -23,7 +23,7 @@ func main() {
} }
xxx, e1 := os.Getenverror("DOES_NOT_EXIST") xxx, e1 := os.Getenverror("DOES_NOT_EXIST")
if e1 != os.ENOENV { if e1 != os.ENOENV {
print("$DOES_NOT_EXIST=", xxx, "; err = ", e1.String(), "\n") print("$DOES_NOT_EXIST=", xxx, "; err = ", e1.Error(), "\n")
os.Exit(1) os.Exit(1)
} }
} }

View File

@ -6,7 +6,7 @@
package main package main
import "os" import "errors"
// Issue 481: closures and var declarations // Issue 481: closures and var declarations
// with multiple variables assigned from one // with multiple variables assigned from one
@ -22,7 +22,7 @@ func main() {
} }
}() }()
var conn, _ = Dial("tcp", "", listen.Addr().String()) var conn, _ = Dial("tcp", "", listen.Addr().Error())
_ = conn _ = conn
} }
@ -37,8 +37,8 @@ func Listen(x, y string) (T, string) {
return global, y return global, y
} }
func (t T) Addr() os.Error { func (t T) Addr() error {
return os.NewError("stringer") return errors.New("stringer")
} }
func (t T) Accept() (int, string) { func (t T) Accept() (int, string) {

View File

@ -18,9 +18,9 @@ func f() string {
return "abc" return "abc"
} }
func g() *os.Error { func g() *error {
trace += "g" trace += "g"
var x os.Error var x error
return &x return &x
} }
@ -35,7 +35,6 @@ func i() *int {
return &i return &i
} }
func main() { func main() {
m := make(map[string]int) m := make(map[string]int)
m[f()], *g() = strconv.Atoi(h()) m[f()], *g() = strconv.Atoi(h())
@ -43,7 +42,7 @@ func main() {
println("BUG", m["abc"], trace) println("BUG", m["abc"], trace)
panic("fail") panic("fail")
} }
mm := make(map[string]os.Error) mm := make(map[string]error)
trace = "" trace = ""
mm["abc"] = os.EINVAL mm["abc"] = os.EINVAL
*i(), mm[f()] = strconv.Atoi(h()) *i(), mm[f()] = strconv.Atoi(h())

View File

@ -12,16 +12,14 @@ type I interface {
f() f()
} }
var callee string var callee string
var error bool var error_ bool
type T int type T int
func (t *T) f() { callee = "f" } func (t *T) f() { callee = "f" }
func (i *T) g() { callee = "g" } func (i *T) g() { callee = "g" }
// test1 and test2 are the same except that in the interface J // test1 and test2 are the same except that in the interface J
// the entries are swapped. test2 and test3 are the same except // the entries are swapped. test2 and test3 are the same except
// that in test3 the interface J is declared outside the function. // that in test3 the interface J is declared outside the function.
@ -36,11 +34,10 @@ func test1(x I) {
x.(J).f() x.(J).f()
if callee != "f" { if callee != "f" {
println("test1 called", callee) println("test1 called", callee)
error = true error_ = true
} }
} }
func test2(x I) { func test2(x I) {
type J interface { type J interface {
g() g()
@ -49,11 +46,10 @@ func test2(x I) {
x.(J).f() x.(J).f()
if callee != "f" { if callee != "f" {
println("test2 called", callee) println("test2 called", callee)
error = true error_ = true
} }
} }
type J interface { type J interface {
g() g()
I I
@ -63,7 +59,7 @@ func test3(x I) {
x.(J).f() x.(J).f()
if callee != "f" { if callee != "f" {
println("test3 called", callee) println("test3 called", callee)
error = true error_ = true
} }
} }
@ -72,7 +68,7 @@ func main() {
test1(x) test1(x)
test2(x) test2(x)
test3(x) test3(x)
if error { if error_ {
panic("wrong method called") panic("wrong method called")
} }
} }

View File

@ -6,36 +6,34 @@
package p package p
import "os" func f() (_ int, err error) {
func f() (_ int, err os.Error) {
return return
} }
func g() (x int, _ os.Error) { func g() (x int, _ error) {
return return
} }
func h() (_ int, _ os.Error) { func h() (_ int, _ error) {
return return
} }
func i() (int, os.Error) { func i() (int, error) {
return // ERROR "not enough arguments to return" return // ERROR "not enough arguments to return"
} }
func f1() (_ int, err os.Error) { func f1() (_ int, err error) {
return 1, nil return 1, nil
} }
func g1() (x int, _ os.Error) { func g1() (x int, _ error) {
return 1, nil return 1, nil
} }
func h1() (_ int, _ os.Error) { func h1() (_ int, _ error) {
return 1, nil return 1, nil
} }
func ii() (int, os.Error) { func ii() (int, error) {
return 1, nil return 1, nil
} }

View File

@ -6,22 +6,22 @@
package main package main
import "os" import "io"
func f() (_ string, x float64, err os.Error) { func f() (_ string, x float64, err error) {
return return
} }
func g() (_ string, x float64, err os.Error) { func g() (_ string, x float64, err error) {
return "hello", 3.14, os.EOF return "hello", 3.14, io.EOF
} }
var _ func() (string, float64, os.Error) = f var _ func() (string, float64, error) = f
var _ func() (string, float64, os.Error) = g var _ func() (string, float64, error) = g
func main() { func main() {
x, y, z := g() x, y, z := g()
if x != "hello" || y != 3.14 || z != os.EOF { if x != "hello" || y != 3.14 || z != io.EOF {
println("wrong", x, len(x), y, z) println("wrong", x, len(x), y, z)
} }
} }

View File

@ -9,12 +9,8 @@
package main package main
import (
"os"
)
type Inner struct { type Inner struct {
F func() os.Error F func() error
} }
type Outer struct { type Outer struct {
@ -23,4 +19,4 @@ type Outer struct {
// calls makeclosure twice on same closure // calls makeclosure twice on same closure
var Foo = Outer{[]Inner{Inner{func() os.Error{ return nil }}}} var Foo = Outer{[]Inner{Inner{func() error { return nil }}}}

View File

@ -5,7 +5,6 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
package main package main
import os "os"
type t1 int type t1 int
type t2 int type t2 int
@ -23,7 +22,7 @@ func f8(os int) int
func f9(os int) int { func f9(os int) int {
return os return os
} }
func f10(err os.Error) os.Error { func f10(err error) error {
return err return err
} }
func f11(t1 string) string { func f11(t1 string) string {

View File

@ -66,7 +66,7 @@ func parseDir(dirpath string) map[string]*ast.Package {
// get package AST // get package AST
pkgs, err := parser.ParseDir(token.NewFileSet(), dirpath, filter, parser.ParseComments) pkgs, err := parser.ParseDir(token.NewFileSet(), dirpath, filter, parser.ParseComments)
if err != nil { if err != nil {
println("parse", dirpath, err.String()) println("parse", dirpath, err.Error())
panic("fail") panic("fail")
} }
return pkgs return pkgs

View File

@ -11,10 +11,7 @@
package main package main
import ( import "strings"
"os"
"strings"
)
var x = make([]byte, 10) var x = make([]byte, 10)
@ -33,7 +30,7 @@ func mustRecover(s string) {
if v == nil { if v == nil {
panic("expected panic") panic("expected panic")
} }
if e := v.(os.Error).String(); strings.Index(e, s) < 0 { if e := v.(error).Error(); strings.Index(e, s) < 0 {
panic("want: " + s + "; have: " + e) panic("want: " + s + "; have: " + e)
} }
} }

View File

@ -35,7 +35,7 @@ func check(name string, f func(), err string) {
println(name, "panicked but not with runtime.Error") println(name, "panicked but not with runtime.Error")
return return
} }
s := runt.String() s := runt.Error()
if strings.Index(s, err) < 0 { if strings.Index(s, err) < 0 {
bug() bug()
println(name, "panicked with", s, "not", err) println(name, "panicked with", s, "not", err)

View File

@ -158,10 +158,10 @@ var errorTests = []ErrorTest{
ErrorTest{"complex128 1/0", func() { use(e128 / d128) }, ""}, ErrorTest{"complex128 1/0", func() { use(e128 / d128) }, ""},
} }
func error(fn func()) (error string) { func error_(fn func()) (error string) {
defer func() { defer func() {
if e := recover(); e != nil { if e := recover(); e != nil {
error = e.(runtime.Error).String() error = e.(runtime.Error).Error()
} }
}() }()
fn() fn()
@ -196,7 +196,7 @@ func main() {
if t.err != "" { if t.err != "" {
continue continue
} }
err := error(t.fn) err := error_(t.fn)
switch { switch {
case t.err == "" && err == "": case t.err == "" && err == "":
// fine // fine