Commit 60ce95d7 authored by Russ Cox's avatar Russ Cox

code changes for array conversion.

as a reminder, the old conversion
was that you could write

	var arr [10]byte;
	var slice []byte;
	slice = arr;

but now you have to write

	slice = &arr;

the change eliminates an implicit &, so that
the only implicit &s left are in the . operator
and in string(arr).

also, removed utf8.EncodeRuneToString
in favor of string(rune).

R=r
DELTA=83  (1 added, 23 deleted, 59 changed)
OCL=27531
CL=27534
parent 65d397f7
...@@ -15,7 +15,7 @@ func cat(f *file.File) { ...@@ -15,7 +15,7 @@ func cat(f *file.File) {
const NBUF = 512; const NBUF = 512;
var buf [NBUF]byte; var buf [NBUF]byte;
for { for {
switch nr, er := f.Read(buf); true { switch nr, er := f.Read(&buf); true {
case nr < 0: case nr < 0:
fmt.Fprintf(os.Stderr, "error reading from %s: %s\n", f.String(), er.String()); fmt.Fprintf(os.Stderr, "error reading from %s: %s\n", f.String(), er.String());
sys.Exit(1); sys.Exit(1);
......
...@@ -57,7 +57,7 @@ func cat(r reader) { ...@@ -57,7 +57,7 @@ func cat(r reader) {
r = newRotate13(r) r = newRotate13(r)
} }
for { for {
switch nr, er := r.Read(buf); { switch nr, er := r.Read(&buf); {
case nr < 0: case nr < 0:
fmt.Fprintf(os.Stderr, "error reading from %s: %s\n", r.String(), er.String()); fmt.Fprintf(os.Stderr, "error reading from %s: %s\n", r.String(), er.String());
sys.Exit(1); sys.Exit(1);
......
...@@ -16,6 +16,6 @@ func sum(a []int) int { // returns an int ...@@ -16,6 +16,6 @@ func sum(a []int) int { // returns an int
func main() { func main() {
s := sum([3]int{1,2,3}); // a slice of the array is passed to sum s := sum(&[3]int{1,2,3}); // a slice of the array is passed to sum
fmt.Print(s, "\n"); fmt.Print(s, "\n");
} }
...@@ -96,7 +96,7 @@ func Run(argv0 string, argv, envv []string, stdin, stdout, stderr int) (p *Cmd, ...@@ -96,7 +96,7 @@ func Run(argv0 string, argv, envv []string, stdin, stdout, stderr int) (p *Cmd,
} }
// Run command. // Run command.
p.Pid, err = os.ForkExec(argv0, argv, envv, fd); p.Pid, err = os.ForkExec(argv0, argv, envv, &fd);
if err != nil { if err != nil {
goto Error; goto Error;
} }
......
...@@ -19,7 +19,7 @@ func TestRunCat(t *testing.T) { ...@@ -19,7 +19,7 @@ func TestRunCat(t *testing.T) {
io.WriteString(cmd.Stdin, "hello, world\n"); io.WriteString(cmd.Stdin, "hello, world\n");
cmd.Stdin.Close(); cmd.Stdin.Close();
var buf [64]byte; var buf [64]byte;
n, err1 := io.Readn(cmd.Stdout, buf); n, err1 := io.Readn(cmd.Stdout, &buf);
if err1 != nil && err1 != io.ErrEOF { if err1 != nil && err1 != io.ErrEOF {
t.Fatalf("reading from /bin/cat: %v", err1); t.Fatalf("reading from /bin/cat: %v", err1);
} }
...@@ -38,7 +38,7 @@ func TestRunEcho(t *testing.T) { ...@@ -38,7 +38,7 @@ func TestRunEcho(t *testing.T) {
t.Fatalf("opencmd /bin/echo: %v", err); t.Fatalf("opencmd /bin/echo: %v", err);
} }
var buf [64]byte; var buf [64]byte;
n, err1 := io.Readn(cmd.Stdout, buf); n, err1 := io.Readn(cmd.Stdout, &buf);
if err1 != nil && err1 != io.ErrEOF { if err1 != nil && err1 != io.ErrEOF {
t.Fatalf("reading from /bin/echo: %v", err1); t.Fatalf("reading from /bin/echo: %v", err1);
} }
......
...@@ -104,7 +104,7 @@ func charString(ch int) string { ...@@ -104,7 +104,7 @@ func charString(ch int) string {
case '\v': s = `\v`; case '\v': s = `\v`;
case '\\': s = `\\`; case '\\': s = `\\`;
case '\'': s = `\'`; case '\'': s = `\'`;
default : s = utf8.EncodeRuneToString(ch); default : s = string(ch);
} }
return "'" + s + "' (U+" + strconv.Itob(ch, 16) + ")"; return "'" + s + "' (U+" + strconv.Itob(ch, 16) + ")";
} }
......
...@@ -51,7 +51,7 @@ func (d *Digest) Write(p []byte) (nn int, err *os.Error) { ...@@ -51,7 +51,7 @@ func (d *Digest) Write(p []byte) (nn int, err *os.Error) {
} }
d.nx += n; d.nx += n;
if d.nx == _Chunk { if d.nx == _Chunk {
_Block(d, d.x); _Block(d, &d.x);
d.nx = 0; d.nx = 0;
} }
p = p[n:len(p)]; p = p[n:len(p)];
......
...@@ -53,7 +53,7 @@ func (d *Digest) Write(p []byte) (nn int, err *os.Error) { ...@@ -53,7 +53,7 @@ func (d *Digest) Write(p []byte) (nn int, err *os.Error) {
} }
d.nx += n; d.nx += n;
if d.nx == _Chunk { if d.nx == _Chunk {
_Block(d, d.x); _Block(d, &d.x);
d.nx = 0; d.nx = 0;
} }
p = p[n:len(p)]; p = p[n:len(p)];
......
...@@ -142,7 +142,7 @@ func serveFileInternal(c *Conn, r *Request, name string, redirect bool) { ...@@ -142,7 +142,7 @@ func serveFileInternal(c *Conn, r *Request, name string, redirect bool) {
} else { } else {
// read first chunk to decide between utf-8 text and binary // read first chunk to decide between utf-8 text and binary
var buf [1024]byte; var buf [1024]byte;
n, err := io.Readn(f, buf); n, err := io.Readn(f, &buf);
b := buf[0:n]; b := buf[0:n];
if isText(b) { if isText(b) {
c.SetHeader("Content-Type", "text-plain; charset=utf-8"); c.SetHeader("Content-Type", "text-plain; charset=utf-8");
......
...@@ -26,7 +26,7 @@ func checkWrite(t *testing.T, w io.Write, data []byte, c chan int) { ...@@ -26,7 +26,7 @@ func checkWrite(t *testing.T, w io.Write, data []byte, c chan int) {
func TestPipe1(t *testing.T) { func TestPipe1(t *testing.T) {
c := make(chan int); c := make(chan int);
r, w := io.Pipe(); r, w := io.Pipe();
var buf [64]byte; var buf = make([]byte, 64);
go checkWrite(t, w, io.StringBytes("hello, world"), c); go checkWrite(t, w, io.StringBytes("hello, world"), c);
n, err := r.Read(buf); n, err := r.Read(buf);
if err != nil { if err != nil {
...@@ -41,7 +41,7 @@ func TestPipe1(t *testing.T) { ...@@ -41,7 +41,7 @@ func TestPipe1(t *testing.T) {
} }
func reader(t *testing.T, r io.Read, c chan int) { func reader(t *testing.T, r io.Read, c chan int) {
var buf [64]byte; var buf = make([]byte, 64);
for { for {
n, err := r.Read(buf); n, err := r.Read(buf);
if err != nil { if err != nil {
...@@ -59,7 +59,7 @@ func TestPipe2(t *testing.T) { ...@@ -59,7 +59,7 @@ func TestPipe2(t *testing.T) {
c := make(chan int); c := make(chan int);
r, w := io.Pipe(); r, w := io.Pipe();
go reader(t, r, c); go reader(t, r, c);
var buf [64]byte; var buf = make([]byte, 64);
for i := 0; i < 5; i++ { for i := 0; i < 5; i++ {
p := buf[0:5+i*10]; p := buf[0:5+i*10];
n, err := w.Write(p); n, err := w.Write(p);
...@@ -91,12 +91,12 @@ func writer(w io.WriteClose, buf []byte, c chan pipeReturn) { ...@@ -91,12 +91,12 @@ func writer(w io.WriteClose, buf []byte, c chan pipeReturn) {
func TestPipe3(t *testing.T) { func TestPipe3(t *testing.T) {
c := make(chan pipeReturn); c := make(chan pipeReturn);
r, w := io.Pipe(); r, w := io.Pipe();
var wdat [128]byte; var wdat = make([]byte, 128);
for i := 0; i < len(wdat); i++ { for i := 0; i < len(wdat); i++ {
wdat[i] = byte(i); wdat[i] = byte(i);
} }
go writer(w, wdat, c); go writer(w, wdat, c);
var rdat [1024]byte; var rdat = make([]byte, 1024);
tot := 0; tot := 0;
for n := 1; n <= 256; n *= 2 { for n := 1; n <= 256; n *= 2 {
nn, err := r.Read(rdat[tot:tot+n]); nn, err := r.Read(rdat[tot:tot+n]);
...@@ -148,7 +148,7 @@ func testPipeReadClose(t *testing.T, async bool) { ...@@ -148,7 +148,7 @@ func testPipeReadClose(t *testing.T, async bool) {
} else { } else {
delayClose(t, w, c); delayClose(t, w, c);
} }
var buf [64]byte; var buf = make([]byte, 64);
n, err := r.Read(buf); n, err := r.Read(buf);
<-c; <-c;
if err != nil { if err != nil {
......
...@@ -265,8 +265,8 @@ func (s *pollServer) Run() { ...@@ -265,8 +265,8 @@ func (s *pollServer) Run() {
} }
if fd == s.pr.Fd() { if fd == s.pr.Fd() {
// Drain our wakeup pipe. // Drain our wakeup pipe.
for nn, e := s.pr.Read(scratch); nn > 0; { for nn, e := s.pr.Read(&scratch); nn > 0; {
nn, e = s.pr.Read(scratch) nn, e = s.pr.Read(&scratch)
} }
// Read from channels // Read from channels
...@@ -287,9 +287,9 @@ func (s *pollServer) Run() { ...@@ -287,9 +287,9 @@ func (s *pollServer) Run() {
} }
} }
var wakeupbuf [1]byte;
func (s *pollServer) Wakeup() { func (s *pollServer) Wakeup() {
var b [1]byte; s.pw.Write(&wakeupbuf)
s.pw.Write(b)
} }
func (s *pollServer) WaitRead(fd *netFD) { func (s *pollServer) WaitRead(fd *netFD) {
......
...@@ -49,7 +49,7 @@ func (p *pollster) AddFD(fd int64, mode int, repeat bool) *os.Error { ...@@ -49,7 +49,7 @@ func (p *pollster) AddFD(fd int64, mode int, repeat bool) *os.Error {
ev.Flags |= syscall.EV_ONESHOT ev.Flags |= syscall.EV_ONESHOT
} }
n, e := syscall.Kevent(p.kq, events, events, nil); n, e := syscall.Kevent(p.kq, &events, &events, nil);
if e != 0 { if e != 0 {
return os.ErrnoToError(e) return os.ErrnoToError(e)
} }
...@@ -78,7 +78,7 @@ func (p *pollster) DelFD(fd int64, mode int) { ...@@ -78,7 +78,7 @@ func (p *pollster) DelFD(fd int64, mode int) {
// EV_RECEIPT - generate fake EV_ERROR as result of add, // EV_RECEIPT - generate fake EV_ERROR as result of add,
// rather than waiting for real event // rather than waiting for real event
ev.Flags = syscall.EV_DELETE | syscall.EV_RECEIPT; ev.Flags = syscall.EV_DELETE | syscall.EV_RECEIPT;
syscall.Kevent(p.kq, events, events, nil); syscall.Kevent(p.kq, &events, &events, nil);
} }
func (p *pollster) WaitFD(nsec int64) (fd int64, mode int, err *os.Error) { func (p *pollster) WaitFD(nsec int64) (fd int64, mode int, err *os.Error) {
...@@ -91,7 +91,7 @@ func (p *pollster) WaitFD(nsec int64) (fd int64, mode int, err *os.Error) { ...@@ -91,7 +91,7 @@ func (p *pollster) WaitFD(nsec int64) (fd int64, mode int, err *os.Error) {
t.Sec = nsec / 1e9; t.Sec = nsec / 1e9;
t.Nsec = uint64(nsec % 1e9); t.Nsec = uint64(nsec % 1e9);
} }
nn, e := syscall.Kevent(p.kq, nil, p.eventbuf, t); nn, e := syscall.Kevent(p.kq, nil, &p.eventbuf, t);
if e != 0 { if e != 0 {
if e == syscall.EINTR { if e == syscall.EINTR {
continue continue
......
...@@ -15,7 +15,7 @@ func runEcho(fd io.ReadWrite, done chan<- int) { ...@@ -15,7 +15,7 @@ func runEcho(fd io.ReadWrite, done chan<- int) {
var buf [1024]byte; var buf [1024]byte;
for { for {
n, err := fd.Read(buf); n, err := fd.Read(&buf);
if err != nil || n == 0 { if err != nil || n == 0 {
break; break;
} }
...@@ -58,7 +58,7 @@ func connect(t *testing.T, network, addr string) { ...@@ -58,7 +58,7 @@ func connect(t *testing.T, network, addr string) {
t.Fatalf("fd.Write(%q) = %d, %v", b, n, errno); t.Fatalf("fd.Write(%q) = %d, %v", b, n, errno);
} }
n, errno = fd.Read(b1); n, errno = fd.Read(&b1);
if n != len(b) { if n != len(b) {
t.Fatalf("fd.Read() = %d, %v", n, errno); t.Fatalf("fd.Read() = %d, %v", n, errno);
} }
......
...@@ -20,7 +20,7 @@ func testTimeout(t *testing.T, network, addr string) { ...@@ -20,7 +20,7 @@ func testTimeout(t *testing.T, network, addr string) {
t0 := time.Nanoseconds(); t0 := time.Nanoseconds();
fd.SetReadTimeout(1e8); // 100ms fd.SetReadTimeout(1e8); // 100ms
var b [100]byte; var b [100]byte;
n, err1 := fd.Read(b); n, err1 := fd.Read(&b);
t1 := time.Nanoseconds(); t1 := time.Nanoseconds();
if n != 0 || err1 != os.EAGAIN { if n != 0 || err1 != os.EAGAIN {
t.Errorf("fd.Read on %s %s did not return 0, EAGAIN: %v, %v", network, addr, n, err1); t.Errorf("fd.Read on %s %s did not return 0, EAGAIN: %v, %v", network, addr, n, err1);
......
...@@ -38,7 +38,7 @@ func size(name string, t *testing.T) uint64 { ...@@ -38,7 +38,7 @@ func size(name string, t *testing.T) uint64 {
var buf [100]byte; var buf [100]byte;
len := 0; len := 0;
for { for {
n, e := file.Read(buf); n, e := file.Read(&buf);
if n < 0 || e != nil { if n < 0 || e != nil {
t.Fatal("read failed:", err); t.Fatal("read failed:", err);
} }
......
...@@ -48,8 +48,8 @@ func TestSortStringArray(t *testing.T) { ...@@ -48,8 +48,8 @@ func TestSortStringArray(t *testing.T) {
func TestSortInts(t *testing.T) { func TestSortInts(t *testing.T) {
data := ints; data := ints;
sort.SortInts(data); sort.SortInts(&data);
if !sort.IntsAreSorted(data) { if !sort.IntsAreSorted(&data) {
t.Errorf("sorted %v", ints); t.Errorf("sorted %v", ints);
t.Errorf(" got %v", data); t.Errorf(" got %v", data);
} }
...@@ -57,8 +57,8 @@ func TestSortInts(t *testing.T) { ...@@ -57,8 +57,8 @@ func TestSortInts(t *testing.T) {
func TestSortFloats(t *testing.T) { func TestSortFloats(t *testing.T) {
data := floats; data := floats;
sort.SortFloats(data); sort.SortFloats(&data);
if !sort.FloatsAreSorted(data) { if !sort.FloatsAreSorted(&data) {
t.Errorf("sorted %v", floats); t.Errorf("sorted %v", floats);
t.Errorf(" got %v", data); t.Errorf(" got %v", data);
} }
...@@ -66,8 +66,8 @@ func TestSortFloats(t *testing.T) { ...@@ -66,8 +66,8 @@ func TestSortFloats(t *testing.T) {
func TestSortStrings(t *testing.T) { func TestSortStrings(t *testing.T) {
data := strings; data := strings;
sort.SortStrings(data); sort.SortStrings(&data);
if !sort.StringsAreSorted(data) { if !sort.StringsAreSorted(&data) {
t.Errorf("sorted %v", strings); t.Errorf("sorted %v", strings);
t.Errorf(" got %v", data); t.Errorf(" got %v", data);
} }
......
...@@ -249,7 +249,7 @@ func (b *Writer) writePadding(textw, cellw int) (err *os.Error) { ...@@ -249,7 +249,7 @@ func (b *Writer) writePadding(textw, cellw int) (err *os.Error) {
} }
for n > len(b.padbytes) { for n > len(b.padbytes) {
err = b.write0(b.padbytes); err = b.write0(&b.padbytes);
if err != nil { if err != nil {
goto exit; goto exit;
} }
......
...@@ -256,17 +256,6 @@ func EncodeRune(rune int, p []byte) int { ...@@ -256,17 +256,6 @@ func EncodeRune(rune int, p []byte) int {
return 4; return 4;
} }
// EncodeRuneToString returns the UTF-8 encoding of the rune.
func EncodeRuneToString(rune int) string {
if rune < _Rune1Max {
return string([1]byte{byte(rune)})
}
var buf [UTFMax]byte;
size := EncodeRune(rune, buf);
return string(buf[0:size]);
}
// RuneCount returns the number of runes in p. Erroneous and short // RuneCount returns the number of runes in p. Erroneous and short
// encodings are treated as single runes of width 1 byte. // encodings are treated as single runes of width 1 byte.
func RuneCount(p []byte) int { func RuneCount(p []byte) int {
......
...@@ -90,7 +90,7 @@ func TestEncodeRune(t *testing.T) { ...@@ -90,7 +90,7 @@ func TestEncodeRune(t *testing.T) {
m := utf8map[i]; m := utf8map[i];
b := bytes(m.str); b := bytes(m.str);
var buf [10]byte; var buf [10]byte;
n := utf8.EncodeRune(m.rune, buf); n := utf8.EncodeRune(m.rune, &buf);
b1 := buf[0:n]; b1 := buf[0:n];
if !equalBytes(b, b1) { if !equalBytes(b, b1) {
t.Errorf("EncodeRune(0x%04x) = %q want %q", m.rune, b1, b); t.Errorf("EncodeRune(0x%04x) = %q want %q", m.rune, b1, b);
...@@ -98,17 +98,6 @@ func TestEncodeRune(t *testing.T) { ...@@ -98,17 +98,6 @@ func TestEncodeRune(t *testing.T) {
} }
} }
func TestEncodeRuneToString(t *testing.T) {
for i := 0; i < len(utf8map); i++ {
m := utf8map[i];
s := m.str;
s1 := utf8.EncodeRuneToString(m.rune);
if s != s1 {
t.Errorf("EncodeRuneToString(0x%04x) = %s want %s", m.rune, s1, s);
}
}
}
func TestDecodeRune(t *testing.T) { func TestDecodeRune(t *testing.T) {
for i := 0; i < len(utf8map); i++ { for i := 0; i < len(utf8map); i++ {
m := utf8map[i]; m := utf8map[i];
......
...@@ -13,7 +13,7 @@ type T struct { ...@@ -13,7 +13,7 @@ type T struct {
func main() { func main() {
var ta []*T; var ta []*T;
ta = *new([1]*T); // TODO: the first * shouldn't be necessary ta = new([1]*T);
ta[0] = nil; ta[0] = nil;
} }
/* /*
......
...@@ -23,7 +23,7 @@ func main() { ...@@ -23,7 +23,7 @@ func main() {
as := new([2]string); as := new([2]string);
as[0] = "0"; as[0] = "0";
as[1] = "1"; as[1] = "1";
m["0"] = *as; m["0"] = as;
a := m["0"]; a := m["0"];
a[0] = "x"; a[0] = "x";
......
...@@ -96,8 +96,8 @@ func ...@@ -96,8 +96,8 @@ func
testpdpf1() testpdpf1()
{ {
a := new([40]int); a := new([40]int);
setpd(*a); setpd(a);
res(sumpd(*a), 0, 40); res(sumpd(a), 0, 40);
b := (*a)[5:30]; b := (*a)[5:30];
res(sumpd(b), 5, 30); res(sumpd(b), 5, 30);
...@@ -109,8 +109,8 @@ testpdpf2() ...@@ -109,8 +109,8 @@ testpdpf2()
{ {
var a [80]int; var a [80]int;
setpd(a); setpd(&a);
res(sumpd(a), 0, 80); res(sumpd(&a), 0, 80);
} }
// generate bounds error with ptr dynamic // generate bounds error with ptr dynamic
......
...@@ -241,7 +241,7 @@ func atom(i int) *Slist // BUG: uses tokenbuf; should take argument ...@@ -241,7 +241,7 @@ func atom(i int) *Slist // BUG: uses tokenbuf; should take argument
slist.atom.integer = i; slist.atom.integer = i;
slist.isstring = false; slist.isstring = false;
} else { } else {
slist.atom.str = string(tokenbuf)[0:tokenlen]; slist.atom.str = string(tokenbuf[0:tokenlen]);
slist.isstring = true; slist.isstring = true;
} }
slist.isatom = true; slist.isatom = true;
......
...@@ -43,7 +43,7 @@ func readfile(filename string) ([]byte, *OS.Error) { ...@@ -43,7 +43,7 @@ func readfile(filename string) ([]byte, *OS.Error) {
return []byte{}, err; return []byte{}, err;
} }
var buf [1<<20]byte; var buf [1<<20]byte;
n, err1 := IO.Readn(f, buf); n, err1 := IO.Readn(f, &buf);
f.Close(); f.Close();
if err1 == IO.ErrEOF { if err1 == IO.ErrEOF {
err1 = nil; err1 = nil;
......
...@@ -87,5 +87,5 @@ func IntToString(x, base int) string { ...@@ -87,5 +87,5 @@ func IntToString(x, base int) string {
buf[i] = '-'; buf[i] = '-';
} }
return string(buf)[i : len(buf)]; return string(buf[i : len(buf)]);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment