summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rwxr-xr-xsrc/lib/bignum.go30
-rw-r--r--src/lib/bufio.go30
-rw-r--r--src/lib/bufio_test.go10
-rw-r--r--src/lib/container/array/array.go2
-rw-r--r--src/lib/container/array/intarray.go2
-rw-r--r--src/lib/flag.go8
-rw-r--r--src/lib/hash/adler32.go2
-rw-r--r--src/lib/hash/crc32.go2
-rw-r--r--src/lib/hash/md5.go2
-rw-r--r--src/lib/hash/sha1.go2
-rw-r--r--src/lib/http/conn.go2
-rw-r--r--src/lib/http/request.go10
-rw-r--r--src/lib/http/url.go2
-rw-r--r--src/lib/io/bytebuffer.go2
-rw-r--r--src/lib/json/generic.go10
-rw-r--r--src/lib/json/parse.go4
-rw-r--r--src/lib/json/struct_test.go4
-rw-r--r--src/lib/net/dialgoogle_test.go2
-rw-r--r--src/lib/net/dnsclient.go16
-rw-r--r--src/lib/net/dnsconfig.go2
-rw-r--r--src/lib/net/dnsmsg.go35
-rw-r--r--src/lib/net/fd.go12
-rw-r--r--src/lib/net/fd_darwin.go6
-rw-r--r--src/lib/net/fd_linux.go8
-rw-r--r--src/lib/net/ip.go40
-rw-r--r--src/lib/net/net.go30
-rw-r--r--src/lib/net/net_darwin.go23
-rw-r--r--src/lib/net/net_linux.go10
-rw-r--r--src/lib/net/port.go4
-rw-r--r--src/lib/net/tcpserver_test.go12
-rw-r--r--src/lib/once.go6
-rw-r--r--src/lib/regexp/regexp.go40
-rw-r--r--src/lib/strconv/atof.go2
-rw-r--r--src/lib/strconv/decimal.go2
-rw-r--r--src/lib/sync/mutex_test.go8
-rw-r--r--src/lib/syscall/file_linux.go10
-rw-r--r--src/lib/tabwriter/tabwriter.go22
-rw-r--r--src/lib/testing.go4
-rw-r--r--src/lib/time/tick.go6
-rw-r--r--src/lib/time/time.go2
-rw-r--r--src/lib/time/zoneinfo.go34
41 files changed, 218 insertions, 242 deletions
diff --git a/src/lib/bignum.go b/src/lib/bignum.go
index c4a35f20b..5b3e6e889 100755
--- a/src/lib/bignum.go
+++ b/src/lib/bignum.go
@@ -164,9 +164,9 @@ func (x *Natural) Add(y *Natural) *Natural {
if n < m {
return y.Add(x);
}
-
+
c := Digit(0);
- z := new(Natural, n + 1);
+ z := new(*Natural, n + 1);
i := 0;
for i < m {
t := c + x[i] + y[i];
@@ -193,9 +193,9 @@ func (x *Natural) Sub(y *Natural) *Natural {
if n < m {
panic("underflow")
}
-
+
c := Digit(0);
- z := new(Natural, n);
+ z := new(*Natural, n);
i := 0;
for i < m {
t := c + x[i] - y[i];
@@ -253,7 +253,7 @@ func (x *Natural) Mul(y *Natural) *Natural {
n := len(x);
m := len(y);
- z := new(Natural, n + m);
+ z := new(*Natural, n + m);
for j := 0; j < m; j++ {
d := y[j];
if d != 0 {
@@ -296,7 +296,7 @@ func Unpack(x *Natural) []Digit2 {
func Pack(x []Digit2) *Natural {
n := (len(x) + 1) / 2;
- z := new(Natural, n);
+ z := new(*Natural, n);
if len(x) & 1 == 1 {
// handle odd len(x)
n--;
@@ -376,7 +376,7 @@ func DivMod(x, y []Digit2) ([]Digit2, []Digit2) {
} else {
// general case
assert(2 <= m && m <= n);
-
+
// normalize x and y
// TODO Instead of multiplying, it would be sufficient to
// shift y such that the normalization condition is
@@ -472,7 +472,7 @@ func Shl(z, x []Digit, s uint) Digit {
func (x *Natural) Shl(s uint) *Natural {
n := uint(len(x));
m := n + s/W;
- z := new(Natural, m+1);
+ z := new(*Natural, m+1);
z[m] = Shl(z[m-n : m], x, s%W);
@@ -497,7 +497,7 @@ func (x *Natural) Shr(s uint) *Natural {
if m > n { // check for underflow
m = 0;
}
- z := new(Natural, m);
+ z := new(*Natural, m);
Shr(z, x[n-m : n], s%W);
@@ -512,7 +512,7 @@ func (x *Natural) And(y *Natural) *Natural {
return y.And(x);
}
- z := new(Natural, m);
+ z := new(*Natural, m);
for i := 0; i < m; i++ {
z[i] = x[i] & y[i];
}
@@ -536,7 +536,7 @@ func (x *Natural) Or(y *Natural) *Natural {
return y.Or(x);
}
- z := new(Natural, n);
+ z := new(*Natural, n);
for i := 0; i < m; i++ {
z[i] = x[i] | y[i];
}
@@ -553,7 +553,7 @@ func (x *Natural) Xor(y *Natural) *Natural {
return y.Xor(x);
}
- z := new(Natural, n);
+ z := new(*Natural, n);
for i := 0; i < m; i++ {
z[i] = x[i] ^ y[i];
}
@@ -630,7 +630,7 @@ func (x *Natural) ToString(base uint) string {
s := new([]byte, n);
// don't destroy x
- t := new(Natural, len(x));
+ t := new(*Natural, len(x));
Copy(t, x);
// convert
@@ -682,7 +682,7 @@ func HexValue(ch byte) uint {
func MulAdd1(x *Natural, d, c Digit) *Natural {
assert(IsSmall(d-1) && IsSmall(c));
n := len(x);
- z := new(Natural, n + 1);
+ z := new(*Natural, n + 1);
for i := 0; i < n; i++ {
t := c + x[i]*d;
@@ -1088,7 +1088,7 @@ func (x *Integer) ToString(base uint) string {
return s + x.mant.ToString(base);
}
-
+
func (x *Integer) String() string {
return x.ToString(10);
}
diff --git a/src/lib/bufio.go b/src/lib/bufio.go
index 8df00731c..68be14320 100644
--- a/src/lib/bufio.go
+++ b/src/lib/bufio.go
@@ -50,7 +50,7 @@ export func NewBufReadSize(rd io.Read, size int) (b *BufRead, err *os.Error) {
if size <= 0 {
return nil, BadBufSize
}
- b = new(BufRead);
+ b = new(*BufRead);
b.buf = new([]byte, size);
b.rd = rd;
return b, nil
@@ -191,11 +191,9 @@ func (b *BufRead) Buffered() int {
// For internal (or advanced) use only.
// Use ReadLineString or ReadLineBytes instead.
-var NIL []byte // TODO(rsc): should be able to use nil
-
func (b *BufRead) ReadLineSlice(delim byte) (line []byte, err *os.Error) {
if b.err != nil {
- return NIL, b.err
+ return nil, b.err
}
// Look in buffer.
@@ -210,7 +208,7 @@ func (b *BufRead) ReadLineSlice(delim byte) (line []byte, err *os.Error) {
n := b.Buffered();
b.Fill();
if b.err != nil {
- return NIL, b.err
+ return nil, b.err
}
if b.Buffered() == n { // no data added; end of file
line := b.buf[b.r:b.w];
@@ -227,12 +225,12 @@ func (b *BufRead) ReadLineSlice(delim byte) (line []byte, err *os.Error) {
// Buffer is full?
if b.Buffered() >= len(b.buf) {
- return NIL, BufferFull
+ return nil, BufferFull
}
}
// BUG 6g bug100
- return NIL, nil
+ return nil, nil
}
// Read until the first occurrence of delim in the input,
@@ -242,7 +240,7 @@ func (b *BufRead) ReadLineSlice(delim byte) (line []byte, err *os.Error) {
// we might have read more than the buffer size.)
func (b *BufRead) ReadLineBytes(delim byte) (line []byte, err *os.Error) {
if b.err != nil {
- return NIL, b.err
+ return nil, b.err
}
// Use ReadLineSlice to look for array,
@@ -279,7 +277,7 @@ func (b *BufRead) ReadLineBytes(delim byte) (line []byte, err *os.Error) {
}
// Grow list if needed.
- if len(full) == 0 {
+ if full == nil {
full = new([][]byte, 16);
} else if nfull >= len(full) {
newfull := new([][]byte, len(full)*2);
@@ -313,26 +311,18 @@ func (b *BufRead) ReadLineBytes(delim byte) (line []byte, err *os.Error) {
return buf, err
}
-// BUG(bugs/bug102.go): string(empty bytes array) throws error
-func ToString(p []byte) string {
- if len(p) == 0 {
- return ""
- }
- return string(p)
-}
-
// Read until the first occurrence of delim in the input,
// returning a new string containing the line.
// If savedelim, keep delim in the result; otherwise chop it off.
func (b *BufRead) ReadLineString(delim byte, savedelim bool) (line string, err *os.Error) {
bytes, e := b.ReadLineBytes(delim);
if e != nil {
- return ToString(bytes), e
+ return string(bytes), e
}
if !savedelim {
bytes = bytes[0:len(bytes)-1]
}
- return ToString(bytes), nil
+ return string(bytes), nil
}
@@ -349,7 +339,7 @@ export func NewBufWriteSize(wr io.Write, size int) (b *BufWrite, err *os.Error)
if size <= 0 {
return nil, BadBufSize
}
- b = new(BufWrite);
+ b = new(*BufWrite);
b.buf = new([]byte, size);
b.wr = wr;
return b, nil
diff --git a/src/lib/bufio_test.go b/src/lib/bufio_test.go
index 897f331d4..fecc7780d 100644
--- a/src/lib/bufio_test.go
+++ b/src/lib/bufio_test.go
@@ -34,7 +34,7 @@ type ByteReader struct {
}
func NewByteReader(p []byte) io.Read {
- b := new(ByteReader);
+ b := new(*ByteReader);
b.p = p;
return b
}
@@ -56,7 +56,7 @@ type HalfByteReader struct {
}
func NewHalfByteReader(p []byte) io.Read {
- b := new(HalfByteReader);
+ b := new(*HalfByteReader);
b.p = p;
return b
}
@@ -80,7 +80,7 @@ type Rot13Reader struct {
}
func NewRot13Reader(r io.Read) *Rot13Reader {
- r13 := new(Rot13Reader);
+ r13 := new(*Rot13Reader);
r13.r = r;
return r13
}
@@ -238,7 +238,7 @@ type ByteWriter struct {
}
func NewByteWriter() WriteBuffer {
- return new(ByteWriter)
+ return new(*ByteWriter)
}
func (w *ByteWriter) Write(p []byte) (int, *os.Error) {
@@ -266,7 +266,7 @@ type HalfByteWriter struct {
}
func NewHalfByteWriter() WriteBuffer {
- w := new(HalfByteWriter);
+ w := new(*HalfByteWriter);
w.bw = NewByteWriter();
return w
}
diff --git a/src/lib/container/array/array.go b/src/lib/container/array/array.go
index 5c0353613..e87f4266b 100644
--- a/src/lib/container/array/array.go
+++ b/src/lib/container/array/array.go
@@ -36,7 +36,7 @@ func (p *Array) Init(initial_len int) *Array {
export func New(len int) *Array {
- return new(Array).Init(len)
+ return new(*Array).Init(len)
}
diff --git a/src/lib/container/array/intarray.go b/src/lib/container/array/intarray.go
index eb7e83907..a02e56883 100644
--- a/src/lib/container/array/intarray.go
+++ b/src/lib/container/array/intarray.go
@@ -19,7 +19,7 @@ func (p *IntArray) Init(len int) *IntArray {
export func NewIntArray(len int) *IntArray {
- return new(IntArray).Init(len)
+ return new(*IntArray).Init(len)
}
diff --git a/src/lib/flag.go b/src/lib/flag.go
index a1189a67f..bc962f699 100644
--- a/src/lib/flag.go
+++ b/src/lib/flag.go
@@ -289,8 +289,8 @@ export type Flag struct {
}
type Flags struct {
- actual *map[string] *Flag;
- formal *map[string] *Flag;
+ actual map[string] *Flag;
+ formal map[string] *Flag;
first_arg int;
flag_list *Flag; // BUG: remove when we can iterate over maps
}
@@ -318,7 +318,7 @@ func (f *Flag) SVal() string {
}
func New() *Flags {
- f := new(Flags);
+ f := new(*Flags);
f.first_arg = 1; // 0 is the program name, 1 is first arg
f.actual = new(map[string] *Flag);
f.formal = new(map[string] *Flag);
@@ -361,7 +361,7 @@ export func NArg() int {
}
func Add(name string, value Value, usage string) *Flag {
- f := new(Flag);
+ f := new(*Flag);
f.name = name;
f.usage = usage;
f.value = value;
diff --git a/src/lib/hash/adler32.go b/src/lib/hash/adler32.go
index cebbfb212..f1aa73244 100644
--- a/src/lib/hash/adler32.go
+++ b/src/lib/hash/adler32.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// Adler-32 checksum.
+// Adler-32 checksum.
// Defined in RFC 1950:
// Adler-32 is composed of two sums accumulated per byte: s1 is
// the sum of all bytes, s2 is the sum of all s1 values. Both sums
diff --git a/src/lib/hash/crc32.go b/src/lib/hash/crc32.go
index 4ab8495b5..9f6aa7d35 100644
--- a/src/lib/hash/crc32.go
+++ b/src/lib/hash/crc32.go
@@ -25,7 +25,7 @@ export const (
Koopman = 0xeb31d82e;
)
-// TODO(rsc): Change to [256]uint32
+// TODO(rsc): Change to [256]uint32 once 6g can handle it.
export type Table []uint32
export func MakeTable(poly uint32) Table {
diff --git a/src/lib/hash/md5.go b/src/lib/hash/md5.go
index 7e90e3411..773ff4a5d 100644
--- a/src/lib/hash/md5.go
+++ b/src/lib/hash/md5.go
@@ -27,7 +27,7 @@ export type Digest struct {
}
export func NewDigest() *Digest {
- d := new(Digest);
+ d := new(*Digest);
d.s[0] = A;
d.s[1] = B;
d.s[2] = C;
diff --git a/src/lib/hash/sha1.go b/src/lib/hash/sha1.go
index 3aa6903a4..97333473b 100644
--- a/src/lib/hash/sha1.go
+++ b/src/lib/hash/sha1.go
@@ -28,7 +28,7 @@ export type Digest struct {
}
export func NewDigest() *Digest {
- d := new(Digest);
+ d := new(*Digest);
d.h[0] = H0;
d.h[1] = H1;
d.h[2] = H2;
diff --git a/src/lib/http/conn.go b/src/lib/http/conn.go
index 15c0707f3..ec33d9e8e 100644
--- a/src/lib/http/conn.go
+++ b/src/lib/http/conn.go
@@ -22,7 +22,7 @@ export type Conn struct {
// Create new connection from rwc.
export func NewConn(rwc io.ReadWriteClose) (c *Conn, err *os.Error) {
- c = new(Conn);
+ c = new(*Conn);
c.rwc = rwc;
if c.br, err = bufio.NewBufRead(rwc); err != nil {
return nil, err
diff --git a/src/lib/http/request.go b/src/lib/http/request.go
index 36fa77033..c997ee81e 100644
--- a/src/lib/http/request.go
+++ b/src/lib/http/request.go
@@ -37,7 +37,7 @@ export type Request struct {
pmajor int; // 1
pminor int; // 0
- header *map[string] string;
+ header map[string] string;
close bool;
host string;
@@ -45,18 +45,16 @@ export type Request struct {
useragent string;
}
-var NIL []byte // TODO(rsc)
-
// Read a line of bytes (up to \n) from b.
// Give up if the line exceeds MaxLineLength.
// The returned bytes are a pointer into storage in
// the bufio, so they are only valid until the next bufio read.
func ReadLineBytes(b *bufio.BufRead) (p []byte, err *os.Error) {
if p, err = b.ReadLineSlice('\n'); err != nil {
- return NIL, err
+ return nil, err
}
if len(p) >= MaxLineLength {
- return NIL, LineTooLong
+ return nil, LineTooLong
}
// Chop off trailing white space.
@@ -183,7 +181,7 @@ func ParseHTTPVersion(vers string) (int, int, bool) {
// Read and parse a request from b.
export func ReadRequest(b *bufio.BufRead) (req *Request, err *os.Error) {
- req = new(Request);
+ req = new(*Request);
// First line: GET /index.html HTTP/1.0
var s string;
diff --git a/src/lib/http/url.go b/src/lib/http/url.go
index 8df18eb30..b985c9757 100644
--- a/src/lib/http/url.go
+++ b/src/lib/http/url.go
@@ -131,7 +131,7 @@ export func ParseURL(rawurl string) (url *URL, err *os.Error) {
if rawurl == "" {
return nil, BadURL
}
- url = new(URL);
+ url = new(*URL);
url.raw = rawurl;
// Split off possible leading "http:", "mailto:", etc.
diff --git a/src/lib/io/bytebuffer.go b/src/lib/io/bytebuffer.go
index d06f1486b..f85679c8f 100644
--- a/src/lib/io/bytebuffer.go
+++ b/src/lib/io/bytebuffer.go
@@ -81,7 +81,7 @@ func (b *ByteBuffer) Data() []byte {
export func NewByteBufferFromArray(buf []byte) *ByteBuffer {
- b := new(ByteBuffer);
+ b := new(*ByteBuffer);
b.buf = buf;
b.off = 0;
b.len = len(buf);
diff --git a/src/lib/json/generic.go b/src/lib/json/generic.go
index abdcd9546..4f4268459 100644
--- a/src/lib/json/generic.go
+++ b/src/lib/json/generic.go
@@ -99,7 +99,7 @@ func (j *Bool) String() string {
return "false"
}
-type Map struct { m *map[string]Json; Null }
+type Map struct { m map[string]Json; Null }
func (j *Map) Kind() int { return MapKind }
func (j *Map) Get(s string) Json {
if j.m == nil {
@@ -212,7 +212,7 @@ type JsonBuilder struct {
i int;
// or to m[k] (can't set ptr = &m[k])
- m *map[string] Json;
+ m map[string] Json;
k string;
}
@@ -273,7 +273,7 @@ func (b *JsonBuilder) Map() {
}
func (b *JsonBuilder) Elem(i int) Builder {
- bb := new(JsonBuilder);
+ bb := new(*JsonBuilder);
bb.a = b.Get().(*Array).a;
bb.i = i;
for i >= bb.a.Len() {
@@ -283,7 +283,7 @@ func (b *JsonBuilder) Elem(i int) Builder {
}
func (b *JsonBuilder) Key(k string) Builder {
- bb := new(JsonBuilder);
+ bb := new(*JsonBuilder);
bb.m = b.Get().(*Map).m;
bb.k = k;
bb.m[k] = null;
@@ -293,7 +293,7 @@ func (b *JsonBuilder) Key(k string) Builder {
export func StringToJson(s string) (json Json, ok bool, errtok string) {
var errindx int;
var j Json;
- b := new(JsonBuilder);
+ b := new(*JsonBuilder);
b.ptr = &j;
ok, errindx, errtok = Parse(s, b);
if !ok {
diff --git a/src/lib/json/parse.go b/src/lib/json/parse.go
index 1373a124a..f38bb59a6 100644
--- a/src/lib/json/parse.go
+++ b/src/lib/json/parse.go
@@ -120,7 +120,7 @@ export func Unquote(s string) (t string, ok bool) {
export func Quote(s string) string {
chr := new([]byte, utf8.UTFMax);
chr0 := chr[0:1];
- b := new(io.ByteBuffer);
+ b := new(*io.ByteBuffer);
chr[0] = '"';
b.Write(chr0);
for i := 0; i < len(s); i++ {
@@ -387,7 +387,7 @@ Switch:
}
export func Parse(s string, build Builder) (ok bool, errindx int, errtok string) {
- lex := new(Lexer);
+ lex := new(*Lexer);
lex.s = s;
lex.Next();
if ParseValue(lex, build) {
diff --git a/src/lib/json/struct_test.go b/src/lib/json/struct_test.go
index 85dbd8881..9f8615a36 100644
--- a/src/lib/json/struct_test.go
+++ b/src/lib/json/struct_test.go
@@ -26,7 +26,7 @@ type MyStruct struct {
fl float;
fl32 float32;
fl64 float64;
- a []string;
+ a *[]string; // TODO(rsc): Should be able to use []string.
my *MyStruct;
};
@@ -69,7 +69,7 @@ export func TestUnmarshal(t *testing.T) {
Check(t, m.fl==11.5, "fl", m.fl);
Check(t, m.fl32==12.25, "fl32", m.fl32);
Check(t, m.fl64==13.75, "fl64", m.fl64);
-// Check(t, m.a!=nil, "a", m.a); // TODO(rsc): uncomment once []string as interface works
+ Check(t, m.a!=nil, "a", m.a);
if m.a != nil {
Check(t, m.a[0]=="x", "a[0]", m.a[0]);
Check(t, m.a[1]=="y", "a[1]", m.a[1]);
diff --git a/src/lib/net/dialgoogle_test.go b/src/lib/net/dialgoogle_test.go
index c23d7b7c7..684439d0b 100644
--- a/src/lib/net/dialgoogle_test.go
+++ b/src/lib/net/dialgoogle_test.go
@@ -22,7 +22,7 @@ func FetchGoogle(t *testing.T, fd net.Conn, network, addr string) {
req := io.StringBytes("GET / HTTP/1.0\r\nHost: www.google.com\r\n\r\n");
n, errno := fd.Write(req);
- buf := new([1000]byte);
+ buf := new([]byte, 1000);
n, errno = io.Readn(fd, buf);
if n < 1000 {
diff --git a/src/lib/net/dnsclient.go b/src/lib/net/dnsclient.go
index 2e8c638d2..eff46f8b1 100644
--- a/src/lib/net/dnsclient.go
+++ b/src/lib/net/dnsclient.go
@@ -44,7 +44,7 @@ func Exchange(cfg *DNS_Config, c Conn, name string) (m *DNS_Msg, err *os.Error)
if len(name) >= 256 {
return nil, DNS_NameTooLong
}
- out := new(DNS_Msg);
+ out := new(*DNS_Msg);
out.id = 0x1234;
out.question = []DNS_Question{
DNS_Question{ name, DNS_TypeA, DNS_ClassINET }
@@ -71,7 +71,7 @@ func Exchange(cfg *DNS_Config, c Conn, name string) (m *DNS_Msg, err *os.Error)
continue
}
buf = buf[0:n];
- in := new(DNS_Msg);
+ in := new(*DNS_Msg);
if !in.Unpack(buf) || in.id != out.id {
continue
}
@@ -80,24 +80,22 @@ func Exchange(cfg *DNS_Config, c Conn, name string) (m *DNS_Msg, err *os.Error)
return nil, DNS_NoAnswer
}
-var NIL []string // TODO(rsc)
-
// Find answer for name in dns message.
// On return, if err == nil, addrs != nil.
// TODO(rsc): Maybe return [][]byte (==[]IPAddr) instead?
func Answer(name string, dns *DNS_Msg) (addrs []string, err *os.Error) {
- addrs = new([]string, len(dns.answer))[0:0];
+ addrs = new([]string, 0, len(dns.answer));
if dns.rcode == DNS_RcodeNameError && dns.authoritative {
- return NIL, DNS_NameNotFound // authoritative "no such host"
+ return nil, DNS_NameNotFound // authoritative "no such host"
}
if dns.rcode != DNS_RcodeSuccess {
// None of the error codes make sense
// for the query we sent. If we didn't get
// a name error and we didn't get success,
// the server is behaving incorrectly.
- return NIL, DNS_ServerFailure
+ return nil, DNS_ServerFailure
}
// Look for the name.
@@ -126,13 +124,13 @@ Cname:
}
}
if len(addrs) == 0 {
- return NIL, DNS_NameNotFound
+ return nil, DNS_NameNotFound
}
return addrs, nil
}
// Too many redirects
- return NIL, DNS_RedirectLoop
+ return nil, DNS_RedirectLoop
}
// Do a lookup for a single name, which must be rooted
diff --git a/src/lib/net/dnsconfig.go b/src/lib/net/dnsconfig.go
index 0dff681b6..5c2b45812 100644
--- a/src/lib/net/dnsconfig.go
+++ b/src/lib/net/dnsconfig.go
@@ -31,7 +31,7 @@ export func DNS_ReadConfig() *DNS_Config {
if file == nil {
return nil
}
- conf := new(DNS_Config);
+ conf := new(*DNS_Config);
conf.servers = new([]string, 3)[0:0]; // small, but the standard limit
conf.search = new([]string, 0);
conf.ndots = 1;
diff --git a/src/lib/net/dnsmsg.go b/src/lib/net/dnsmsg.go
index a94d039ce..1c85c935e 100644
--- a/src/lib/net/dnsmsg.go
+++ b/src/lib/net/dnsmsg.go
@@ -198,18 +198,18 @@ export type DNS_RR_A struct {
// Map of constructors for each RR wire type.
var rr_mk = map[int]*()DNS_RR {
- DNS_TypeCNAME: func() DNS_RR { return new(DNS_RR_CNAME) },
- DNS_TypeHINFO: func() DNS_RR { return new(DNS_RR_HINFO) },
- DNS_TypeMB: func() DNS_RR { return new(DNS_RR_MB) },
- DNS_TypeMG: func() DNS_RR { return new(DNS_RR_MG) },
- DNS_TypeMINFO: func() DNS_RR { return new(DNS_RR_MINFO) },
- DNS_TypeMR: func() DNS_RR { return new(DNS_RR_MR) },
- DNS_TypeMX: func() DNS_RR { return new(DNS_RR_MX) },
- DNS_TypeNS: func() DNS_RR { return new(DNS_RR_NS) },
- DNS_TypePTR: func() DNS_RR { return new(DNS_RR_PTR) },
- DNS_TypeSOA: func() DNS_RR { return new(DNS_RR_SOA) },
- DNS_TypeTXT: func() DNS_RR { return new(DNS_RR_TXT) },
- DNS_TypeA: func() DNS_RR { return new(DNS_RR_A) },
+ DNS_TypeCNAME: func() DNS_RR { return new(*DNS_RR_CNAME) },
+ DNS_TypeHINFO: func() DNS_RR { return new(*DNS_RR_HINFO) },
+ DNS_TypeMB: func() DNS_RR { return new(*DNS_RR_MB) },
+ DNS_TypeMG: func() DNS_RR { return new(*DNS_RR_MG) },
+ DNS_TypeMINFO: func() DNS_RR { return new(*DNS_RR_MINFO) },
+ DNS_TypeMR: func() DNS_RR { return new(*DNS_RR_MR) },
+ DNS_TypeMX: func() DNS_RR { return new(*DNS_RR_MX) },
+ DNS_TypeNS: func() DNS_RR { return new(*DNS_RR_NS) },
+ DNS_TypePTR: func() DNS_RR { return new(*DNS_RR_PTR) },
+ DNS_TypeSOA: func() DNS_RR { return new(*DNS_RR_SOA) },
+ DNS_TypeTXT: func() DNS_RR { return new(*DNS_RR_TXT) },
+ DNS_TypeA: func() DNS_RR { return new(*DNS_RR_A) },
}
// Pack a domain name s into msg[off:].
@@ -545,7 +545,6 @@ export type DNS_Msg struct {
extra []DNS_RR;
}
-var NIL []byte // TODO(rsc): remove
func (dns *DNS_Msg) Pack() (msg []byte, ok bool) {
var dh DNS_Header;
@@ -569,9 +568,11 @@ func (dns *DNS_Msg) Pack() (msg []byte, ok bool) {
dh.bits |= QR;
}
- // Prepare variable sized arrays; paper over nils.
- var question []DNS_Question;
- var answer, ns, extra []DNS_RR;
+ // Prepare variable sized arrays.
+ question := dns.question;
+ answer := dns.answer;
+ ns := dns.ns;
+ extra := dns.extra;
dh.qdcount = uint16(len(question));
dh.ancount = uint16(len(answer));
@@ -599,7 +600,7 @@ func (dns *DNS_Msg) Pack() (msg []byte, ok bool) {
off, ok = PackStruct(extra[i], msg, off);
}
if !ok {
- return NIL, false
+ return nil, false
}
return msg[0:off], true
}
diff --git a/src/lib/net/fd.go b/src/lib/net/fd.go
index 600ac38f6..a9c90c87c 100644
--- a/src/lib/net/fd.go
+++ b/src/lib/net/fd.go
@@ -19,8 +19,8 @@ export type FD struct {
// immutable until Close
fd int64;
osfd *os.FD;
- cr *chan *FD;
- cw *chan *FD;
+ cr chan *FD;
+ cw chan *FD;
// owned by fd wait server
ncr, ncw int;
@@ -70,15 +70,15 @@ func SetNonblock(fd int64) *os.Error {
// might help batch requests.
type PollServer struct {
- cr, cw *chan *FD; // buffered >= 1
+ cr, cw chan *FD; // buffered >= 1
pr, pw *os.FD;
- pending *map[int64] *FD;
+ pending map[int64] *FD;
poll *Pollster; // low-level OS hooks
}
func (s *PollServer) Run();
func NewPollServer() (s *PollServer, err *os.Error) {
- s = new(PollServer);
+ s = new(*PollServer);
s.cr = new(chan *FD, 1);
s.cw = new(chan *FD, 1);
if s.pr, s.pw, err = os.Pipe(); err != nil {
@@ -214,7 +214,7 @@ export func NewFD(fd int64) (f *FD, err *os.Error) {
if err = SetNonblock(fd); err != nil {
return nil, err
}
- f = new(FD);
+ f = new(*FD);
f.fd = fd;
f.osfd = os.NewFD(fd);
f.cr = new(chan *FD, 1);
diff --git a/src/lib/net/fd_darwin.go b/src/lib/net/fd_darwin.go
index b0eaf0594..5a21be58e 100644
--- a/src/lib/net/fd_darwin.go
+++ b/src/lib/net/fd_darwin.go
@@ -18,10 +18,8 @@ export type Pollster struct {
events []syscall.Kevent;
}
-var NIL []syscall.Kevent; // TODO(rsc): remove
-
export func NewPollster() (p *Pollster, err *os.Error) {
- p = new(Pollster);
+ p = new(*Pollster);
var e int64;
if p.kq, e = syscall.kqueue(); e != 0 {
return nil, os.ErrnoToError(e)
@@ -66,7 +64,7 @@ func (p *Pollster) AddFD(fd int64, mode int, repeat bool) *os.Error {
func (p *Pollster) WaitFD() (fd int64, mode int, err *os.Error) {
for len(p.events) == 0 {
- nn, e := syscall.kevent(p.kq, NIL, p.eventbuf, nil);
+ nn, e := syscall.kevent(p.kq, nil, p.eventbuf, nil);
if e != 0 {
if e == syscall.EAGAIN || e == syscall.EINTR {
continue
diff --git a/src/lib/net/fd_linux.go b/src/lib/net/fd_linux.go
index 282be20c4..e459dddc4 100644
--- a/src/lib/net/fd_linux.go
+++ b/src/lib/net/fd_linux.go
@@ -21,11 +21,11 @@ export type Pollster struct {
epfd int64;
// Events we're already waiting for
- events *map[int64] uint32;
+ events map[int64] uint32;
}
export func NewPollster() (p *Pollster, err *os.Error) {
- p = new(Pollster);
+ p = new(*Pollster);
var e int64;
// The arg to epoll_create is a hint to the kernel
@@ -102,9 +102,9 @@ func (p *Pollster) WaitFD() (fd int64, mode int, err *os.Error) {
// Get an event.
var evarray [1]syscall.EpollEvent;
ev := &evarray[0];
- n, e := syscall.epoll_wait(p.epfd, &evarray, -1);
+ n, e := syscall.epoll_wait(p.epfd, evarray, -1);
for e == syscall.EAGAIN || e == syscall.EINTR {
- n, e = syscall.epoll_wait(p.epfd, &evarray, -1)
+ n, e = syscall.epoll_wait(p.epfd, evarray, -1)
}
if e != 0 {
return -1, 0, os.ErrnoToError(e)
diff --git a/src/lib/net/ip.go b/src/lib/net/ip.go
index 4cf56dc8a..883a1c63e 100644
--- a/src/lib/net/ip.go
+++ b/src/lib/net/ip.go
@@ -39,8 +39,6 @@ func MakeIPv4(a, b, c, d byte) []byte {
// Well-known IP addresses
export var IPv4bcast, IPv4allsys, IPv4allrouter, IPv4prefix, IPallbits, IPnoaddr []byte
-var NIL []byte // TODO(rsc)
-
func init() {
IPv4bcast = MakeIPv4(0xff, 0xff, 0xff, 0xff);
IPv4allsys = MakeIPv4(0xe0, 0x00, 0x00, 0x01);
@@ -75,7 +73,7 @@ export func ToIPv4(p []byte) []byte {
&& p[11] == 0xff {
return p[12:16]
}
- return NIL
+ return nil
}
// Convert p to IPv6 form.
@@ -86,7 +84,7 @@ export func ToIPv6(p []byte) []byte {
if len(p) == IPv6len {
return p
}
- return NIL
+ return nil
}
// Default route masks for IPv4.
@@ -97,8 +95,8 @@ export var (
)
export func DefaultMask(p []byte) []byte {
- if p = ToIPv4(p); len(p) == 0 {
- return NIL
+ if p = ToIPv4(p); p == nil {
+ return nil
}
switch true {
case p[0] < 0x80:
@@ -108,14 +106,14 @@ export func DefaultMask(p []byte) []byte {
default:
return ClassCMask;
}
- return NIL; // not reached
+ return nil; // not reached
}
// Apply mask to ip, returning new address.
export func Mask(ip []byte, mask []byte) []byte {
n := len(ip);
if n != len(mask) {
- return NIL
+ return nil
}
out := new([]byte, n);
for i := 0; i < n; i++ {
@@ -253,7 +251,7 @@ func ParseIPv4(s string) []byte {
for j := 0; j < IPv4len; j++ {
if j > 0 {
if s[i] != '.' {
- return NIL
+ return nil
}
i++;
}
@@ -263,12 +261,12 @@ func ParseIPv4(s string) []byte {
)
n, i, ok = Dtoi(s, i);
if !ok || n > 0xFF {
- return NIL
+ return nil
}
p[j] = byte(n)
}
if i != len(s) {
- return NIL
+ return nil
}
return MakeIPv4(p[0], p[1], p[2], p[3])
}
@@ -302,22 +300,22 @@ L: for j < IPv6len {
// Hex number.
n, i1, ok := Xtoi(s, i);
if !ok || n > 0xFFFF {
- return NIL
+ return nil
}
// If followed by dot, might be in trailing IPv4.
if i1 < len(s) && s[i1] == '.' {
if ellipsis < 0 && j != IPv6len - IPv4len {
// Not the right place.
- return NIL
+ return nil
}
if j+IPv4len > IPv6len {
// Not enough room.
- return NIL
+ return nil
}
p4 := ParseIPv4(s[i:len(s)]);
- if len(p4) == 0 {
- return NIL
+ if p4 == nil {
+ return nil
}
// BUG: p[j:j+4] = p4
p[j] = p4[12];
@@ -342,14 +340,14 @@ L: for j < IPv6len {
// Otherwise must be followed by colon and more.
if s[i] != ':' && i+1 == len(s) {
- return NIL
+ return nil
}
i++;
// Look for ellipsis.
if s[i] == ':' {
if ellipsis >= 0 { // already have one
- return NIL
+ return nil
}
ellipsis = j;
if i++; i == len(s) { // can be at end
@@ -360,13 +358,13 @@ L: for j < IPv6len {
// Must have used entire string.
if i != len(s) {
- return NIL
+ return nil
}
// If didn't parse enough, expand ellipsis.
if j < IPv6len {
if ellipsis < 0 {
- return NIL
+ return nil
}
n := IPv6len - j;
for k := j-1; k >= ellipsis; k-- {
@@ -381,7 +379,7 @@ L: for j < IPv6len {
export func ParseIP(s string) []byte {
p := ParseIPv4(s);
- if len(p) != 0 {
+ if p != nil {
return p
}
return ParseIPv6(s)
diff --git a/src/lib/net/net.go b/src/lib/net/net.go
index ca5f33733..2fae03e5a 100644
--- a/src/lib/net/net.go
+++ b/src/lib/net/net.go
@@ -62,8 +62,6 @@ func JoinHostPort(host, port string) string {
return host + ":" + port
}
-var NIL []byte
-
// Convert "host:port" into IP address and port.
// For now, host and port must be numeric literals.
// Eventually, we'll have name resolution.
@@ -71,24 +69,24 @@ func HostPortToIP(net string, hostport string) (ip []byte, iport int, err *os.Er
var host, port string;
host, port, err = SplitHostPort(hostport);
if err != nil {
- return NIL, 0, err
+ return nil, 0, err
}
// Try as an IP address.
addr := ParseIP(host);
- if len(addr) == 0 {
+ if addr == nil {
// Not an IP address. Try as a DNS name.
hostname, addrs, err := LookupHost(host);
if err != nil {
- return NIL, 0, err
+ return nil, 0, err
}
if len(addrs) == 0 {
- return NIL, 0, UnknownHost
+ return nil, 0, UnknownHost
}
addr = ParseIP(addrs[0]);
- if len(addr) == 0 {
+ if addr == nil {
// should not happen
- return NIL, 0, BadAddress
+ return nil, 0, BadAddress
}
}
@@ -96,11 +94,11 @@ func HostPortToIP(net string, hostport string) (ip []byte, iport int, err *os.Er
if !ok || i != len(port) {
p, ok = LookupPort(net, port);
if !ok {
- return NIL, 0, UnknownPort
+ return nil, 0, UnknownPort
}
}
if p < 0 || p > 0xFFFF {
- return NIL, 0, BadAddress
+ return nil, 0, BadAddress
}
return addr, p, nil
@@ -311,7 +309,7 @@ func InternetSocket(net, laddr, raddr string, proto int64) (fd *FD, err *os.Erro
default:
// Otherwise, guess.
// If the addresses are IPv4 and we prefer IPv4, use 4; else 6.
- if PreferIPv4 && len(ToIPv4(lip)) != 0 && len(ToIPv4(rip)) != 0 {
+ if PreferIPv4 && ToIPv4(lip) != nil && ToIPv4(rip) != nil {
vers = 4
} else {
vers = 6
@@ -329,13 +327,13 @@ func InternetSocket(net, laddr, raddr string, proto int64) (fd *FD, err *os.Erro
}
var la, ra *syscall.Sockaddr;
- if len(lip) != 0 {
+ if lip != nil {
la, lerr = cvt(lip, lport);
if lerr != nil {
return nil, lerr
}
}
- if len(rip) != 0 {
+ if rip != nil {
ra, rerr = cvt(rip, rport);
if rerr != nil {
return nil, rerr
@@ -361,7 +359,7 @@ func (c *ConnTCP) SetNoDelay(nodelay bool) *os.Error {
}
func NewConnTCP(fd *FD, raddr string) *ConnTCP {
- c := new(ConnTCP);
+ c := new(*ConnTCP);
c.fd = fd;
c.raddr = raddr;
c.SetNoDelay(true);
@@ -389,7 +387,7 @@ export type ConnUDP struct {
}
func NewConnUDP(fd *FD, raddr string) *ConnUDP {
- c := new(ConnUDP);
+ c := new(*ConnUDP);
c.fd = fd;
c.raddr = raddr;
return c
@@ -488,7 +486,7 @@ export func ListenTCP(net, laddr string) (l *ListenerTCP, err *os.Error) {
syscall.close(fd.fd);
return nil, os.ErrnoToError(e1)
}
- l = new(ListenerTCP);
+ l = new(*ListenerTCP);
l.fd = fd;
return l, nil
}
diff --git a/src/lib/net/net_darwin.go b/src/lib/net/net_darwin.go
index 2a23decc2..9d143d349 100644
--- a/src/lib/net/net_darwin.go
+++ b/src/lib/net/net_darwin.go
@@ -13,10 +13,10 @@ import (
export func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) {
p = ToIPv4(p);
- if len(p) == 0 || port < 0 || port > 0xFFFF {
+ if p == nil || port < 0 || port > 0xFFFF {
return nil, os.EINVAL
}
- sa := new(syscall.SockaddrInet4);
+ sa := new(*syscall.SockaddrInet4);
sa.len = syscall.SizeofSockaddrInet4;
sa.family = syscall.AF_INET;
sa.port[0] = byte(port>>8);
@@ -29,10 +29,10 @@ export func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
export func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.Error) {
p = ToIPv6(p);
- if len(p) == 0 || port < 0 || port > 0xFFFF {
+ if p == nil || port < 0 || port > 0xFFFF {
return nil, os.EINVAL
}
- sa := new(syscall.SockaddrInet6);
+ sa := new(*syscall.SockaddrInet6);
sa.len = syscall.SizeofSockaddrInet6;
sa.family = syscall.AF_INET6;
sa.port[0] = byte(port>>8);
@@ -43,28 +43,27 @@ export func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
return unsafe.pointer(sa).(*syscall.Sockaddr), nil
}
-var NIL []byte // TODO(rsc)
export func SockaddrToIP(sa1 *syscall.Sockaddr) (p []byte, port int, err *os.Error) {
switch sa1.family {
case syscall.AF_INET:
sa := unsafe.pointer(sa1).(*syscall.SockaddrInet4);
a := ToIPv6(sa.addr);
- if len(a) == 0 {
- return NIL, 0, os.EINVAL
+ if a == nil {
+ return nil, 0, os.EINVAL
}
return a, int(sa.port[0])<<8 + int(sa.port[1]), nil;
case syscall.AF_INET6:
sa := unsafe.pointer(sa1).(*syscall.SockaddrInet6);
a := ToIPv6(sa.addr);
- if len(a) == 0 {
- return NIL, 0, os.EINVAL
+ if a == nil {
+ return nil, 0, os.EINVAL
}
- return NIL, int(sa.port[0])<<8 + int(sa.port[1]), nil;
+ return nil, int(sa.port[0])<<8 + int(sa.port[1]), nil;
default:
- return NIL, 0, os.EINVAL
+ return nil, 0, os.EINVAL
}
- return NIL, 0, nil // not reached
+ return nil, 0, nil // not reached
}
export func ListenBacklog() int64 {
diff --git a/src/lib/net/net_linux.go b/src/lib/net/net_linux.go
index 3d9dd69fe..028e6e23b 100644
--- a/src/lib/net/net_linux.go
+++ b/src/lib/net/net_linux.go
@@ -16,7 +16,7 @@ export func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
if p == nil || port < 0 || port > 0xFFFF {
return nil, os.EINVAL
}
- sa := new(syscall.SockaddrInet4);
+ sa := new(*syscall.SockaddrInet4);
sa.family = syscall.AF_INET;
sa.port[0] = byte(port>>8);
sa.port[1] = byte(port);
@@ -38,10 +38,10 @@ export func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
// In IPv6 mode, Linux treats that as meaning "announce on 0.0.0.0",
// which it refuses to do. Rewrite to the IPv6 all zeros.
if p4 := ToIPv4(p); p4 != nil && p4[0] == 0 && p4[1] == 0 && p4[2] == 0 && p4[3] == 0 {
- p = &IPv6zero;
+ p = IPv6zero;
}
- sa := new(syscall.SockaddrInet6);
+ sa := new(*syscall.SockaddrInet6);
sa.family = syscall.AF_INET6;
sa.port[0] = byte(port>>8);
sa.port[1] = byte(port);
@@ -55,14 +55,14 @@ export func SockaddrToIP(sa1 *syscall.Sockaddr) (p []byte, port int, err *os.Err
switch sa1.family {
case syscall.AF_INET:
sa := unsafe.pointer(sa1).(*syscall.SockaddrInet4);
- a := ToIPv6(&sa.addr);
+ a := ToIPv6(sa.addr);
if a == nil {
return nil, 0, os.EINVAL
}
return a, int(sa.port[0])<<8 + int(sa.port[1]), nil;
case syscall.AF_INET6:
sa := unsafe.pointer(sa1).(*syscall.SockaddrInet6);
- a := ToIPv6(&sa.addr);
+ a := ToIPv6(sa.addr);
if a == nil {
return nil, 0, os.EINVAL
}
diff --git a/src/lib/net/port.go b/src/lib/net/port.go
index 5ff1e5805..efcbc0ad9 100644
--- a/src/lib/net/port.go
+++ b/src/lib/net/port.go
@@ -14,10 +14,10 @@ import (
"strconv";
)
-var services *map[string] *map[string] int
+var services map[string] map[string] int
func ReadServices() {
- services = new(map[string] *map[string] int);
+ services = new(map[string] map[string] int);
file := Open("/etc/services");
for line, ok := file.ReadLine(); ok; line, ok = file.ReadLine() {
// "http 80/tcp www www-http # World Wide Web HTTP"
diff --git a/src/lib/net/tcpserver_test.go b/src/lib/net/tcpserver_test.go
index 9489c8cf2..0e5036974 100644
--- a/src/lib/net/tcpserver_test.go
+++ b/src/lib/net/tcpserver_test.go
@@ -11,7 +11,7 @@ import (
"testing";
)
-func Echo(fd io.ReadWrite, done *chan<- int) {
+func Echo(fd io.ReadWrite, done chan<- int) {
var buf [1024]byte;
for {
@@ -24,7 +24,7 @@ func Echo(fd io.ReadWrite, done *chan<- int) {
done <- 1
}
-func Serve(t *testing.T, network, addr string, listening, done *chan<- int) {
+func Serve(t *testing.T, network, addr string, listening, done chan<- int) {
l, err := net.Listen(network, addr);
if err != nil {
t.Fatalf("net.Listen(%q, %q) = _, %v", network, addr, err);
@@ -76,9 +76,9 @@ func DoTest(t *testing.T, network, listenaddr, dialaddr string) {
}
export func TestTcpServer(t *testing.T) {
- DoTest(t, "tcp", "0.0.0.0:9999", "127.0.0.1:9999");
- DoTest(t, "tcp", "[::]:9999", "[::ffff:127.0.0.1]:9999");
- DoTest(t, "tcp", "[::]:9999", "127.0.0.1:9999");
- DoTest(t, "tcp", "0.0.0.0:9999", "[::ffff:127.0.0.1]:9999");
+ DoTest(t, "tcp", "0.0.0.0:9997", "127.0.0.1:9997");
+ DoTest(t, "tcp", "[::]:9997", "[::ffff:127.0.0.1]:9997");
+ DoTest(t, "tcp", "[::]:9997", "127.0.0.1:9997");
+ DoTest(t, "tcp", "0.0.0.0:9997", "[::ffff:127.0.0.1]:9997");
}
diff --git a/src/lib/once.go b/src/lib/once.go
index 7585a4423..414f28888 100644
--- a/src/lib/once.go
+++ b/src/lib/once.go
@@ -13,12 +13,12 @@ package once
type Job struct {
done bool;
- doit *chan bool; // buffer of 1
+ doit chan bool; // buffer of 1
}
type Request struct {
f *();
- reply *chan *Job
+ reply chan *Job
}
// TODO: Would like to use chan Request but 6g rejects it.
@@ -34,7 +34,7 @@ func Server() {
req := <-service;
job, present := jobmap[req.f];
if !present {
- job = new(Job);
+ job = new(*Job);
job.doit = new(chan bool, 1);
job.doit <- true;
jobmap[req.f] = job
diff --git a/src/lib/regexp/regexp.go b/src/lib/regexp/regexp.go
index 2176c4ddb..218fbd601 100644
--- a/src/lib/regexp/regexp.go
+++ b/src/lib/regexp/regexp.go
@@ -48,7 +48,7 @@ func (c *Common) SetIndex(i int) { c.index = i }
type RE struct {
expr string; // the original expression
- ch *chan<- *RE; // reply channel when we're done
+ ch chan<- *RE; // reply channel when we're done
error *os.Error; // compile- or run-time error; nil if OK
inst *array.Array;
start Inst;
@@ -112,7 +112,7 @@ func (char *Char) Type() int { return CHAR }
func (char *Char) Print() { print("char ", string(char.char)) }
func NewChar(char int) *Char {
- c := new(Char);
+ c := new(*Char);
c.char = char;
return c;
}
@@ -163,7 +163,7 @@ func (cclass *CharClass) Matches(c int) bool {
}
func NewCharClass() *CharClass {
- c := new(CharClass);
+ c := new(*CharClass);
c.ranges = array.NewIntArray(0);
return c;
}
@@ -249,7 +249,7 @@ func (p *Parser) nextc() int {
}
func NewParser(re *RE) *Parser {
- parser := new(Parser);
+ parser := new(*Parser);
parser.re = re;
parser.nextc(); // load p.ch
return parser;
@@ -364,15 +364,15 @@ func (p *Parser) Term() (start, end Inst) {
p.re.Error(ErrUnmatchedRbkt);
case '^':
p.nextc();
- start = p.re.Add(new(Bot));
+ start = p.re.Add(new(*Bot));
return start, start;
case '$':
p.nextc();
- start = p.re.Add(new(Eot));
+ start = p.re.Add(new(*Eot));
return start, start;
case '.':
p.nextc();
- start = p.re.Add(new(Any));
+ start = p.re.Add(new(*Any));
return start, start;
case '[':
p.nextc();
@@ -393,9 +393,9 @@ func (p *Parser) Term() (start, end Inst) {
}
p.nlpar--;
p.nextc();
- bra := new(Bra);
+ bra := new(*Bra);
p.re.Add(bra);
- ebra := new(Ebra);
+ ebra := new(*Ebra);
p.re.Add(ebra);
bra.n = nbra;
ebra.n = nbra;
@@ -437,7 +437,7 @@ func (p *Parser) Closure() (start, end Inst) {
switch p.c() {
case '*':
// (start,end)*:
- alt := new(Alt);
+ alt := new(*Alt);
p.re.Add(alt);
end.SetNext(alt); // after end, do alt
alt.left = start; // alternate brach: return to start
@@ -445,16 +445,16 @@ func (p *Parser) Closure() (start, end Inst) {
end = alt;
case '+':
// (start,end)+:
- alt := new(Alt);
+ alt := new(*Alt);
p.re.Add(alt);
end.SetNext(alt); // after end, do alt
alt.left = start; // alternate brach: return to start
end = alt; // start is unchanged; end is alt
case '?':
// (start,end)?:
- alt := new(Alt);
+ alt := new(*Alt);
p.re.Add(alt);
- nop := new(Nop);
+ nop := new(*Nop);
p.re.Add(nop);
alt.left = start; // alternate branch is start
alt.next = nop; // follow on to nop
@@ -478,7 +478,7 @@ func (p *Parser) Concatenation() (start, end Inst) {
switch {
case nstart == NULL: // end of this concatenation
if start == NULL { // this is the empty string
- nop := p.re.Add(new(Nop));
+ nop := p.re.Add(new(*Nop));
return nop, nop;
}
return;
@@ -501,11 +501,11 @@ func (p *Parser) Regexp() (start, end Inst) {
case '|':
p.nextc();
nstart, nend := p.Concatenation();
- alt := new(Alt);
+ alt := new(*Alt);
p.re.Add(alt);
alt.left = start;
alt.next = nstart;
- nop := new(Nop);
+ nop := new(*Nop);
p.re.Add(nop);
end.SetNext(nop);
nend.SetNext(nop);
@@ -550,12 +550,12 @@ func (re *RE) Dump() {
func (re *RE) DoParse() {
parser := NewParser(re);
- start := new(Start);
+ start := new(*Start);
re.Add(start);
s, e := parser.Regexp();
start.next = s;
re.start = start;
- e.SetNext(re.Add(new(End)));
+ e.SetNext(re.Add(new(*End)));
if debug {
re.Dump();
@@ -571,8 +571,8 @@ func (re *RE) DoParse() {
}
-func Compiler(str string, ch *chan *RE) {
- re := new(RE);
+func Compiler(str string, ch chan *RE) {
+ re := new(*RE);
re.expr = str;
re.inst = array.New(0);
re.ch = ch;
diff --git a/src/lib/strconv/atof.go b/src/lib/strconv/atof.go
index 8869e2032..b7f515614 100644
--- a/src/lib/strconv/atof.go
+++ b/src/lib/strconv/atof.go
@@ -34,7 +34,7 @@ func StringToDecimal(s string) (neg bool, d *Decimal, trunc bool, ok bool) {
}
// digits
- b := new(Decimal);
+ b := new(*Decimal);
sawdot := false;
sawdigits := false;
for ; i < len(s); i++ {
diff --git a/src/lib/strconv/decimal.go b/src/lib/strconv/decimal.go
index d22d4526c..9f94e3003 100644
--- a/src/lib/strconv/decimal.go
+++ b/src/lib/strconv/decimal.go
@@ -120,7 +120,7 @@ func (a *Decimal) Assign(v uint64) {
}
package func NewDecimal(i uint64) *Decimal {
- a := new(Decimal);
+ a := new(*Decimal);
a.Assign(i);
return a;
}
diff --git a/src/lib/sync/mutex_test.go b/src/lib/sync/mutex_test.go
index 7a6dd1814..0fd204c89 100644
--- a/src/lib/sync/mutex_test.go
+++ b/src/lib/sync/mutex_test.go
@@ -11,7 +11,7 @@ import (
"testing"
)
-func HammerSemaphore(s *int32, cdone *chan bool) {
+func HammerSemaphore(s *int32, cdone chan bool) {
for i := 0; i < 1000; i++ {
sys.semacquire(s);
sys.semrelease(s);
@@ -20,7 +20,7 @@ func HammerSemaphore(s *int32, cdone *chan bool) {
}
export func TestSemaphore(t *testing.T) {
- s := new(int32);
+ s := new(*int32);
*s = 1;
c := new(chan bool);
for i := 0; i < 10; i++ {
@@ -32,7 +32,7 @@ export func TestSemaphore(t *testing.T) {
}
-func HammerMutex(m *Mutex, cdone *chan bool) {
+func HammerMutex(m *Mutex, cdone chan bool) {
for i := 0; i < 1000; i++ {
m.Lock();
m.Unlock();
@@ -41,7 +41,7 @@ func HammerMutex(m *Mutex, cdone *chan bool) {
}
export func TestMutex(t *testing.T) {
- m := new(Mutex);
+ m := new(*Mutex);
c := new(chan bool);
for i := 0; i < 10; i++ {
go HammerMutex(m, c);
diff --git a/src/lib/syscall/file_linux.go b/src/lib/syscall/file_linux.go
index 4d6982bb2..80fc1e934 100644
--- a/src/lib/syscall/file_linux.go
+++ b/src/lib/syscall/file_linux.go
@@ -15,7 +15,7 @@ const NameBufsize = 512
export func open(name string, mode int64, perm int64) (ret int64, errno int64) {
var namebuf [NameBufsize]byte;
- if !StringToBytes(&namebuf, name) {
+ if !StringToBytes(namebuf, name) {
return -1, ENAMETOOLONG
}
r1, r2, err := Syscall(SYS_OPEN, int64(uintptr(unsafe.pointer(&namebuf[0]))), mode, perm);
@@ -24,7 +24,7 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) {
export func creat(name string, perm int64) (ret int64, errno int64) {
var namebuf [NameBufsize]byte;
- if !StringToBytes(&namebuf, name) {
+ if !StringToBytes(namebuf, name) {
return -1, ENAMETOOLONG
}
r1, r2, err := Syscall(SYS_OPEN, int64(uintptr(unsafe.pointer(&namebuf[0]))), O_CREAT|O_WRONLY|O_TRUNC, perm);
@@ -59,7 +59,7 @@ export func pipe(fds *[2]int64) (ret int64, errno int64) {
export func stat(name string, buf *Stat) (ret int64, errno int64) {
var namebuf [NameBufsize]byte;
- if !StringToBytes(&namebuf, name) {
+ if !StringToBytes(namebuf, name) {
return -1, ENAMETOOLONG
}
r1, r2, err := Syscall(SYS_STAT, int64(uintptr(unsafe.pointer(&namebuf[0]))), int64(uintptr(unsafe.pointer(buf))), 0);
@@ -78,7 +78,7 @@ export func fstat(fd int64, buf *Stat) (ret int64, errno int64) {
export func unlink(name string) (ret int64, errno int64) {
var namebuf [NameBufsize]byte;
- if !StringToBytes(&namebuf, name) {
+ if !StringToBytes(namebuf, name) {
return -1, ENAMETOOLONG
}
r1, r2, err := Syscall(SYS_UNLINK, int64(uintptr(unsafe.pointer(&namebuf[0]))), 0, 0);
@@ -92,7 +92,7 @@ export func fcntl(fd, cmd, arg int64) (ret int64, errno int64) {
export func mkdir(name string, perm int64) (ret int64, errno int64) {
var namebuf [NameBufsize]byte;
- if !StringToBytes(&namebuf, name) {
+ if !StringToBytes(namebuf, name) {
return -1, ENAMETOOLONG
}
r1, r2, err := Syscall(SYS_MKDIR, int64(uintptr(unsafe.pointer(&namebuf[0]))), perm, 0);
diff --git a/src/lib/tabwriter/tabwriter.go b/src/lib/tabwriter/tabwriter.go
index 16a8ae10b..f8df1e18d 100644
--- a/src/lib/tabwriter/tabwriter.go
+++ b/src/lib/tabwriter/tabwriter.go
@@ -165,7 +165,7 @@ func (b *Writer) Init(writer io.Write, cellwidth, padding int, padchar byte, ali
b.lines_width.Init(0);
b.widths.Init(0);
b.AddLine(); // the very first line
-
+
return b;
}
@@ -219,7 +219,7 @@ func (b *Writer) WritePadding(textw, cellw int) (err *os.Error) {
if b.padbytes[0] == '\t' {
n = (n + b.cellwidth - 1) / b.cellwidth;
}
-
+
for n > len(b.padbytes) {
err = b.Write0(b.padbytes);
if err != nil {
@@ -269,7 +269,7 @@ func (b *Writer) WriteLines(pos0 int, line0, line1 int) (pos int, err *os.Error)
pos += s;
}
}
-
+
if i+1 == b.lines_size.Len() {
// last buffered line - we don't have a newline, so just write
// any outstanding buffered data
@@ -291,22 +291,22 @@ exit:
func (b *Writer) Format(pos0 int, line0, line1 int) (pos int, err *os.Error) {
pos = pos0;
- column := b.widths.Len();
+ column := b.widths.Len();
last := line0;
for this := line0; this < line1; this++ {
line_size, line_width := b.Line(this);
-
+
if column < line_size.Len() - 1 {
// cell exists in this column
// (note that the last cell per line is ignored)
-
+
// print unprinted lines until beginning of block
pos, err = b.WriteLines(pos, last, this);
if err != nil {
goto exit;
}
last = this;
-
+
// column block begin
width := b.cellwidth; // minimal width
for ; this < line1; this++ {
@@ -334,7 +334,7 @@ func (b *Writer) Format(pos0 int, line0, line1 int) (pos int, err *os.Error) {
// print unprinted lines until end
pos, err = b.WriteLines(pos, last, line1);
-
+
exit:
return pos, err;
}
@@ -366,7 +366,7 @@ func UnicodeLen(buf []byte) int {
}
return l;
}
-
+
func (b *Writer) Append(buf []byte) {
b.buf.Append(buf);
@@ -438,7 +438,7 @@ func (b *Writer) Append(buf []byte) {
}
}
}
-
+
// append leftover text
b.Append(buf[i0 : n]);
return n, nil;
@@ -446,5 +446,5 @@ func (b *Writer) Append(buf []byte) {
export func New(writer io.Write, cellwidth, padding int, padchar byte, align_left, filter_html bool) *Writer {
- return new(Writer).Init(writer, cellwidth, padding, padchar, align_left, filter_html)
+ return new(*Writer).Init(writer, cellwidth, padding, padchar, align_left, filter_html)
}
diff --git a/src/lib/testing.go b/src/lib/testing.go
index c5a9761e7..3609a2507 100644
--- a/src/lib/testing.go
+++ b/src/lib/testing.go
@@ -27,7 +27,7 @@ func Tabify(s string) string {
export type T struct {
errors string;
failed bool;
- ch *chan *T;
+ ch chan *T;
}
func (t *T) Fail() {
@@ -92,7 +92,7 @@ export func Main(tests []Test) {
if chatty {
println("=== RUN ", tests[i].name);
}
- t := new(T);
+ t := new(*T);
t.ch = new(chan *T);
go TRunner(t, &tests[i]);
<-t.ch;
diff --git a/src/lib/time/tick.go b/src/lib/time/tick.go
index f3df11c45..a4cb786c5 100644
--- a/src/lib/time/tick.go
+++ b/src/lib/time/tick.go
@@ -18,14 +18,14 @@ import (
// Also, if timeouts become part of the select statement,
// perhaps the Ticker is just:
//
-// func Ticker(ns int64, c *chan int64) {
+// func Ticker(ns int64, c chan int64) {
// for {
// select { timeout ns: }
// nsec, err := time.Nanoseconds();
// c <- nsec;
// }
-func Ticker(ns int64, c *chan int64) {
+func Ticker(ns int64, c chan int64) {
var tv syscall.Timeval;
now := time.Nanoseconds();
when := now;
@@ -49,7 +49,7 @@ func Ticker(ns int64, c *chan int64) {
}
}
-export func Tick(ns int64) *chan int64 {
+export func Tick(ns int64) chan int64 {
if ns <= 0 {
return nil
}
diff --git a/src/lib/time/time.go b/src/lib/time/time.go
index 2a6a3bf01..c067cbeff 100644
--- a/src/lib/time/time.go
+++ b/src/lib/time/time.go
@@ -71,7 +71,7 @@ const (
)
export func SecondsToUTC(sec int64) *Time {
- t := new(Time);
+ t := new(*Time);
// Split into time and day.
day := sec/SecondsPerDay;
diff --git a/src/lib/time/zoneinfo.go b/src/lib/time/zoneinfo.go
index 90d8adb9a..9ac9807ab 100644
--- a/src/lib/time/zoneinfo.go
+++ b/src/lib/time/zoneinfo.go
@@ -30,13 +30,12 @@ type Data struct {
error bool;
}
-var NIL []byte // TODO(rsc)
func (d *Data) Read(n int) []byte {
if len(d.p) < n {
- d.p = NIL;
+ d.p = nil;
d.error = true;
- return NIL;
+ return nil;
}
p := d.p[0:n];
d.p = d.p[n:len(d.p)];
@@ -86,20 +85,19 @@ type Zonetime struct {
}
func ParseZoneinfo(bytes []byte) (zt []Zonetime, err *os.Error) {
- var NIL []Zonetime; // TODO(rsc)
data1 := Data{bytes, false};
data := &data1;
// 4-byte magic "TZif"
if magic := data.Read(4); string(magic) != "TZif" {
- return NIL, BadZoneinfo
+ return nil, BadZoneinfo
}
// 1-byte version, then 15 bytes of padding
var p []byte;
if p = data.Read(16); len(p) != 16 || p[0] != 0 && p[0] != '2' {
- return NIL, BadZoneinfo
+ return nil, BadZoneinfo
}
vers := p[0];
@@ -122,7 +120,7 @@ func ParseZoneinfo(bytes []byte) (zt []Zonetime, err *os.Error) {
for i := 0; i < 6; i++ {
nn, ok := data.Big4();
if !ok {
- return NIL, BadZoneinfo
+ return nil, BadZoneinfo
}
n[i] = int(nn);
}
@@ -154,7 +152,7 @@ func ParseZoneinfo(bytes []byte) (zt []Zonetime, err *os.Error) {
isutc := data.Read(n[NUTCLocal]);
if data.error { // ran out of data
- return NIL, BadZoneinfo
+ return nil, BadZoneinfo
}
// If version == 2, the entire file repeats, this time using
@@ -169,16 +167,16 @@ func ParseZoneinfo(bytes []byte) (zt []Zonetime, err *os.Error) {
var ok bool;
var n uint32;
if n, ok = zonedata.Big4(); !ok {
- return NIL, BadZoneinfo
+ return nil, BadZoneinfo
}
zone[i].utcoff = int(n);
var b byte;
if b, ok = zonedata.Byte(); !ok {
- return NIL, BadZoneinfo
+ return nil, BadZoneinfo
}
zone[i].isdst = b != 0;
if b, ok = zonedata.Byte(); !ok || int(b) >= len(abbrev) {
- return NIL, BadZoneinfo
+ return nil, BadZoneinfo
}
zone[i].name = ByteString(abbrev[b:len(abbrev)])
}
@@ -189,11 +187,11 @@ func ParseZoneinfo(bytes []byte) (zt []Zonetime, err *os.Error) {
var ok bool;
var n uint32;
if n, ok = txtimes.Big4(); !ok {
- return NIL, BadZoneinfo
+ return nil, BadZoneinfo
}
zt[i].time = int32(n);
if int(txzones[i]) >= len(zone) {
- return NIL, BadZoneinfo
+ return nil, BadZoneinfo
}
zt[i].zone = &zone[txzones[i]];
if i < len(isstd) {
@@ -207,10 +205,9 @@ func ParseZoneinfo(bytes []byte) (zt []Zonetime, err *os.Error) {
}
func ReadFile(name string, max int) (p []byte, err *os.Error) {
- var NIL []byte; // TODO(rsc)
fd, e := os.Open(name, os.O_RDONLY, 0);
if e != nil {
- return NIL, e
+ return nil, e
}
p = new([]byte, max+1)[0:0];
n := 0;
@@ -218,7 +215,7 @@ func ReadFile(name string, max int) (p []byte, err *os.Error) {
nn, e := fd.Read(p[n:cap(p)]);
if e != nil {
fd.Close();
- return NIL, e
+ return nil, e
}
if nn == 0 {
fd.Close();
@@ -227,15 +224,14 @@ func ReadFile(name string, max int) (p []byte, err *os.Error) {
p = p[0:n+nn]
}
fd.Close();
- return NIL, BadZoneinfo // too long
+ return nil, BadZoneinfo // too long
}
func ReadZoneinfoFile(name string) (tx []Zonetime, err *os.Error) {
- var NIL []Zonetime; // TODO(rsc)
data, e := ReadFile(name, MaxFileSize);
if e != nil {
- return NIL, e
+ return nil, e
}
tx, err = ParseZoneinfo(data);
return tx, err