1
0
mirror of https://github.com/golang/go synced 2024-11-22 05:44:41 -07:00

convert tests; nothing interesting.

R=r
OCL=23012
CL=23014
This commit is contained in:
Russ Cox 2009-01-16 16:12:14 -08:00
parent 9f4a27cbe6
commit f48cbfdf56
82 changed files with 292 additions and 296 deletions

View File

@ -9,8 +9,8 @@
package malloc package malloc
export type Stats struct { export type Stats struct {
alloc uint64; Alloc uint64;
sys uint64; Sys uint64;
}; };
export func Alloc(uint64) *byte; export func Alloc(uint64) *byte;

View File

@ -6,9 +6,9 @@
package main package main
type T chan uint64; export type T chan uint64;
func M(f uint64) (in, out T) { export func M(f uint64) (in, out T) {
in = make(T, 100); in = make(T, 100);
out = make(T, 100); out = make(T, 100);
go func(in, out T, f uint64) { go func(in, out T, f uint64) {

View File

@ -11,7 +11,7 @@ import (
"fmt"; "fmt";
) )
type T struct { export type T struct {
a float64; a float64;
b int64; b int64;
c string; c string;
@ -19,7 +19,7 @@ type T struct {
} }
var a = []int{ 1, 2, 3 } var a = []int{ 1, 2, 3 }
var NIL []int; export var NIL []int;
func arraycmptest() { func arraycmptest() {
a1 := a; a1 := a;
@ -34,7 +34,7 @@ func arraycmptest() {
} }
} }
func SameArray(a, b []int) bool { export func SameArray(a, b []int) bool {
if len(a) != len(b) || cap(a) != cap(b) { if len(a) != len(b) || cap(a) != cap(b) {
return false; return false;
} }
@ -103,7 +103,7 @@ func chantest() {
} }
} }
type E struct { } export type E struct { }
var e E var e E
func interfacetest() { func interfacetest() {

View File

@ -2,15 +2,15 @@
// 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.
// $G $D/$F.go && echo BUG: compilation succeeds incorrectly // ! $G $D/$F.go || echo BUG: compilation succeeds incorrectly
package main package main
type T struct type t struct
type S struct { type s struct {
p *T // BUG T never declared p *t // BUG t never declared
} }
func main() { func main() {
var s S; var s1 s;
} }

View File

@ -5,8 +5,8 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
package main package main
type S struct { a int } export type S struct { a int }
type PS *S export type PS *S
func (p *S) get() int { func (p *S) get() int {
return p.a return p.a
} }

View File

@ -6,14 +6,14 @@
package main package main
type T () export type T ()
type I interface { export type I interface {
f, g (); f, g ();
h T; // should only allow FunctionType here h T; // should only allow FunctionType here
} }
type S struct { export type S struct {
} }
func (s *S) f() {} func (s *S) f() {}

View File

@ -5,7 +5,7 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
package main package main
const ( F = 1 ) export const ( F = 1 )
func fn(i int) int { func fn(i int) int {
if i == F() { // ERROR "function" if i == F() { // ERROR "function"
return 0 return 0

View File

@ -6,9 +6,9 @@
package main package main
type I interface { send(chan <- int) } export type I interface { send(chan <- int) }
type S struct { v int } export type S struct { v int }
func (p *S) send(c chan <- int) { c <- p.v } func (p *S) send(c chan <- int) { c <- p.v }
func main() { func main() {

View File

@ -8,9 +8,9 @@
package main package main
const N = 10 export const N = 10
func AsynchFifo() { export func AsynchFifo() {
ch := make(chan int, N); ch := make(chan int, N);
for i := 0; i < N; i++ { for i := 0; i < N; i++ {
ch <- i ch <- i
@ -23,7 +23,7 @@ func AsynchFifo() {
} }
} }
func Chain(ch <-chan int, val int, in <-chan int, out chan<- int) { export func Chain(ch <-chan int, val int, in <-chan int, out chan<- int) {
<-in; <-in;
if <-ch != val { if <-ch != val {
panic(val) panic(val)
@ -32,7 +32,7 @@ func Chain(ch <-chan int, val int, in <-chan int, out chan<- int) {
} }
// thread together a daisy chain to read the elements in sequence // thread together a daisy chain to read the elements in sequence
func SynchFifo() { export func SynchFifo() {
ch := make(chan int); ch := make(chan int);
in := make(chan int); in := make(chan int);
start := in; start := in;

View File

@ -41,7 +41,7 @@ var chnames string
var chnameserial int var chnameserial int
var seqno int var seqno int
func Init(); export func Init();
func mkdch() *dch { func mkdch() *dch {
c := chnameserial % len(chnames); c := chnameserial % len(chnames);
@ -176,11 +176,11 @@ func repeat(dat item, out *dch){
} }
} }
type PS *dch; // power series export type PS *dch; // power series
type PS2 *[2] PS; // pair of power series export type PS2 *[2] PS; // pair of power series
var Ones PS export var Ones PS
var Twos PS export var Twos PS
func mkPS() *dch { func mkPS() *dch {
return mkdch() return mkdch()
@ -266,8 +266,7 @@ func inv(u *rat) *rat{ // invert a rat
} }
// print eval in floating point of PS at x=c to n terms // print eval in floating point of PS at x=c to n terms
func export func Evaln(c *rat, U PS, n int)
Evaln(c *rat, U PS, n int)
{ {
xn := float64(1); xn := float64(1);
x := float64(c.num)/float64(c.den); x := float64(c.num)/float64(c.den);
@ -284,7 +283,7 @@ Evaln(c *rat, U PS, n int)
} }
// Print n terms of a power series // Print n terms of a power series
func Printn(U PS, n int){ export func Printn(U PS, n int){
done := false; done := false;
for ; !done && n>0; n-- { for ; !done && n>0; n-- {
u := get(U); u := get(U);
@ -294,7 +293,7 @@ func Printn(U PS, n int){
print(("\n")); print(("\n"));
} }
func Print(U PS){ export func Print(U PS){
Printn(U,1000000000); Printn(U,1000000000);
} }
@ -312,14 +311,14 @@ func eval(c *rat, U PS, n int) *rat{
// Make a pair of power series identical to a given power series // Make a pair of power series identical to a given power series
func Split(U PS) *dch2{ export func Split(U PS) *dch2{
UU := mkdch2(); UU := mkdch2();
go split(U,UU); go split(U,UU);
return UU; return UU;
} }
// Add two power series // Add two power series
func Add(U, V PS) PS{ export func Add(U, V PS) PS{
Z := mkPS(); Z := mkPS();
go func(U, V, Z PS){ go func(U, V, Z PS){
var uv [] *rat; var uv [] *rat;
@ -344,7 +343,7 @@ func Add(U, V PS) PS{
} }
// Multiply a power series by a constant // Multiply a power series by a constant
func Cmul(c *rat,U PS) PS{ export func Cmul(c *rat,U PS) PS{
Z := mkPS(); Z := mkPS();
go func(c *rat, U, Z PS){ go func(c *rat, U, Z PS){
done := false; done := false;
@ -361,13 +360,13 @@ func Cmul(c *rat,U PS) PS{
// Subtract // Subtract
func Sub(U, V PS) PS{ export func Sub(U, V PS) PS{
return Add(U, Cmul(neg(one), V)); return Add(U, Cmul(neg(one), V));
} }
// Multiply a power series by the monomial x^n // Multiply a power series by the monomial x^n
func Monmul(U PS, n int) PS{ export func Monmul(U PS, n int) PS{
Z := mkPS(); Z := mkPS();
go func(n int, U PS, Z PS){ go func(n int, U PS, Z PS){
for ; n>0; n-- { put(zero,Z) } for ; n>0; n-- { put(zero,Z) }
@ -378,11 +377,11 @@ func Monmul(U PS, n int) PS{
// Multiply by x // Multiply by x
func Xmul(U PS) PS{ export func Xmul(U PS) PS{
return Monmul(U,1); return Monmul(U,1);
} }
func Rep(c *rat) PS{ export func Rep(c *rat) PS{
Z := mkPS(); Z := mkPS();
go repeat(c,Z); go repeat(c,Z);
return Z; return Z;
@ -390,7 +389,7 @@ func Rep(c *rat) PS{
// Monomial c*x^n // Monomial c*x^n
func Mon(c *rat, n int) PS{ export func Mon(c *rat, n int) PS{
Z:=mkPS(); Z:=mkPS();
go func(c *rat, n int, Z PS){ go func(c *rat, n int, Z PS){
if(c.num!=0) { if(c.num!=0) {
@ -402,7 +401,7 @@ func Mon(c *rat, n int) PS{
return Z; return Z;
} }
func Shift(c *rat, U PS) PS{ export func Shift(c *rat, U PS) PS{
Z := mkPS(); Z := mkPS();
go func(c *rat, U, Z PS){ go func(c *rat, U, Z PS){
put(c,Z); put(c,Z);
@ -417,7 +416,7 @@ func Shift(c *rat, U PS) PS{
// to a (finite) power series // to a (finite) power series
/* BUG: NEED LEN OF ARRAY /* BUG: NEED LEN OF ARRAY
func Poly(a [] *rat) PS{ export func Poly(a [] *rat) PS{
Z:=mkPS(); Z:=mkPS();
begin func(a [] *rat, Z PS){ begin func(a [] *rat, Z PS){
j:=0; j:=0;
@ -437,7 +436,7 @@ func Poly(a [] *rat) PS{
// let V = v + x*VV // let V = v + x*VV
// then UV = u*v + x*(u*VV+v*UU) + x*x*UU*VV // then UV = u*v + x*(u*VV+v*UU) + x*x*UU*VV
func Mul(U, V PS) PS{ export func Mul(U, V PS) PS{
Z:=mkPS(); Z:=mkPS();
go func(U, V, Z PS){ go func(U, V, Z PS){
<-Z.req; <-Z.req;
@ -459,7 +458,7 @@ func Mul(U, V PS) PS{
// Differentiate // Differentiate
func Diff(U PS) PS{ export func Diff(U PS) PS{
Z:=mkPS(); Z:=mkPS();
go func(U, Z PS){ go func(U, Z PS){
<-Z.req; <-Z.req;
@ -481,7 +480,7 @@ func Diff(U PS) PS{
} }
// Integrate, with const of integration // Integrate, with const of integration
func Integ(c *rat,U PS) PS{ export func Integ(c *rat,U PS) PS{
Z:=mkPS(); Z:=mkPS();
go func(c *rat, U, Z PS){ go func(c *rat, U, Z PS){
put(c,Z); put(c,Z);
@ -499,7 +498,7 @@ func Integ(c *rat,U PS) PS{
// Binomial theorem (1+x)^c // Binomial theorem (1+x)^c
func Binom(c *rat) PS{ export func Binom(c *rat) PS{
Z:=mkPS(); Z:=mkPS();
go func(c *rat, Z PS){ go func(c *rat, Z PS){
n := 1; n := 1;
@ -523,7 +522,7 @@ func Binom(c *rat) PS{
// u*ZZ + z*UU +x*UU*ZZ = 0 // u*ZZ + z*UU +x*UU*ZZ = 0
// ZZ = -UU*(z+x*ZZ)/u; // ZZ = -UU*(z+x*ZZ)/u;
func Recip(U PS) PS{ export func Recip(U PS) PS{
Z:=mkPS(); Z:=mkPS();
go func(U, Z PS){ go func(U, Z PS){
ZZ:=mkPS2(); ZZ:=mkPS2();
@ -543,7 +542,7 @@ func Recip(U PS) PS{
// DZ = Z*DU // DZ = Z*DU
// integrate to get Z // integrate to get Z
func Exp(U PS) PS{ export func Exp(U PS) PS{
ZZ := mkPS2(); ZZ := mkPS2();
split(Integ(one,Mul(ZZ[0],Diff(U))),ZZ); split(Integ(one,Mul(ZZ[0],Diff(U))),ZZ);
return ZZ[1]; return ZZ[1];
@ -555,7 +554,7 @@ func Exp(U PS) PS{
// then S(U,V) = u + VV*S(V,UU) // then S(U,V) = u + VV*S(V,UU)
// bug: a nonzero constant term is ignored // bug: a nonzero constant term is ignored
func Subst(U, V PS) PS { export func Subst(U, V PS) PS {
Z:= mkPS(); Z:= mkPS();
go func(U, V, Z PS) { go func(U, V, Z PS) {
VV := Split(V); VV := Split(V);
@ -573,7 +572,7 @@ func Subst(U, V PS) PS {
// Monomial Substition: U(c x^n) // Monomial Substition: U(c x^n)
// Each Ui is multiplied by c^i and followed by n-1 zeros // Each Ui is multiplied by c^i and followed by n-1 zeros
func MonSubst(U PS, c0 *rat, n int) PS { export func MonSubst(U PS, c0 *rat, n int) PS {
Z:= mkPS(); Z:= mkPS();
go func(U, Z PS, c0 *rat, n int) { go func(U, Z PS, c0 *rat, n int) {
c := one; c := one;
@ -596,7 +595,7 @@ func MonSubst(U PS, c0 *rat, n int) PS {
} }
func Init() { export func Init() {
chnameserial = -1; chnameserial = -1;
seqno = 0; seqno = 0;
chnames = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; chnames = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
@ -621,7 +620,7 @@ func check(U PS, c *rat, count int, str string) {
} }
} }
const N=10 export const N=10
func checka(U PS, a []*rat, str string) { func checka(U PS, a []*rat, str string) {
for i := 0; i < N; i++ { for i := 0; i < N; i++ {
check(U, a[i], 1, str); check(U, a[i], 1, str);

View File

@ -46,7 +46,7 @@ var chnames string
var chnameserial int var chnameserial int
var seqno int var seqno int
func Init(); export func Init();
func mkdch() *dch { func mkdch() *dch {
c := chnameserial % len(chnames); c := chnameserial % len(chnames);
@ -181,11 +181,11 @@ func repeat(dat item, out *dch){
} }
} }
type PS *dch; // power series export type PS *dch; // power series
type PS2 *[2] PS; // pair of power series export type PS2 *[2] PS; // pair of power series
var Ones PS export var Ones PS
var Twos PS export var Twos PS
func mkPS() *dch { func mkPS() *dch {
return mkdch() return mkdch()
@ -271,8 +271,7 @@ func inv(u *rat) *rat{ // invert a rat
} }
// print eval in floating point of PS at x=c to n terms // print eval in floating point of PS at x=c to n terms
func export func Evaln(c *rat, U PS, n int)
Evaln(c *rat, U PS, n int)
{ {
xn := float64(1); xn := float64(1);
x := float64(c.num)/float64(c.den); x := float64(c.num)/float64(c.den);
@ -289,7 +288,7 @@ Evaln(c *rat, U PS, n int)
} }
// Print n terms of a power series // Print n terms of a power series
func Printn(U PS, n int){ export func Printn(U PS, n int){
done := false; done := false;
for ; !done && n>0; n-- { for ; !done && n>0; n-- {
u := get(U); u := get(U);
@ -299,7 +298,7 @@ func Printn(U PS, n int){
print(("\n")); print(("\n"));
} }
func Print(U PS){ export func Print(U PS){
Printn(U,1000000000); Printn(U,1000000000);
} }
@ -317,14 +316,14 @@ func eval(c *rat, U PS, n int) *rat{
// Make a pair of power series identical to a given power series // Make a pair of power series identical to a given power series
func Split(U PS) *dch2{ export func Split(U PS) *dch2{
UU := mkdch2(); UU := mkdch2();
go split(U,UU); go split(U,UU);
return UU; return UU;
} }
// Add two power series // Add two power series
func Add(U, V PS) PS{ export func Add(U, V PS) PS{
Z := mkPS(); Z := mkPS();
go func(U, V, Z PS){ go func(U, V, Z PS){
var uv [] item; var uv [] item;
@ -349,7 +348,7 @@ func Add(U, V PS) PS{
} }
// Multiply a power series by a constant // Multiply a power series by a constant
func Cmul(c *rat,U PS) PS{ export func Cmul(c *rat,U PS) PS{
Z := mkPS(); Z := mkPS();
go func(c *rat, U, Z PS){ go func(c *rat, U, Z PS){
done := false; done := false;
@ -366,13 +365,13 @@ func Cmul(c *rat,U PS) PS{
// Subtract // Subtract
func Sub(U, V PS) PS{ export func Sub(U, V PS) PS{
return Add(U, Cmul(neg(one), V)); return Add(U, Cmul(neg(one), V));
} }
// Multiply a power series by the monomial x^n // Multiply a power series by the monomial x^n
func Monmul(U PS, n int) PS{ export func Monmul(U PS, n int) PS{
Z := mkPS(); Z := mkPS();
go func(n int, U PS, Z PS){ go func(n int, U PS, Z PS){
for ; n>0; n-- { put(zero,Z) } for ; n>0; n-- { put(zero,Z) }
@ -383,11 +382,11 @@ func Monmul(U PS, n int) PS{
// Multiply by x // Multiply by x
func Xmul(U PS) PS{ export func Xmul(U PS) PS{
return Monmul(U,1); return Monmul(U,1);
} }
func Rep(c *rat) PS{ export func Rep(c *rat) PS{
Z := mkPS(); Z := mkPS();
go repeat(c,Z); go repeat(c,Z);
return Z; return Z;
@ -395,7 +394,7 @@ func Rep(c *rat) PS{
// Monomial c*x^n // Monomial c*x^n
func Mon(c *rat, n int) PS{ export func Mon(c *rat, n int) PS{
Z:=mkPS(); Z:=mkPS();
go func(c *rat, n int, Z PS){ go func(c *rat, n int, Z PS){
if(c.num!=0) { if(c.num!=0) {
@ -407,7 +406,7 @@ func Mon(c *rat, n int) PS{
return Z; return Z;
} }
func Shift(c *rat, U PS) PS{ export func Shift(c *rat, U PS) PS{
Z := mkPS(); Z := mkPS();
go func(c *rat, U, Z PS){ go func(c *rat, U, Z PS){
put(c,Z); put(c,Z);
@ -422,7 +421,7 @@ func Shift(c *rat, U PS) PS{
// to a (finite) power series // to a (finite) power series
/* BUG: NEED LEN OF ARRAY /* BUG: NEED LEN OF ARRAY
func Poly(a [] *rat) PS{ export func Poly(a [] *rat) PS{
Z:=mkPS(); Z:=mkPS();
begin func(a [] *rat, Z PS){ begin func(a [] *rat, Z PS){
j:=0; j:=0;
@ -442,7 +441,7 @@ func Poly(a [] *rat) PS{
// let V = v + x*VV // let V = v + x*VV
// then UV = u*v + x*(u*VV+v*UU) + x*x*UU*VV // then UV = u*v + x*(u*VV+v*UU) + x*x*UU*VV
func Mul(U, V PS) PS{ export func Mul(U, V PS) PS{
Z:=mkPS(); Z:=mkPS();
go func(U, V, Z PS){ go func(U, V, Z PS){
<-Z.req; <-Z.req;
@ -464,7 +463,7 @@ func Mul(U, V PS) PS{
// Differentiate // Differentiate
func Diff(U PS) PS{ export func Diff(U PS) PS{
Z:=mkPS(); Z:=mkPS();
go func(U, Z PS){ go func(U, Z PS){
<-Z.req; <-Z.req;
@ -486,7 +485,7 @@ func Diff(U PS) PS{
} }
// Integrate, with const of integration // Integrate, with const of integration
func Integ(c *rat,U PS) PS{ export func Integ(c *rat,U PS) PS{
Z:=mkPS(); Z:=mkPS();
go func(c *rat, U, Z PS){ go func(c *rat, U, Z PS){
put(c,Z); put(c,Z);
@ -504,7 +503,7 @@ func Integ(c *rat,U PS) PS{
// Binomial theorem (1+x)^c // Binomial theorem (1+x)^c
func Binom(c *rat) PS{ export func Binom(c *rat) PS{
Z:=mkPS(); Z:=mkPS();
go func(c *rat, Z PS){ go func(c *rat, Z PS){
n := 1; n := 1;
@ -528,7 +527,7 @@ func Binom(c *rat) PS{
// u*ZZ + z*UU +x*UU*ZZ = 0 // u*ZZ + z*UU +x*UU*ZZ = 0
// ZZ = -UU*(z+x*ZZ)/u; // ZZ = -UU*(z+x*ZZ)/u;
func Recip(U PS) PS{ export func Recip(U PS) PS{
Z:=mkPS(); Z:=mkPS();
go func(U, Z PS){ go func(U, Z PS){
ZZ:=mkPS2(); ZZ:=mkPS2();
@ -548,7 +547,7 @@ func Recip(U PS) PS{
// DZ = Z*DU // DZ = Z*DU
// integrate to get Z // integrate to get Z
func Exp(U PS) PS{ export func Exp(U PS) PS{
ZZ := mkPS2(); ZZ := mkPS2();
split(Integ(one,Mul(ZZ[0],Diff(U))),ZZ); split(Integ(one,Mul(ZZ[0],Diff(U))),ZZ);
return ZZ[1]; return ZZ[1];
@ -560,7 +559,7 @@ func Exp(U PS) PS{
// then S(U,V) = u + VV*S(V,UU) // then S(U,V) = u + VV*S(V,UU)
// bug: a nonzero constant term is ignored // bug: a nonzero constant term is ignored
func Subst(U, V PS) PS { export func Subst(U, V PS) PS {
Z:= mkPS(); Z:= mkPS();
go func(U, V, Z PS) { go func(U, V, Z PS) {
VV := Split(V); VV := Split(V);
@ -578,7 +577,7 @@ func Subst(U, V PS) PS {
// Monomial Substition: U(c x^n) // Monomial Substition: U(c x^n)
// Each Ui is multiplied by c^i and followed by n-1 zeros // Each Ui is multiplied by c^i and followed by n-1 zeros
func MonSubst(U PS, c0 *rat, n int) PS { export func MonSubst(U PS, c0 *rat, n int) PS {
Z:= mkPS(); Z:= mkPS();
go func(U, Z PS, c0 *rat, n int) { go func(U, Z PS, c0 *rat, n int) {
c := one; c := one;
@ -601,7 +600,7 @@ func MonSubst(U PS, c0 *rat, n int) PS {
} }
func Init() { export func Init() {
chnameserial = -1; chnameserial = -1;
seqno = 0; seqno = 0;
chnames = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; chnames = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
@ -626,7 +625,7 @@ func check(U PS, c *rat, count int, str string) {
} }
} }
const N=10 export const N=10
func checka(U PS, a []*rat, str string) { func checka(U PS, a []*rat, str string) {
for i := 0; i < N; i++ { for i := 0; i < N; i++ {
check(U, a[i], 1, str); check(U, a[i], 1, str);

View File

@ -9,12 +9,12 @@ package main
var counter uint var counter uint
var shift uint var shift uint
func GetValue() uint { export func GetValue() uint {
counter++; counter++;
return 1 << shift return 1 << shift
} }
func Send(a, b chan uint) int { export func Send(a, b chan uint) int {
var i int; var i int;
LOOP: LOOP:
for { for {

View File

@ -10,7 +10,7 @@
package main package main
// Send the sequence 2, 3, 4, ... to channel 'ch'. // Send the sequence 2, 3, 4, ... to channel 'ch'.
func Generate(ch chan<- int) { export func Generate(ch chan<- int) {
for i := 2; ; i++ { for i := 2; ; i++ {
ch <- i // Send 'i' to channel 'ch'. ch <- i // Send 'i' to channel 'ch'.
} }
@ -18,7 +18,7 @@ func Generate(ch chan<- int) {
// Copy the values from channel 'in' to channel 'out', // Copy the values from channel 'in' to channel 'out',
// removing those divisible by 'prime'. // removing those divisible by 'prime'.
func Filter(in <-chan int, out chan<- int, prime int) { export func Filter(in <-chan int, out chan<- int, prime int) {
for { for {
i := <-in; // Receive value of new variable 'i' from 'in'. i := <-in; // Receive value of new variable 'i' from 'in'.
if i % prime != 0 { if i % prime != 0 {
@ -28,7 +28,7 @@ func Filter(in <-chan int, out chan<- int, prime int) {
} }
// The prime sieve: Daisy-chain Filter processes together. // The prime sieve: Daisy-chain Filter processes together.
func Sieve(primes chan<- int) { export func Sieve(primes chan<- int) {
ch := make(chan int); // Create a new channel. ch := make(chan int); // Create a new channel.
go Generate(ch); // Start Generate() as a subprocess. go Generate(ch); // Start Generate() as a subprocess.
for { for {

View File

@ -6,9 +6,9 @@
package main package main
type T struct { i int; f float; s string; next *T } export type T struct { i int; f float; s string; next *T }
type R struct { num int } export type R struct { num int }
func itor(a int) *R { func itor(a int) *R {
r := new(R); r := new(R);
@ -22,8 +22,8 @@ func eq(a []*R) {
} }
} }
type P struct { a, b int }; export type P struct { a, b int };
func NewP(a, b int) *P { export func NewP(a, b int) *P {
return &P{a, b} return &P{a, b}
} }

View File

@ -10,6 +10,8 @@ var a = []int { "a" }; // ERROR "conver|incompatible"
var b = int { 1 }; // ERROR "compos" var b = int { 1 }; // ERROR "compos"
func f() int
func main() { func main() {
if sys.argc < 1 { } // ERROR "conver|incompatible" if f < 1 { } // ERROR "conver|incompatible"
} }

View File

@ -12,5 +12,5 @@ export type B interface // ERROR "incomplete"
export type C struct export type C struct
export type D interface export type D interface
type C struct { } export type C struct { }
type D interface { } export type D interface { }

View File

@ -6,7 +6,7 @@
package main package main
type ( export type (
Point struct { x, y float }; Point struct { x, y float };
Polar Point Polar Point
) )

View File

@ -7,7 +7,7 @@
package main package main
type T struct { export type T struct {
x, y int; x, y int;
} }

View File

@ -6,11 +6,11 @@
package main package main
type Type interface { export type Type interface {
TypeName() string; TypeName() string;
} }
type TInt struct { export type TInt struct {
} }
// TInt // TInt

View File

@ -2,11 +2,11 @@
// 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.
// ! $G $D/$F.go // # ! $G $D/$F.go
package main package main
export Foo export foo
func main() {} func main() {}

View File

@ -6,7 +6,7 @@
package main package main
type Element interface { export type Element interface {
} }
export type Vector struct { export type Vector struct {

View File

@ -6,15 +6,15 @@
package main package main
type Element interface { export type Element interface {
} }
type Vector struct { export type Vector struct {
nelem int; nelem int;
elem []Element; elem []Element;
} }
func New() *Vector { export func New() *Vector {
v := new(Vector); v := new(Vector);
v.nelem = 0; v.nelem = 0;
v.elem = make([]Element, 10); v.elem = make([]Element, 10);

View File

@ -7,7 +7,7 @@
package main package main
func Alloc(i int) int { export func Alloc(i int) int {
switch i { switch i {
default: default:
return 5; return 5;

View File

@ -6,7 +6,7 @@
package main package main
type S struct { export type S struct {
}; };
func (p *S) M1a() ; func (p *S) M1a() ;

View File

@ -6,7 +6,7 @@
package main package main
type T struct { export type T struct {
i int i int
} }

View File

@ -6,7 +6,7 @@
package main package main
type T *struct {} export type T *struct {}
func (x T) M () {} // ERROR "pointer|receiver" func (x T) M () {} // ERROR "pointer|receiver"

View File

@ -6,10 +6,10 @@
package main package main
type Element interface { export type Element interface {
} }
type Vector struct { export type Vector struct {
elem []Element; elem []Element;
} }
@ -17,7 +17,7 @@ func (v *Vector) At(i int) Element {
return v.elem[i]; return v.elem[i];
} }
type TStruct struct { export type TStruct struct {
name string; name string;
fields *Vector; fields *Vector;
} }

View File

@ -6,7 +6,7 @@
package main package main
type T struct { export type T struct {
s string; s string;
} }

View File

@ -6,7 +6,7 @@
package main package main
type Box struct {}; export type Box struct {};
var m map[string] *Box; var m map[string] *Box;
func main() { func main() {

View File

@ -6,7 +6,7 @@
package main package main
func P(a []string) string { export func P(a []string) string {
s := "{"; s := "{";
for i := 0; i < 2; i++ { for i := 0; i < 2; i++ {
if i > 0 { if i > 0 {

View File

@ -6,26 +6,26 @@
package main package main
type ( export type (
Type struct; Type struct;
Object struct; Object struct;
) )
type Scope struct { export type Scope struct {
entries map[string] *Object; entries map[string] *Object;
} }
type Type struct { export type Type struct {
scope *Scope; scope *Scope;
} }
type Object struct { export type Object struct {
typ *Type; typ *Type;
} }
func Lookup(scope *Scope) *Object { export func Lookup(scope *Scope) *Object {
return scope.entries["foo"]; return scope.entries["foo"];
} }

View File

@ -6,7 +6,7 @@
package main package main
type T struct { m map[int]int } export type T struct { m map[int]int }
func main() { func main() {
t := new(T); t := new(T);
t.m = make(map[int]int); t.m = make(map[int]int);

View File

@ -4,8 +4,7 @@
package bug0 package bug0
type T0 struct { export type T0 struct {
} }
export v0 export var V0 T0
var v0 T0

View File

@ -6,7 +6,7 @@
package main package main
type Service struct { export type Service struct {
rpc [2]int; rpc [2]int;
} }

View File

@ -4,6 +4,6 @@
package bug0 package bug0
export var v0 *() int; export var V0 *() int;
export var v1 *() (a int); export var V1 *() (a int);
export var v2 *() (a, b int); export var V2 *() (a, b int);

View File

@ -7,9 +7,9 @@ package main
import P "bug0" import P "bug0"
func main() { func main() {
a0 := P.v0(); // works a0 := P.V0(); // works
a1 := P.v1(); // works a1 := P.V1(); // works
a2, b2 := P.v2(); // doesn't work a2, b2 := P.V2(); // doesn't work
} }
/* /*

View File

@ -6,8 +6,8 @@
package main package main
type I1 interface {} export type I1 interface {}
type I2 interface { pr() } export type I2 interface { pr() }
func e() I1; func e() I1;

View File

@ -6,14 +6,14 @@
package main package main
type S struct { export type S struct {
} }
func (p *S) M() { func (p *S) M() {
print("M\n"); print("M\n");
} }
type I interface { export type I interface {
M(); M();
} }

View File

@ -6,7 +6,7 @@
package main package main
type A []int; export type A []int;
func main() { func main() {
a := &A{0}; a := &A{0};

View File

@ -6,7 +6,7 @@
package main package main
type A []int; export type A []int;
func main() { func main() {
var a [3]A; var a [3]A;

View File

@ -6,8 +6,8 @@
package main package main
type A []int; export type A []int;
type M map[int] int; export type M map[int] int;
func main() { func main() {
var a *A = &A{0}; var a *A = &A{0};

View File

@ -7,22 +7,22 @@
package main package main
// Interface // Interface
type I interface { F() int } export type I interface { F() int }
// Implements interface // Implements interface
type S struct { } export type S struct { }
func (s *S) F() int { return 1 } func (s *S) F() int { return 1 }
// Allocates S but returns I // Allocates S but returns I
// Arg is unused but important: // Arg is unused but important:
// if you take it out (and the 0s below) // if you take it out (and the 0s below)
// then the bug goes away. // then the bug goes away.
func NewI(i int) I { export func NewI(i int) I {
return new(S) return new(S)
} }
// Uses interface method. // Uses interface method.
func Use(x I) { export func Use(x I) {
x.F() x.F()
} }

View File

@ -6,14 +6,14 @@
package main package main
const A = 0 const a = 0
func f() { func f() {
const A = 5 const a = 5
} }
func main() { func main() {
if A != 0 { if a != 0 {
panic("A=", A) panic("a=", a)
} }
} }

View File

@ -6,7 +6,7 @@
package main package main
type T struct { s string } export type T struct { s string }
var t = T{"hi"} var t = T{"hi"}
func main() {} func main() {}

View File

@ -5,7 +5,7 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
package main package main
type I interface { }; export type I interface { };
func foo1(i int) int { return i } func foo1(i int) int { return i }
func foo2(i int32) int32 { return i } func foo2(i int32) int32 { return i }
func main() { func main() {

View File

@ -6,9 +6,9 @@
package main package main
const B32 = 1<<32 - 1 export const B32 = 1<<32 - 1
const C32 = (-1) & ((1<<32) - 1) export const C32 = (-1) & ((1<<32) - 1)
const D32 = ^0 export const D32 = ^0
func main() { func main() {
if B32 != 0xFFFFFFFF { if B32 != 0xFFFFFFFF {

View File

@ -8,7 +8,7 @@ package main
import "strconv"; import "strconv";
type Test struct { export type Test struct {
f float64; f float64;
in string; in string;
out string; out string;

View File

@ -45,7 +45,7 @@ func f8(a int) (x int, y float) {
return 8, 8.0; return 8, 8.0;
} }
type T struct { export type T struct {
x, y int; x, y int;
} }

View File

@ -19,7 +19,7 @@ errchk: ./convlit.go: unmatched error messages:
hello, world hello, world
=========== ./interface2.go =========== ./interface2.go
cannot convert type *main.S·interface2 to interface main.I·interface2: missing method Foo cannot convert type *main.S to interface main.I: missing method Foo
throw: interface conversion throw: interface conversion
SIGSEGV: segmentation violation SIGSEGV: segmentation violation
Faulting address: 0x0 Faulting address: 0x0
@ -27,7 +27,7 @@ pc: xxx
=========== ./interface3.go =========== ./interface3.go
cannot convert type *main.S·interface3 to interface main.I2·interface3: missing method Name cannot convert type *main.S to interface main.I2: missing method Name
throw: interface conversion throw: interface conversion
SIGSEGV: segmentation violation SIGSEGV: segmentation violation
Faulting address: 0x0 Faulting address: 0x0
@ -86,7 +86,7 @@ abcxyz-abcxyz-abcxyz-abcxyz-abcxyz-abcxyz-abcxyz
PASS PASS
=========== bugs/bug041.go =========== bugs/bug041.go
BUG: compilation succeeds incorrectly bugs/bug041.go:5: export of incomplete type t
=========== bugs/bug064.go =========== bugs/bug064.go
bugs/bug064.go:15: illegal types for operand: CALL bugs/bug064.go:15: illegal types for operand: CALL
@ -149,9 +149,6 @@ BUG: should not compile
=========== fixedbugs/bug016.go =========== fixedbugs/bug016.go
fixedbugs/bug016.go:7: overflow converting constant to uint fixedbugs/bug016.go:7: overflow converting constant to uint
=========== fixedbugs/bug025.go
fixedbugs/bug025.go:7: variable exported but not defined: Foo
=========== fixedbugs/bug027.go =========== fixedbugs/bug027.go
hi hi
0 44444 0 44444
@ -232,7 +229,7 @@ fixedbugs/bug074.go:7: x: undefined
fixedbugs/bug081.go:5: no type x fixedbugs/bug081.go:5: no type x
=========== fixedbugs/bug083.go =========== fixedbugs/bug083.go
fixedbugs/bug083.dir/bug1.go:5: syntax error near T0 BUG: succeeds incorrectly
=========== fixedbugs/bug086.go =========== fixedbugs/bug086.go
fixedbugs/bug086.go:5: function ends without a return statement fixedbugs/bug086.go:5: function ends without a return statement
@ -261,7 +258,7 @@ M
fixedbugs/bug103.go:8: function requires a return type fixedbugs/bug103.go:8: function requires a return type
=========== fixedbugs/bug113.go =========== fixedbugs/bug113.go
main.I·bug113 is int, not int32 main.I is int, not int32
throw: interface conversion throw: interface conversion
SIGSEGV: segmentation violation SIGSEGV: segmentation violation
Faulting address: 0x0 Faulting address: 0x0

View File

@ -9,7 +9,7 @@ package main
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Helper functions // Helper functions
func ASSERT(p bool) { export func ASSERT(p bool) {
if !p { if !p {
// panic 0; // panic 0;
} }
@ -19,18 +19,18 @@ func ASSERT(p bool) {
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Implementation of the HashMap // Implementation of the HashMap
type KeyType interface { export type KeyType interface {
Hash() uint32; Hash() uint32;
Match(other *KeyType) bool Match(other *KeyType) bool
} }
type ValueType interface { export type ValueType interface {
// empty interface // empty interface
} }
type Entry struct { export type Entry struct {
key *KeyType; key *KeyType;
value *ValueType; value *ValueType;
} }
@ -39,7 +39,7 @@ type Entry struct {
// Using the Array type below doesn't seem to work // Using the Array type below doesn't seem to work
//type Array array [1024] Entry; //type Array array [1024] Entry;
type HashMap struct { export type HashMap struct {
map_ *[1024] Entry; map_ *[1024] Entry;
log2_capacity_ uint32; log2_capacity_ uint32;
occupancy_ uint32; occupancy_ uint32;
@ -139,7 +139,7 @@ func (m *HashMap) Resize() {
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Test code // Test code
type Number struct { export type Number struct {
x uint32; x uint32;
} }
@ -156,7 +156,7 @@ func (n *Number) Match(other *KeyType) bool {
} }
func MakeNumber (x uint32) *Number { export func MakeNumber (x uint32) *Number {
var n *Number = new(Number); var n *Number = new(Number);
n.x = x; n.x = x;
return n; return n;

View File

@ -21,13 +21,13 @@ func assert(p bool) {
} }
var ( export var (
Zero = Big.Rat(0, 1); Zero = Big.Rat(0, 1);
One = Big.Rat(1, 1); One = Big.Rat(1, 1);
) )
type Matrix struct { export type Matrix struct {
n, m int; n, m int;
a []*Big.Rational; a []*Big.Rational;
} }
@ -45,7 +45,7 @@ func (a *Matrix) set(i, j int, x *Big.Rational) {
} }
func NewMatrix(n, m int) *Matrix { export func NewMatrix(n, m int) *Matrix {
assert(0 <= n && 0 <= m); assert(0 <= n && 0 <= m);
a := new(Matrix); a := new(Matrix);
a.n = n; a.n = n;
@ -55,7 +55,7 @@ func NewMatrix(n, m int) *Matrix {
} }
func NewUnit(n int) *Matrix { export func NewUnit(n int) *Matrix {
a := NewMatrix(n, n); a := NewMatrix(n, n);
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
@ -70,7 +70,7 @@ func NewUnit(n int) *Matrix {
} }
func NewHilbert(n int) *Matrix { export func NewHilbert(n int) *Matrix {
a := NewMatrix(n, n); a := NewMatrix(n, n);
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {
@ -82,12 +82,12 @@ func NewHilbert(n int) *Matrix {
} }
func MakeRat(x Big.Natural) *Big.Rational { export func MakeRat(x Big.Natural) *Big.Rational {
return Big.MakeRat(Big.MakeInt(false, x), Big.Nat(1)); return Big.MakeRat(Big.MakeInt(false, x), Big.Nat(1));
} }
func NewInverseHilbert(n int) *Matrix { export func NewInverseHilbert(n int) *Matrix {
a := NewMatrix(n, n); a := NewMatrix(n, n);
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
for j := 0; j < n; j++ { for j := 0; j < n; j++ {

View File

@ -6,17 +6,17 @@
package main package main
type I2 interface export type I2 interface
type I1 interface { export type I1 interface {
foo() I2 foo() I2
} }
type I2 interface { export type I2 interface {
bar() I1 bar() I1
} }
type T int export type T int
func (t T) bar() I1; func (t T) bar() I1;
func (t T) foo() I2 { return t } func (t T) foo() I2 { return t }
func (t T) bar() I1 { return t } func (t T) bar() I1 { return t }

View File

@ -6,23 +6,23 @@
package main package main
type Inst interface { export type Inst interface {
Next() *Inst; Next() *Inst;
} }
type Regexp struct { export type Regexp struct {
code []Inst; code []Inst;
start Inst; start Inst;
} }
type Start struct { export type Start struct {
foo *Inst; foo *Inst;
} }
func (start *Start) Next() *Inst { return nil } func (start *Start) Next() *Inst { return nil }
func AddInst(Inst) *Inst { export func AddInst(Inst) *Inst {
print("ok in addinst\n"); print("ok in addinst\n");
return nil return nil
} }

View File

@ -6,9 +6,9 @@
package main package main
type S struct export type S struct
type I interface { export type I interface {
Foo() Foo()
} }
@ -21,5 +21,5 @@ func main() {
} }
// hide S down here to avoid static warning // hide S down here to avoid static warning
type S struct { export type S struct {
} }

View File

@ -6,14 +6,14 @@
package main package main
type S struct { a int } export type S struct { a int }
type T struct { b string } export type T struct { b string }
func (s *S) Name() int8 { return 1 } func (s *S) Name() int8 { return 1 }
func (t *T) Name() int64 { return 64 } func (t *T) Name() int64 { return 64 }
type I1 interface { Name() int8 } export type I1 interface { Name() int8 }
type I2 interface { Name() int64 } export type I2 interface { Name() int64 }
func main() { func main() {
var i1 I1; var i1 I1;

View File

@ -9,15 +9,15 @@
package main package main
type I interface { M() int64 } export type I interface { M() int64 }
type BigPtr struct { a, b, c, d int64 } export type BigPtr struct { a, b, c, d int64 }
func (z *BigPtr) M() int64 { return z.a+z.b+z.c+z.d } func (z *BigPtr) M() int64 { return z.a+z.b+z.c+z.d }
type SmallPtr struct { a int32 } export type SmallPtr struct { a int32 }
func (z *SmallPtr) M() int64 { return int64(z.a) } func (z *SmallPtr) M() int64 { return int64(z.a) }
type IntPtr int32 export type IntPtr int32
func (z *IntPtr) M() int64 { return int64(*z) } func (z *IntPtr) M() int64 { return int64(*z) }
var bad bool var bad bool
@ -43,13 +43,13 @@ func ptrs() {
test("&intptr", &intptr); test("&intptr", &intptr);
} }
type Big struct { a, b, c, d int64 } export type Big struct { a, b, c, d int64 }
func (z Big) M() int64 { return z.a+z.b+z.c+z.d } func (z Big) M() int64 { return z.a+z.b+z.c+z.d }
type Small struct { a int32 } export type Small struct { a int32 }
func (z Small) M() int64 { return int64(z.a) } func (z Small) M() int64 { return int64(z.a) }
type Int int32 export type Int int32
func (z Int) M() int64 { return int64(z) } func (z Int) M() int64 { return int64(z) }
func nonptrs() { func nonptrs() {

View File

@ -6,10 +6,10 @@
package main package main
type T struct { a int } export type T struct { a int }
var t *T var t *T
type I interface { M() } export type I interface { M() }
var i I var i I
func main() { func main() {

View File

@ -15,9 +15,9 @@ func check(b bool, msg string) {
} }
} }
type I1 interface { Get() int; Put(int); } export type I1 interface { Get() int; Put(int); }
type S1 struct { i int } export type S1 struct { i int }
func (p S1) Get() int { return p.i } func (p S1) Get() int { return p.i }
func (p S1) Put(i int) { p.i = i } func (p S1) Put(i int) { p.i = i }
@ -45,7 +45,7 @@ func f3() {
check(s.i == 1, "f3 s"); check(s.i == 1, "f3 s");
} }
type S2 struct { i int } export type S2 struct { i int }
func (p *S2) Get() int { return p.i } func (p *S2) Get() int { return p.i }
func (p *S2) Put(i int) { p.i = i } func (p *S2) Put(i int) { p.i = i }
@ -73,9 +73,9 @@ func f6() {
check(s.i == 2, "f6 s"); check(s.i == 2, "f6 s");
} }
type I2 interface { Get() int64; Put(int64); } export type I2 interface { Get() int64; Put(int64); }
type S3 struct { i, j, k, l int64 } export type S3 struct { i, j, k, l int64 }
func (p S3) Get() int64 { return p.l } func (p S3) Get() int64 { return p.l }
func (p S3) Put(i int64) { p.l = i } func (p S3) Put(i int64) { p.l = i }
@ -103,7 +103,7 @@ func f9() {
check(s.l == 4, "f9 s"); check(s.l == 4, "f9 s");
} }
type S4 struct { i, j, k, l int64 } export type S4 struct { i, j, k, l int64 }
func (p *S4) Get() int64 { return p.l } func (p *S4) Get() int64 { return p.l }
func (p *S4) Put(i int64) { p.l = i } func (p *S4) Put(i int64) { p.l = i }

View File

@ -21,13 +21,13 @@ const (
g float = 4.5 * float(iota); g float = 4.5 * float(iota);
) )
const ( export const (
X = 0; X = 0;
Y; Y;
Z; Z;
) )
const ( export const (
A = 1 << iota; A = 1 << iota;
B; B;
C; C;

View File

@ -6,7 +6,7 @@
package main package main
export func func
setpd(a []int) setpd(a []int)
{ {
// print("setpd a=", a, " len=", len(a), " cap=", cap(a), "\n"); // print("setpd a=", a, " len=", len(a), " cap=", cap(a), "\n");
@ -15,7 +15,7 @@ setpd(a []int)
} }
} }
export func func
sumpd(a []int) int sumpd(a []int) int
{ {
// print("sumpd a=", a, " len=", len(a), " cap=", cap(a), "\n"); // print("sumpd a=", a, " len=", len(a), " cap=", cap(a), "\n");
@ -27,7 +27,7 @@ sumpd(a []int) int
return t; return t;
} }
export func func
setpf(a *[20]int) setpf(a *[20]int)
{ {
// print("setpf a=", a, " len=", len(a), " cap=", cap(a), "\n"); // print("setpf a=", a, " len=", len(a), " cap=", cap(a), "\n");
@ -36,7 +36,7 @@ setpf(a *[20]int)
} }
} }
export func func
sumpf(a *[20]int) int sumpf(a *[20]int) int
{ {
// print("sumpf a=", a, " len=", len(a), " cap=", cap(a), "\n"); // print("sumpf a=", a, " len=", len(a), " cap=", cap(a), "\n");

View File

@ -19,7 +19,7 @@ nrand(n int) int
return randx%n; return randx%n;
} }
type Chan export type Chan
struct struct
{ {
sc,rc chan int; // send and recv chan sc,rc chan int; // send and recv chan
@ -30,7 +30,7 @@ var
( (
nproc int; nproc int;
cval int; cval int;
End int = 10000; end int = 10000;
totr,tots int; totr,tots int;
nc *Chan; nc *Chan;
) )
@ -62,7 +62,7 @@ expect(v, v0 int) (newv int)
{ {
if v == v0 { if v == v0 {
if v%100 == 75 { if v%100 == 75 {
return End; return end;
} }
return v+1; return v+1;
} }
@ -75,7 +75,7 @@ send() bool
// print("send ", c.sv, "\n"); // print("send ", c.sv, "\n");
tots++; tots++;
c.sv = expect(c.sv, c.sv); c.sv = expect(c.sv, c.sv);
if c.sv == End { if c.sv == end {
c.sc = nil; c.sc = nil;
return true; return true;
} }
@ -104,7 +104,7 @@ recv(v int) bool
// print("recv ", v, "\n"); // print("recv ", v, "\n");
totr++; totr++;
c.rv = expect(c.rv, v); c.rv = expect(c.rv, v);
if c.rv == End { if c.rv == end {
c.rc = nil; c.rc = nil;
return true; return true;
} }

View File

@ -7,7 +7,7 @@
package main package main
type export type
I interface I interface
{ {
test1, test1,
@ -23,7 +23,7 @@ I interface
****** ******
******/ ******/
type export type
SubpSubp struct SubpSubp struct
{ {
a7 int; a7 int;
@ -45,7 +45,7 @@ testx()
****** ******
******/ ******/
type export type
SubpSub struct SubpSub struct
{ {
a6 int; a6 int;
@ -68,7 +68,7 @@ testx()
****** ******
******/ ******/
type export type
SubSubp struct SubSubp struct
{ {
a5 int; a5 int;
@ -85,7 +85,7 @@ test5() int
****** ******
******/ ******/
type export type
SubSub struct SubSub struct
{ {
a4 int; a4 int;
@ -102,7 +102,7 @@ test4() int
****** ******
******/ ******/
type export type
Subp struct Subp struct
{ {
a3 int; a3 int;
@ -121,7 +121,7 @@ test3() int
****** ******
******/ ******/
type export type
Sub struct Sub struct
{ {
a2 int; a2 int;
@ -140,7 +140,7 @@ test2() int
****** ******
******/ ******/
type export type
S struct S struct
{ {
a1 int; a1 int;

View File

@ -8,7 +8,7 @@ package main
type myint int; type myint int;
type mystring string; type mystring string;
type I0 interface {}; export type I0 interface {};
func func
f() f()

View File

@ -6,17 +6,17 @@
package main package main
type S struct export type S struct
{ {
a,b int; a,b int;
} }
type I1 interface export type I1 interface
{ {
f ()int; f ()int;
} }
type I2 interface export type I2 interface
{ {
g,f ()int; g,f ()int;
} }

View File

@ -6,14 +6,14 @@
package main package main
type Iputs interface export type Iputs interface
{ {
puts (s string); puts (s string);
} }
// --------- // ---------
type Print struct export type Print struct
{ {
whoami int; whoami int;
put Iputs; put Iputs;
@ -28,7 +28,7 @@ dop()
// --------- // ---------
type Bio struct export type Bio struct
{ {
whoami int; whoami int;
put Iputs; put Iputs;
@ -43,7 +43,7 @@ puts(s string)
// --------- // ---------
type File struct export type File struct
{ {
whoami int; whoami int;
put Iputs; put Iputs;

View File

@ -7,7 +7,7 @@
package main package main
type C struct export type C struct
{ {
a int; a int;
x *(p *C)int; x *(p *C)int;

View File

@ -6,18 +6,18 @@
package main package main
type Item interface export type Item interface
{ {
Print(); Print();
} }
type ListItem struct export type ListItem struct
{ {
item Item; item Item;
next *ListItem; next *ListItem;
} }
type List struct export type List struct
{ {
head *ListItem; head *ListItem;
} }
@ -48,7 +48,7 @@ Print()
} }
// Something to put in a list // Something to put in a list
type Integer struct export type Integer struct
{ {
val int; val int;
} }

View File

@ -9,24 +9,24 @@ package main
const nilchar = 0; const nilchar = 0;
type ( export type (
Atom struct; Atom struct;
List struct; List struct;
Slist struct; Slist struct;
) )
type Atom struct { export type Atom struct {
str string; str string;
integer int; integer int;
next *Slist; /* in hash bucket */ next *Slist; /* in hash bucket */
} }
type List struct { export type List struct {
car *Slist; car *Slist;
cdr*Slist; cdr*Slist;
} }
type Slist struct { export type Slist struct {
isatom bool; isatom bool;
isstring bool; isstring bool;
//union { //union {
@ -67,8 +67,8 @@ func (slist *Slist) Free() {
// free(slist); // free(slist);
} }
func OpenFile(); export func OpenFile();
func Parse() *Slist; export func Parse() *Slist;
//Slist* atom(byte *s, int i); //Slist* atom(byte *s, int i);
@ -81,7 +81,7 @@ var inputindex int = 0;
var tokenbuf [100]byte; var tokenbuf [100]byte;
var tokenlen int = 0; var tokenlen int = 0;
const EOF int = -1; export const EOF int = -1;
func main() func main()
{ {
@ -131,7 +131,7 @@ func (slist *Slist) Print()
print("\n"); print("\n");
} }
func Get() int export func Get() int
{ {
var c int; var c int;
@ -152,12 +152,12 @@ func Get() int
return c; return c;
} }
func WhiteSpace(c int) bool export func WhiteSpace(c int) bool
{ {
return c == ' ' || c == '\t' || c == '\r' || c == '\n'; return c == ' ' || c == '\t' || c == '\r' || c == '\n';
} }
func NextToken() export func NextToken()
{ {
var i, c int; var i, c int;
var backslash bool; var backslash bool;
@ -199,7 +199,7 @@ func NextToken()
} }
} }
func Expect(c int) export func Expect(c int)
{ {
if token != c { if token != c {
print("parse error: expected ", c, "\n"); print("parse error: expected ", c, "\n");
@ -209,7 +209,7 @@ func Expect(c int)
} }
// Parse a non-parenthesized list up to a closing paren or EOF // Parse a non-parenthesized list up to a closing paren or EOF
func ParseList() *Slist export func ParseList() *Slist
{ {
var slist, retval *Slist; var slist, retval *Slist;
@ -257,7 +257,7 @@ func atoi() int // BUG: uses tokenbuf; should take argument
return v; return v;
} }
func Parse() *Slist export func Parse() *Slist
{ {
var slist *Slist; var slist *Slist;
@ -288,7 +288,7 @@ func Parse() *Slist
return nil; return nil;
} }
func OpenFile() export func OpenFile()
{ {
input = "(defn foo (add 12 34))\n\x00"; input = "(defn foo (add 12 34))\n\x00";
inputindex = 0; inputindex = 0;

View File

@ -44,7 +44,7 @@ func f8(a int) (x int, y float) {
return 8, 8.0; return 8, 8.0;
} }
type T struct { export type T struct {
x, y int; x, y int;
} }

View File

@ -20,7 +20,7 @@ var chatty = flag.Bool("v", false, "chatty");
var footprint uint64; var footprint uint64;
var allocated uint64; var allocated uint64;
func bigger() { func bigger() {
if f := malloc.GetStats().sys; footprint < f { if f := malloc.GetStats().Sys; footprint < f {
footprint = f; footprint = f;
if *chatty { if *chatty {
println("Footprint", footprint, " for ", allocated); println("Footprint", footprint, " for ", allocated);
@ -60,7 +60,7 @@ func main() {
if i%(1<<10) == 0 && *chatty { if i%(1<<10) == 0 && *chatty {
println(i); println(i);
} }
b := rand.rand() % len(blocks); b := rand.Int() % len(blocks);
if blocks[b].base != nil { if blocks[b].base != nil {
// println("Free", blocks[b].siz, blocks[b].base); // println("Free", blocks[b].siz, blocks[b].base);
malloc.Free(blocks[b].base); malloc.Free(blocks[b].base);
@ -68,7 +68,7 @@ func main() {
allocated -= blocks[b].siz; allocated -= blocks[b].siz;
continue continue
} }
siz := uint64(rand.rand() >> (11 + rand.urand32() % 20)); siz := uint64(rand.Int() >> (11 + rand.Uint32() % 20));
base := malloc.Alloc(siz); base := malloc.Alloc(siz);
// ptr := uint64(syscall.BytePtr(base))+uint64(siz/2); // ptr := uint64(syscall.BytePtr(base))+uint64(siz/2);
// obj, size, ref, ok := allocator.find(ptr); // obj, size, ref, ok := allocator.find(ptr);

View File

@ -17,12 +17,12 @@ var chatty = flag.Bool("v", false, "chatty");
var oldsys uint64; var oldsys uint64;
func bigger() { func bigger() {
if st := malloc.GetStats(); oldsys < st.sys { if st := malloc.GetStats(); oldsys < st.Sys {
oldsys = st.sys; oldsys = st.Sys;
if *chatty { if *chatty {
println(st.sys, " system bytes for ", st.alloc, " Go bytes"); println(st.Sys, " system bytes for ", st.Alloc, " Go bytes");
} }
if st.sys > 1e9 { if st.Sys > 1e9 {
panicln("too big"); panicln("too big");
} }
} }
@ -30,16 +30,16 @@ func bigger() {
func main() { func main() {
flag.Parse(); flag.Parse();
malloc.GetStats().alloc = 0; // ignore stacks malloc.GetStats().Alloc = 0; // ignore stacks
for i := 0; i < 1<<8; i++ { for i := 0; i < 1<<8; i++ {
for j := 1; j <= 1<<22; j<<=1 { for j := 1; j <= 1<<22; j<<=1 {
if i == 0 && *chatty { if i == 0 && *chatty {
println("First alloc:", j); println("First alloc:", j);
} }
b := malloc.Alloc(uint64(j)); b := malloc.Alloc(uint64(j));
during := malloc.GetStats().alloc; during := malloc.GetStats().Alloc;
malloc.Free(b); malloc.Free(b);
if a := malloc.GetStats().alloc; a != 0 { if a := malloc.GetStats().Alloc; a != 0 {
panicln("malloc wrong count", a, "after", j, "during", during); panicln("malloc wrong count", a, "after", j, "during", during);
} }
bigger(); bigger();

View File

@ -22,7 +22,7 @@ var longtest = flag.Bool("l", false, "long test");
var b []*byte; var b []*byte;
var stats = malloc.GetStats(); var stats = malloc.GetStats();
func OkAmount(size, n uintptr) bool { export func OkAmount(size, n uintptr) bool {
if n < size { if n < size {
return false return false
} }
@ -38,45 +38,45 @@ func OkAmount(size, n uintptr) bool {
return true return true
} }
func AllocAndFree(size, count int) { export func AllocAndFree(size, count int) {
if *chatty { if *chatty {
fmt.Printf("size=%d count=%d ...\n", size, count); fmt.Printf("size=%d count=%d ...\n", size, count);
} }
n1 := stats.alloc; n1 := stats.Alloc;
for i := 0; i < count; i++ { for i := 0; i < count; i++ {
b[i] = malloc.Alloc(uint64(size)); b[i] = malloc.Alloc(uint64(size));
base, n := malloc.Lookup(b[i]); base, n := malloc.Lookup(b[i]);
if base != b[i] || !OkAmount(uintptr(size), n) { if base != b[i] || !OkAmount(uintptr(size), n) {
panicln("lookup failed: got", base, n, "for", b[i]); panicln("lookup failed: got", base, n, "for", b[i]);
} }
if malloc.GetStats().sys > 1e9 { if malloc.GetStats().Sys > 1e9 {
panicln("too much memory allocated"); panicln("too much memory allocated");
} }
} }
n2 := stats.alloc; n2 := stats.Alloc;
if *chatty { if *chatty {
fmt.Printf("size=%d count=%d stats=%+v\n", size, count, *stats); fmt.Printf("size=%d count=%d stats=%+v\n", size, count, *stats);
} }
n3 := stats.alloc; n3 := stats.Alloc;
for j := 0; j < count; j++ { for j := 0; j < count; j++ {
i := j; i := j;
if *reverse { if *reverse {
i = count - 1 - j; i = count - 1 - j;
} }
alloc := stats.alloc; alloc := stats.Alloc;
base, n := malloc.Lookup(b[i]); base, n := malloc.Lookup(b[i]);
if base != b[i] || !OkAmount(uintptr(size), n) { if base != b[i] || !OkAmount(uintptr(size), n) {
panicln("lookup failed: got", base, n, "for", b[i]); panicln("lookup failed: got", base, n, "for", b[i]);
} }
malloc.Free(b[i]); malloc.Free(b[i]);
if stats.alloc != alloc - uint64(n) { if stats.Alloc != alloc - uint64(n) {
panicln("free alloc got", stats.alloc, "expected", alloc - uint64(n), "after free of", n); panicln("free alloc got", stats.Alloc, "expected", alloc - uint64(n), "after free of", n);
} }
if malloc.GetStats().sys > 1e9 { if malloc.GetStats().Sys > 1e9 {
panicln("too much memory allocated"); panicln("too much memory allocated");
} }
} }
n4 := stats.alloc; n4 := stats.Alloc;
if *chatty { if *chatty {
fmt.Printf("size=%d count=%d stats=%+v\n", size, count, *stats); fmt.Printf("size=%d count=%d stats=%+v\n", size, count, *stats);

View File

@ -13,7 +13,7 @@ import (
const arraylen = 2; // BUG: shouldn't need this const arraylen = 2; // BUG: shouldn't need this
func P(a []string) string { export func P(a []string) string {
s := "{"; s := "{";
for i := 0; i < len(a); i++ { for i := 0; i < len(a); i++ {
if i > 0 { if i > 0 {

View File

@ -6,12 +6,12 @@
package main package main
type S string export type S string
type S1 string export type S1 string
type I int export type I int
type I1 int export type I1 int
type T struct { x int } export type T struct { x int }
type T1 T export type T1 T
func (s S) val() int { return 1 } func (s S) val() int { return 1 }
func (s *S1) val() int { return 2 } func (s *S1) val() int { return 2 }
@ -20,7 +20,7 @@ func (i *I1) val() int { return 4 }
//func (t T) val() int { return 7 } //func (t T) val() int { return 7 }
func (t *T1) val() int { return 8 } func (t *T1) val() int { return 8 }
type Val interface { export type Val interface {
val() int val() int
} }

View File

@ -6,7 +6,7 @@
package main package main
type T struct { } export type T struct { }
func (t *T) M(int, string); // GCCGO_ERROR "previous" func (t *T) M(int, string); // GCCGO_ERROR "previous"
func (t *T) M(int, float) { } // ERROR "redeclared|redefinition" func (t *T) M(int, float) { } // ERROR "redeclared|redefinition"

View File

@ -6,9 +6,9 @@
package main package main
type T struct {a int} export type T struct {a int}
type P *T export type P *T
type P1 *T export type P1 *T
func (p P) val() int { return 1 } // ERROR "receiver" func (p P) val() int { return 1 } // ERROR "receiver"
func (p *P1) val() int { return 1 } // ERROR "receiver" func (p *P1) val() int { return 1 } // ERROR "receiver"

View File

@ -8,10 +8,10 @@
package main package main
type T [] int export type T [] int
func (t T) Len() int { return len(t) } func (t T) Len() int { return len(t) }
type I interface { export type I interface {
Len() int Len() int
} }

View File

@ -6,11 +6,11 @@
package main package main
type T struct { export type T struct {
i int i int
} }
type IN interface { export type IN interface {
} }
func main() { func main() {

View File

@ -6,7 +6,7 @@
package main package main
type Number struct { export type Number struct {
next *Number next *Number
} }

View File

@ -7,7 +7,7 @@
package main package main
// Send the sequence 2, 3, 4, ... to channel 'ch'. // Send the sequence 2, 3, 4, ... to channel 'ch'.
func Generate(ch chan<- int) { export func Generate(ch chan<- int) {
for i := 2; ; i++ { for i := 2; ; i++ {
ch <- i // Send 'i' to channel 'ch'. ch <- i // Send 'i' to channel 'ch'.
} }
@ -15,7 +15,7 @@ func Generate(ch chan<- int) {
// Copy the values from channel 'in' to channel 'out', // Copy the values from channel 'in' to channel 'out',
// removing those divisible by 'prime'. // removing those divisible by 'prime'.
func Filter(in <-chan int, out chan<- int, prime int) { export func Filter(in <-chan int, out chan<- int, prime int) {
for { for {
i := <-in; // Receive value of new variable 'i' from 'in'. i := <-in; // Receive value of new variable 'i' from 'in'.
if i % prime != 0 { if i % prime != 0 {
@ -25,7 +25,7 @@ func Filter(in <-chan int, out chan<- int, prime int) {
} }
// The prime sieve: Daisy-chain Filter processes together. // The prime sieve: Daisy-chain Filter processes together.
func Sieve() { export func Sieve() {
ch := make(chan int); // Create a new channel. ch := make(chan int); // Create a new channel.
go Generate(ch); // Start Generate() as a subprocess. go Generate(ch); // Start Generate() as a subprocess.
for { for {

View File

@ -18,7 +18,7 @@ const (
mask4 = 1 << iota; mask4 = 1 << iota;
) )
type ( export type (
Empty interface {}; Empty interface {};
Point struct { Point struct {
x, y int; x, y int;

View File

@ -9,7 +9,7 @@ package main
import "array" import "array"
type S struct { export type S struct {
val int val int
} }