1
0
mirror of https://github.com/golang/go synced 2024-11-24 22:37:56 -07:00

update go code tree to new func rules.

R=r
DELTA=367  (111 added, 59 deleted, 197 changed)
OCL=23957
CL=23960
This commit is contained in:
Russ Cox 2009-01-30 14:39:31 -08:00
parent b59dbd7fe0
commit 4cf7711568
24 changed files with 169 additions and 121 deletions

View File

@ -9,21 +9,21 @@ type request struct {
replyc chan int; replyc chan int;
} }
type binOp (a, b int) int; type binOp func(a, b int) int;
func run(op *binOp, req *request) { func run(op binOp, req *request) {
reply := op(req.a, req.b); reply := op(req.a, req.b);
req.replyc <- reply; req.replyc <- reply;
} }
func server(op *binOp, service chan *request) { func server(op binOp, service chan *request) {
for { for {
req := <-service; req := <-service;
go run(op, req); // don't wait for it go run(op, req); // don't wait for it
} }
} }
func startServer(op *binOp) chan *request { func startServer(op binOp) chan *request {
req := make(chan *request); req := make(chan *request);
go server(op, req); go server(op, req);
return req; return req;

View File

@ -9,14 +9,14 @@ type request struct {
replyc chan int; replyc chan int;
} }
type binOp (a, b int) int; type binOp func(a, b int) int;
func run(op *binOp, req *request) { func run(op binOp, req *request) {
reply := op(req.a, req.b); reply := op(req.a, req.b);
req.replyc <- reply; req.replyc <- reply;
} }
func server(op *binOp, service chan *request, quit chan bool) { func server(op binOp, service chan *request, quit chan bool) {
for { for {
select { select {
case req := <-service: case req := <-service:
@ -27,7 +27,7 @@ func server(op *binOp, service chan *request, quit chan bool) {
} }
} }
func startServer(op *binOp) (service chan *request, quit chan bool) { func startServer(op binOp) (service chan *request, quit chan bool) {
service = make(chan *request); service = make(chan *request);
quit = make(chan bool); quit = make(chan bool);
go server(op, service, quit); go server(op, service, quit);

View File

@ -71,7 +71,7 @@ trap "rm -f _testmain.go _testmain.6" 0 1 2 3 14 15
echo 'import "testing"' echo 'import "testing"'
# test array # test array
echo echo
echo 'var tests = []testing.Test {' # TODO(rsc): *& echo 'var tests = []testing.Test {'
for ofile in $ofiles for ofile in $ofiles
do do
# test functions are named TestFoo # test functions are named TestFoo
@ -84,7 +84,7 @@ trap "rm -f _testmain.go _testmain.6" 0 1 2 3 14 15
else else
for i in $tests for i in $tests
do do
echo ' testing.Test{ "'$i'", &'$i' },' echo ' testing.Test{ "'$i'", '$i' },'
done done
fi fi
done done

View File

@ -96,7 +96,7 @@ func (r13 *rot13Reader) Read(p []byte) (int, *os.Error) {
type readMaker struct { type readMaker struct {
name string; name string;
fn *([]byte) io.Read; fn func([]byte) io.Read;
} }
var readMakers = []readMaker { var readMakers = []readMaker {
readMaker{ "full", func(p []byte) io.Read { return newByteReader(p) } }, readMaker{ "full", func(p []byte) io.Read { return newByteReader(p) } },
@ -155,7 +155,7 @@ func reads(buf *BufRead, m int) string {
type bufReader struct { type bufReader struct {
name string; name string;
fn *(*BufRead) string; fn func(*BufRead) string;
} }
var bufreaders = []bufReader { var bufreaders = []bufReader {
bufReader{ "1", func(b *BufRead) string { return reads(b, 1) } }, bufReader{ "1", func(b *BufRead) string { return reads(b, 1) } },
@ -164,8 +164,8 @@ var bufreaders = []bufReader {
bufReader{ "4", func(b *BufRead) string { return reads(b, 4) } }, bufReader{ "4", func(b *BufRead) string { return reads(b, 4) } },
bufReader{ "5", func(b *BufRead) string { return reads(b, 5) } }, bufReader{ "5", func(b *BufRead) string { return reads(b, 5) } },
bufReader{ "7", func(b *BufRead) string { return reads(b, 7) } }, bufReader{ "7", func(b *BufRead) string { return reads(b, 7) } },
bufReader{ "bytes", &readBytes }, bufReader{ "bytes", readBytes },
bufReader{ "lines", &readLines }, bufReader{ "lines", readLines },
} }
var bufsizes = []int { var bufsizes = []int {
@ -276,14 +276,14 @@ func (w *halfByteWriter) GetBytes() []byte {
type writeMaker struct { type writeMaker struct {
name string; name string;
fn *()writeBuffer; fn func()writeBuffer;
} }
func TestBufWrite(t *testing.T) { func TestBufWrite(t *testing.T) {
var data [8192]byte; var data [8192]byte;
var writers = []writeMaker { var writers = []writeMaker {
writeMaker{ "full", &newByteWriter }, writeMaker{ "full", newByteWriter },
writeMaker{ "half", &newHalfByteWriter }, writeMaker{ "half", newHalfByteWriter },
}; };
for i := 0; i < len(data); i++ { for i := 0; i < len(data); i++ {

View File

@ -17,7 +17,7 @@ import (
) )
// Serve a new connection. // Serve a new connection.
func serveConnection(fd net.Conn, raddr string, f *(*Conn, *Request)) { func serveConnection(fd net.Conn, raddr string, f func(*Conn, *Request)) {
c, err := NewConn(fd); c, err := NewConn(fd);
if err != nil { if err != nil {
return return
@ -36,7 +36,7 @@ func serveConnection(fd net.Conn, raddr string, f *(*Conn, *Request)) {
} }
// Web server: already listening on l, call f for each request. // Web server: already listening on l, call f for each request.
func Serve(l net.Listener, f *(*Conn, *Request)) *os.Error { func Serve(l net.Listener, f func(*Conn, *Request)) *os.Error {
// TODO: Make this unnecessary // TODO: Make this unnecessary
s, e := os.Getenv("GOMAXPROCS"); s, e := os.Getenv("GOMAXPROCS");
if n, ok := strconv.Atoi(s); n < 3 { if n, ok := strconv.Atoi(s); n < 3 {
@ -54,7 +54,7 @@ func Serve(l net.Listener, f *(*Conn, *Request)) *os.Error {
} }
// Web server: listen on address, call f for each request. // Web server: listen on address, call f for each request.
func ListenAndServe(addr string, f *(*Conn, *Request)) *os.Error { func ListenAndServe(addr string, f func(*Conn, *Request)) *os.Error {
l, e := net.Listen("tcp", addr); l, e := net.Listen("tcp", addr);
if e != nil { if e != nil {
return e return e

View File

@ -175,7 +175,7 @@ func LookupHost(name string) (name1 string, addrs []string, err *os.Error) {
// TODO(rsc): Pick out obvious non-DNS names to avoid // TODO(rsc): Pick out obvious non-DNS names to avoid
// sending stupid requests to the server? // sending stupid requests to the server?
once.Do(&_LoadConfig); once.Do(_LoadConfig);
if cfg == nil { if cfg == nil {
err = DNS_MissingConfig; err = DNS_MissingConfig;
return; return;

View File

@ -197,7 +197,7 @@ type DNS_RR_A struct {
// packing sequence. // packing sequence.
// Map of constructors for each RR wire type. // Map of constructors for each RR wire type.
var rr_mk = map[int]*()DNS_RR { var rr_mk = map[int] func()DNS_RR {
DNS_TypeCNAME: func() DNS_RR { return new(DNS_RR_CNAME) }, DNS_TypeCNAME: func() DNS_RR { return new(DNS_RR_CNAME) },
DNS_TypeHINFO: func() DNS_RR { return new(DNS_RR_HINFO) }, DNS_TypeHINFO: func() DNS_RR { return new(DNS_RR_HINFO) },
DNS_TypeMB: func() DNS_RR { return new(DNS_RR_MB) }, DNS_TypeMB: func() DNS_RR { return new(DNS_RR_MB) },

View File

@ -209,7 +209,7 @@ func _StartServer() {
func NewFD(fd int64) (f *FD, err *os.Error) { func NewFD(fd int64) (f *FD, err *os.Error) {
if pollserver == nil { if pollserver == nil {
once.Do(&_StartServer); once.Do(_StartServer);
} }
if err = _SetNonblock(fd); err != nil { if err = _SetNonblock(fd); err != nil {
return nil, err return nil, err

View File

@ -327,13 +327,13 @@ func _InternetSocket(net, laddr, raddr string, proto int64, mode string) (fd *FD
} }
} }
var cvt *(addr []byte, port int) (sa *syscall.Sockaddr, err *os.Error); var cvt func(addr []byte, port int) (sa *syscall.Sockaddr, err *os.Error);
var family int64; var family int64;
if vers == 4 { if vers == 4 {
cvt = &IPv4ToSockaddr; cvt = IPv4ToSockaddr;
family = syscall.AF_INET family = syscall.AF_INET
} else { } else {
cvt = &IPv6ToSockaddr; cvt = IPv6ToSockaddr;
family = syscall.AF_INET6 family = syscall.AF_INET6
} }

View File

@ -49,7 +49,7 @@ func _ReadServices() {
} }
func LookupPort(netw, name string) (port int, ok bool) { func LookupPort(netw, name string) (port int, ok bool) {
once.Do(&_ReadServices); once.Do(_ReadServices);
switch netw { switch netw {
case "tcp4", "tcp6": case "tcp4", "tcp6":

View File

@ -17,12 +17,12 @@ type _Job struct {
} }
type _Request struct { type _Request struct {
f *(); f func();
reply chan *_Job reply chan *_Job
} }
var service = make(chan _Request) var service = make(chan _Request)
var jobmap = make(map[*()]*_Job) var jobmap = make(map[func()]*_Job)
// Moderate access to the jobmap. // Moderate access to the jobmap.
// Even if accesses were thread-safe (they should be but are not) // Even if accesses were thread-safe (they should be but are not)
@ -42,7 +42,7 @@ func server() {
} }
} }
func Do(f *()) { func Do(f func()) {
// Look for job in map (avoids channel communication). // Look for job in map (avoids channel communication).
// If not there, ask map server to make one. // If not there, ask map server to make one.
// TODO: Uncomment use of jobmap[f] once // TODO: Uncomment use of jobmap[f] once

View File

@ -16,16 +16,16 @@ func call() {
func TestOnce(t *testing.T) { func TestOnce(t *testing.T) {
ncall = 0; ncall = 0;
once.Do(&call); once.Do(call);
if ncall != 1 { if ncall != 1 {
t.Fatalf("once.Do(&call) didn't call(): ncall=%d", ncall); t.Fatalf("once.Do(call) didn't call(): ncall=%d", ncall);
} }
once.Do(&call); once.Do(call);
if ncall != 1 { if ncall != 1 {
t.Fatalf("second once.Do(&call) did call(): ncall=%d", ncall); t.Fatalf("second once.Do(call) did call(): ncall=%d", ncall);
} }
once.Do(&call); once.Do(call);
if ncall != 1 { if ncall != 1 {
t.Fatalf("third once.Do(&call) did call(): ncall=%d", ncall); t.Fatalf("third once.Do(call) did call(): ncall=%d", ncall);
} }
} }

View File

@ -60,7 +60,7 @@ func (c *commonValue) Interface() interface {} {
func newValueAddr(typ Type, addr Addr) Value func newValueAddr(typ Type, addr Addr) Value
type creatorFn *(typ Type, addr Addr) Value type creatorFn func(typ Type, addr Addr) Value
// -- Missing // -- Missing
@ -790,31 +790,31 @@ func funcCreator(typ Type, addr Addr) Value {
} }
var creator = map[int] creatorFn { var creator = map[int] creatorFn {
MissingKind : &missingCreator, MissingKind : missingCreator,
IntKind : &intCreator, IntKind : intCreator,
Int8Kind : &int8Creator, Int8Kind : int8Creator,
Int16Kind : &int16Creator, Int16Kind : int16Creator,
Int32Kind : &int32Creator, Int32Kind : int32Creator,
Int64Kind : &int64Creator, Int64Kind : int64Creator,
UintKind : &uintCreator, UintKind : uintCreator,
Uint8Kind : &uint8Creator, Uint8Kind : uint8Creator,
Uint16Kind : &uint16Creator, Uint16Kind : uint16Creator,
Uint32Kind : &uint32Creator, Uint32Kind : uint32Creator,
Uint64Kind : &uint64Creator, Uint64Kind : uint64Creator,
UintptrKind : &uintptrCreator, UintptrKind : uintptrCreator,
FloatKind : &floatCreator, FloatKind : floatCreator,
Float32Kind : &float32Creator, Float32Kind : float32Creator,
Float64Kind : &float64Creator, Float64Kind : float64Creator,
Float80Kind : &float80Creator, Float80Kind : float80Creator,
StringKind : &stringCreator, StringKind : stringCreator,
BoolKind : &boolCreator, BoolKind : boolCreator,
PtrKind : &ptrCreator, PtrKind : ptrCreator,
ArrayKind : &arrayCreator, ArrayKind : arrayCreator,
MapKind : &mapCreator, MapKind : mapCreator,
ChanKind : &chanCreator, ChanKind : chanCreator,
StructKind : &structCreator, StructKind : structCreator,
InterfaceKind : &interfaceCreator, InterfaceKind : interfaceCreator,
FuncKind : &funcCreator, FuncKind : funcCreator,
} }
var typecache = make(map[string] Type); var typecache = make(map[string] Type);

View File

@ -71,7 +71,7 @@ func (t *T) Fatalf(format string, args ...) {
type Test struct { type Test struct {
Name string; Name string;
F *(*T); F func(*T);
} }
func tRunner(t *T, test *Test) { func tRunner(t *T, test *Test) {

View File

@ -251,7 +251,7 @@ func _SetupZone() {
} }
func LookupTimezone(sec int64) (zone string, offset int, err *os.Error) { func LookupTimezone(sec int64) (zone string, offset int, err *os.Error) {
once.Do(&_SetupZone); once.Do(_SetupZone);
if zoneerr != nil || len(zones) == 0 { if zoneerr != nil || len(zones) == 0 {
return "GMT", 0, zoneerr return "GMT", 0, zoneerr
} }

View File

@ -1,14 +0,0 @@
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// ! $G $D/$F.go
package main
//should be f *func but compiler accepts it
func iterate(f func(int)) {
}
func main() {
}

View File

@ -4,6 +4,6 @@
package bug0 package bug0
var V0 *() int; var V0 func() int;
var V1 *() (a int); var V1 func() (a int);
var V2 *() (a, b int); var V2 func() (a, b int);

View File

@ -6,7 +6,7 @@
package main package main
type T () type T func()
type I interface { type I interface {
f, g (); f, g ();

View File

@ -1,11 +0,0 @@
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// errchk $G $D/$F.go
package main
type T struct {
v (); // ERROR "field type"
}

14
test/func4.go Normal file
View File

@ -0,0 +1,14 @@
// errchk $G $D/$F.go
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
var notmain func()
func main() {
var x = &main; // ERROR "address of function"
main = notmain; // ERROR "assign to function"
}

77
test/func5.go Normal file
View File

@ -0,0 +1,77 @@
// $G $D/$F.go && $L $F.$A && ./$A.out
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
func caller(f func(int, int) int, a, b int, c chan int) {
c <- f(a,b)
}
func gocall(f func(int, int) int, a, b int) int {
c := make(chan int);
go caller(f, a, b, c);
return <-c;
}
func call(f func(int, int) int, a, b int) int {
return f(a, b)
}
func call1(f func(int, int) int, a, b int) int {
return call(f, a, b)
}
var f func(int, int) int
func add(x, y int) int {
return x + y
}
func fn() (func(int, int) int) {
return f
}
var fc func(int, int, chan int)
func addc(x, y int, c chan int) {
c <- x+y
}
func fnc() (func(int, int, chan int)) {
return fc
}
func three(x int) {
if x != 3 {
panic("wrong val", x)
}
}
var notmain func()
func main() {
three(call(add, 1, 2));
three(call1(add, 1, 2));
f = add;
three(call(f, 1, 2));
three(call1(f, 1, 2));
three(call(fn(), 1, 2));
three(call1(fn(), 1, 2));
three(call(func(a,b int) int {return a+b}, 1, 2));
three(call1(func(a,b int) int {return a+b}, 1, 2));
fc = addc;
c := make(chan int);
go addc(1, 2, c);
three(<-c);
go fc(1, 2, c);
three(<-c);
go fnc()(1, 2, c);
three(<-c);
go func(a, b int, c chan int){c <- a+b}(1, 2, c);
three(<-c);
}

View File

@ -155,9 +155,6 @@ bugs/bug117.go:9: illegal types for operand: RETURN
int int
BUG: should compile BUG: should compile
=========== bugs/bug121.go
BUG: compilation succeeds incorrectly
=========== bugs/bug122.go =========== bugs/bug122.go
BUG: compilation succeeds incorrectly BUG: compilation succeeds incorrectly
@ -197,11 +194,6 @@ hi
3 11 3 11
4 0 4 0
=========== fixedbugs/bug029.go
fixedbugs/bug029.go:6: f is not a type
fixedbugs/bug029.go:6: syntax error near func
fixedbugs/bug029.go:6: syntax error near int
=========== fixedbugs/bug035.go =========== fixedbugs/bug035.go
fixedbugs/bug035.go:6: variable i redeclared in this block fixedbugs/bug035.go:6: variable i redeclared in this block
previous declaration at fixedbugs/bug035.go:5 previous declaration at fixedbugs/bug035.go:5
@ -300,6 +292,13 @@ Faulting address: 0x0
pc: xxx pc: xxx
=========== fixedbugs/bug121.go
fixedbugs/bug121.go:9: syntax error near T
fixedbugs/bug121.go:20: incomplete type I
fixedbugs/bug121.go:20: illegal types for operand: AS
I
*S
=========== fixedbugs/bug133.go =========== fixedbugs/bug133.go
fixedbugs/bug133.dir/bug2.go:11: undefined DOT i on bug0.T fixedbugs/bug133.dir/bug2.go:11: undefined DOT i on bug0.T
fixedbugs/bug133.dir/bug2.go:11: illegal types for operand: RETURN fixedbugs/bug133.dir/bug2.go:11: illegal types for operand: RETURN

View File

@ -10,7 +10,7 @@ package main
type C struct type C struct
{ {
a int; a int;
x *(p *C)int; x func(p *C)int;
} }
func g(p *C)int; func g(p *C)int;
@ -29,7 +29,7 @@ main()
c = new(C); c = new(C);
c.a = 6; c.a = 6;
c.x = &g; c.x = g;
v = g(c); v = g(c);
if v != 6 { panic(v); } if v != 6 { panic(v); }

View File

@ -1,17 +0,0 @@
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// errchk $G $D/$F.go
package main
func main()
{
f := new(()); // ERROR "new"
g := new((x int, f float) string); // ERROR "new"
h := new(*()); // ok
i := new(string); // ok
j := new(map[int]int); // ok
k := new(chan int); // ok
}