Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
go
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
go
Commits
f48cbfdf
Commit
f48cbfdf
authored
Jan 16, 2009
by
Russ Cox
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
convert tests; nothing interesting.
R=r OCL=23012 CL=23014
parent
9f4a27cb
Changes
82
Hide whitespace changes
Inline
Side-by-side
Showing
82 changed files
with
292 additions
and
296 deletions
+292
-296
src/lib/malloc.go
src/lib/malloc.go
+2
-2
test/235.go
test/235.go
+2
-2
test/bigalg.go
test/bigalg.go
+4
-4
test/bugs/bug041.go
test/bugs/bug041.go
+5
-5
test/bugs/bug117.go
test/bugs/bug117.go
+2
-2
test/bugs/bug121.go
test/bugs/bug121.go
+3
-3
test/bugs/bug123.go
test/bugs/bug123.go
+1
-1
test/bugs/bug130.go
test/bugs/bug130.go
+2
-2
test/chan/fifo.go
test/chan/fifo.go
+4
-4
test/chan/powser1.go
test/chan/powser1.go
+28
-29
test/chan/powser2.go
test/chan/powser2.go
+28
-29
test/chan/select.go
test/chan/select.go
+2
-2
test/chan/sieve.go
test/chan/sieve.go
+3
-3
test/complit.go
test/complit.go
+4
-4
test/convlit1.go
test/convlit1.go
+3
-1
test/export.go
test/export.go
+2
-2
test/fixedbugs/bug007.go
test/fixedbugs/bug007.go
+1
-1
test/fixedbugs/bug011.go
test/fixedbugs/bug011.go
+1
-1
test/fixedbugs/bug023.go
test/fixedbugs/bug023.go
+2
-2
test/fixedbugs/bug025.go
test/fixedbugs/bug025.go
+2
-2
test/fixedbugs/bug026.go
test/fixedbugs/bug026.go
+1
-1
test/fixedbugs/bug027.go
test/fixedbugs/bug027.go
+3
-3
test/fixedbugs/bug028.go
test/fixedbugs/bug028.go
+1
-1
test/fixedbugs/bug044.go
test/fixedbugs/bug044.go
+1
-1
test/fixedbugs/bug045.go
test/fixedbugs/bug045.go
+1
-1
test/fixedbugs/bug046.go
test/fixedbugs/bug046.go
+1
-1
test/fixedbugs/bug054.go
test/fixedbugs/bug054.go
+3
-3
test/fixedbugs/bug057.go
test/fixedbugs/bug057.go
+1
-1
test/fixedbugs/bug058.go
test/fixedbugs/bug058.go
+1
-1
test/fixedbugs/bug059.go
test/fixedbugs/bug059.go
+1
-1
test/fixedbugs/bug066.go
test/fixedbugs/bug066.go
+5
-5
test/fixedbugs/bug075.go
test/fixedbugs/bug075.go
+1
-1
test/fixedbugs/bug083.dir/bug0.go
test/fixedbugs/bug083.dir/bug0.go
+2
-3
test/fixedbugs/bug084.go
test/fixedbugs/bug084.go
+1
-1
test/fixedbugs/bug088.dir/bug0.go
test/fixedbugs/bug088.dir/bug0.go
+3
-3
test/fixedbugs/bug088.dir/bug1.go
test/fixedbugs/bug088.dir/bug1.go
+3
-3
test/fixedbugs/bug089.go
test/fixedbugs/bug089.go
+2
-2
test/fixedbugs/bug093.go
test/fixedbugs/bug093.go
+2
-2
test/fixedbugs/bug096.go
test/fixedbugs/bug096.go
+1
-1
test/fixedbugs/bug097.go
test/fixedbugs/bug097.go
+1
-1
test/fixedbugs/bug098.go
test/fixedbugs/bug098.go
+2
-2
test/fixedbugs/bug099.go
test/fixedbugs/bug099.go
+4
-4
test/fixedbugs/bug110.go
test/fixedbugs/bug110.go
+4
-4
test/fixedbugs/bug112.go
test/fixedbugs/bug112.go
+1
-1
test/fixedbugs/bug113.go
test/fixedbugs/bug113.go
+1
-1
test/fixedbugs/bug114.go
test/fixedbugs/bug114.go
+3
-3
test/fixedbugs/bug120.go
test/fixedbugs/bug120.go
+1
-1
test/func.go
test/func.go
+1
-1
test/golden.out
test/golden.out
+5
-8
test/hashmap.go
test/hashmap.go
+7
-7
test/hilbert.go
test/hilbert.go
+7
-7
test/interface.go
test/interface.go
+4
-4
test/interface1.go
test/interface1.go
+4
-4
test/interface2.go
test/interface2.go
+3
-3
test/interface3.go
test/interface3.go
+4
-4
test/interface4.go
test/interface4.go
+7
-7
test/interface5.go
test/interface5.go
+2
-2
test/interface6.go
test/interface6.go
+6
-6
test/iota.go
test/iota.go
+2
-2
test/ken/array.go
test/ken/array.go
+4
-4
test/ken/chan.go
test/ken/chan.go
+5
-5
test/ken/embed.go
test/ken/embed.go
+8
-8
test/ken/interbasic.go
test/ken/interbasic.go
+1
-1
test/ken/interfun.go
test/ken/interfun.go
+3
-3
test/ken/intervar.go
test/ken/intervar.go
+4
-4
test/ken/ptrfun.go
test/ken/ptrfun.go
+1
-1
test/ken/rob1.go
test/ken/rob1.go
+4
-4
test/ken/rob2.go
test/ken/rob2.go
+14
-14
test/ken/robfunc.go
test/ken/robfunc.go
+1
-1
test/mallocrand.go
test/mallocrand.go
+3
-3
test/mallocrep.go
test/mallocrep.go
+7
-7
test/mallocrep1.go
test/mallocrep1.go
+11
-11
test/map.go
test/map.go
+1
-1
test/method.go
test/method.go
+7
-7
test/method1.go
test/method1.go
+1
-1
test/method2.go
test/method2.go
+3
-3
test/method3.go
test/method3.go
+2
-2
test/nil.go
test/nil.go
+2
-2
test/peano.go
test/peano.go
+1
-1
test/sieve.go
test/sieve.go
+3
-3
test/test0.go
test/test0.go
+1
-1
test/vectors.go
test/vectors.go
+1
-1
No files found.
src/lib/malloc.go
View file @
f48cbfdf
...
@@ -9,8 +9,8 @@
...
@@ -9,8 +9,8 @@
package
malloc
package
malloc
export
type
Stats
struct
{
export
type
Stats
struct
{
a
lloc
uint64
;
A
lloc
uint64
;
s
ys
uint64
;
S
ys
uint64
;
};
};
export
func
Alloc
(
uint64
)
*
byte
;
export
func
Alloc
(
uint64
)
*
byte
;
...
...
test/235.go
View file @
f48cbfdf
...
@@ -6,9 +6,9 @@
...
@@ -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
)
{
...
...
test/bigalg.go
View file @
f48cbfdf
...
@@ -11,7 +11,7 @@ import (
...
@@ -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 {
...
@@ -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() {
...
@@ -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() {
...
@@ -103,7 +103,7 @@ func chantest() {
}
}
}
}
type
E
struct
{
}
export
type
E
struct
{
}
var
e
E
var
e
E
func
interfacetest
()
{
func
interfacetest
()
{
...
...
test/bugs/bug041.go
View file @
f48cbfdf
...
@@ -2,15 +2,15 @@
...
@@ -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
s
1
s
;
}
}
test/bugs/bug117.go
View file @
f48cbfdf
...
@@ -5,8 +5,8 @@
...
@@ -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
}
}
...
...
test/bugs/bug121.go
View file @
f48cbfdf
...
@@ -6,14 +6,14 @@
...
@@ -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
()
{}
...
...
test/bugs/bug123.go
View file @
f48cbfdf
...
@@ -5,7 +5,7 @@
...
@@ -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
...
...
test/bugs/bug130.go
View file @
f48cbfdf
...
@@ -6,9 +6,9 @@
...
@@ -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
()
{
...
...
test/chan/fifo.go
View file @
f48cbfdf
...
@@ -8,9 +8,9 @@
...
@@ -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() {
...
@@ -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) {
...
@@ -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
;
...
...
test/chan/powser1.go
View file @
f48cbfdf
...
@@ -41,7 +41,7 @@ var chnames string
...
@@ -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){
...
@@ -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
...
@@ -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)
...
@@ -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){
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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 {
...
@@ -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 {
...
@@ -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) {
...
@@ -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
);
...
...
test/chan/powser2.go
View file @
f48cbfdf
...
@@ -46,7 +46,7 @@ var chnames string
...
@@ -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){
...
@@ -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
...
@@ -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)
...
@@ -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){
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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{
...
@@ -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 {
...
@@ -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 {
...
@@ -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) {
...
@@ -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
);
...
...
test/chan/select.go
View file @
f48cbfdf
...
@@ -9,12 +9,12 @@ package main
...
@@ -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
{
...
...
test/chan/sieve.go
View file @
f48cbfdf
...
@@ -10,7 +10,7 @@
...
@@ -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) {
...
@@ -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) {
...
@@ -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
{
...
...
test/complit.go
View file @
f48cbfdf
...
@@ -6,9 +6,9 @@
...
@@ -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) {
...
@@ -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
}
}
}
...
...
test/convlit1.go
View file @
f48cbfdf
...
@@ -10,6 +10,8 @@ var a = []int { "a" }; // ERROR "conver|incompatible"
...
@@ -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"
}
}
test/export.go
View file @
f48cbfdf
...
@@ -12,5 +12,5 @@ export type B interface // ERROR "incomplete"
...
@@ -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
{
}
test/fixedbugs/bug007.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -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
)
)
...
...
test/fixedbugs/bug011.go
View file @
f48cbfdf
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
package
main
package
main
type
T
struct
{
export
type
T
struct
{
x
,
y
int
;
x
,
y
int
;
}
}
...
...
test/fixedbugs/bug023.go
View file @
f48cbfdf
...
@@ -6,11 +6,11 @@
...
@@ -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
...
...
test/fixedbugs/bug025.go
View file @
f48cbfdf
...
@@ -2,11 +2,11 @@
...
@@ -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
F
oo
export
f
oo
func
main
()
{}
func
main
()
{}
...
...
test/fixedbugs/bug026.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
package
main
package
main
type
Element
interface
{
export
type
Element
interface
{
}
}
export
type
Vector
struct
{
export
type
Vector
struct
{
...
...
test/fixedbugs/bug027.go
View file @
f48cbfdf
...
@@ -6,15 +6,15 @@
...
@@ -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
);
...
...
test/fixedbugs/bug028.go
View file @
f48cbfdf
...
@@ -7,7 +7,7 @@
...
@@ -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
;
...
...
test/fixedbugs/bug044.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
package
main
package
main
type
S
struct
{
export
type
S
struct
{
};
};
func
(
p
*
S
)
M1a
()
;
func
(
p
*
S
)
M1a
()
;
...
...
test/fixedbugs/bug045.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
package
main
package
main
type
T
struct
{
export
type
T
struct
{
i
int
i
int
}
}
...
...
test/fixedbugs/bug046.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -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"
...
...
test/fixedbugs/bug054.go
View file @
f48cbfdf
...
@@ -6,10 +6,10 @@
...
@@ -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 {
...
@@ -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
;
}
}
...
...
test/fixedbugs/bug057.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
package
main
package
main
type
T
struct
{
export
type
T
struct
{
s
string
;
s
string
;
}
}
...
...
test/fixedbugs/bug058.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -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
()
{
...
...
test/fixedbugs/bug059.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -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
{
...
...
test/fixedbugs/bug066.go
View file @
f48cbfdf
...
@@ -6,26 +6,26 @@
...
@@ -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"
];
}
}
test/fixedbugs/bug075.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -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
);
...
...
test/fixedbugs/bug083.dir/bug0.go
View file @
f48cbfdf
...
@@ -4,8 +4,7 @@
...
@@ -4,8 +4,7 @@
package
bug0
package
bug0
type
T0
struct
{
export
type
T0
struct
{
}
}
export
v0
export
var
V0
T0
var
v0
T0
test/fixedbugs/bug084.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
package
main
package
main
type
Service
struct
{
export
type
Service
struct
{
rpc
[
2
]
int
;
rpc
[
2
]
int
;
}
}
...
...
test/fixedbugs/bug088.dir/bug0.go
View file @
f48cbfdf
...
@@ -4,6 +4,6 @@
...
@@ -4,6 +4,6 @@
package
bug0
package
bug0
export
var
v
0
*
()
int
;
export
var
V
0
*
()
int
;
export
var
v
1
*
()
(
a
int
);
export
var
V
1
*
()
(
a
int
);
export
var
v
2
*
()
(
a
,
b
int
);
export
var
V
2
*
()
(
a
,
b
int
);
test/fixedbugs/bug088.dir/bug1.go
View file @
f48cbfdf
...
@@ -7,9 +7,9 @@ package main
...
@@ -7,9 +7,9 @@ package main
import
P
"bug0"
import
P
"bug0"
func
main
()
{
func
main
()
{
a0
:=
P
.
v
0
();
// works
a0
:=
P
.
V
0
();
// works
a1
:=
P
.
v
1
();
// works
a1
:=
P
.
V
1
();
// works
a2
,
b2
:=
P
.
v
2
();
// doesn't work
a2
,
b2
:=
P
.
V
2
();
// doesn't work
}
}
/*
/*
...
...
test/fixedbugs/bug089.go
View file @
f48cbfdf
...
@@ -6,8 +6,8 @@
...
@@ -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
;
...
...
test/fixedbugs/bug093.go
View file @
f48cbfdf
...
@@ -6,14 +6,14 @@
...
@@ -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
();
}
}
...
...
test/fixedbugs/bug096.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -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
};
...
...
test/fixedbugs/bug097.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -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
;
...
...
test/fixedbugs/bug098.go
View file @
f48cbfdf
...
@@ -6,8 +6,8 @@
...
@@ -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
};
...
...
test/fixedbugs/bug099.go
View file @
f48cbfdf
...
@@ -7,22 +7,22 @@
...
@@ -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
()
}
}
...
...
test/fixedbugs/bug110.go
View file @
f48cbfdf
...
@@ -6,14 +6,14 @@
...
@@ -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
)
}
}
}
}
test/fixedbugs/bug112.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -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
()
{}
...
...
test/fixedbugs/bug113.go
View file @
f48cbfdf
...
@@ -5,7 +5,7 @@
...
@@ -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
()
{
...
...
test/fixedbugs/bug114.go
View file @
f48cbfdf
...
@@ -6,9 +6,9 @@
...
@@ -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
{
...
...
test/fixedbugs/bug120.go
View file @
f48cbfdf
...
@@ -8,7 +8,7 @@ package main
...
@@ -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
;
...
...
test/func.go
View file @
f48cbfdf
...
@@ -45,7 +45,7 @@ func f8(a int) (x int, y float) {
...
@@ -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
;
}
}
...
...
test/golden.out
View file @
f48cbfdf
...
@@ -19,7 +19,7 @@ errchk: ./convlit.go: unmatched error messages:
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
...
test/hashmap.go
View file @
f48cbfdf
...
@@ -9,7 +9,7 @@ package main
...
@@ -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) {
...
@@ -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 {
...
@@ -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() {
...
@@ -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 {
...
@@ -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
;
...
...
test/hilbert.go
View file @
f48cbfdf
...
@@ -21,13 +21,13 @@ func assert(p bool) {
...
@@ -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) {
...
@@ -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 {
...
@@ -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 {
...
@@ -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 {
...
@@ -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
++
{
...
...
test/interface.go
View file @
f48cbfdf
...
@@ -6,17 +6,17 @@
...
@@ -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
}
test/interface1.go
View file @
f48cbfdf
...
@@ -6,23 +6,23 @@
...
@@ -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
}
}
...
...
test/interface2.go
View file @
f48cbfdf
...
@@ -6,9 +6,9 @@
...
@@ -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() {
...
@@ -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
{
}
}
test/interface3.go
View file @
f48cbfdf
...
@@ -6,14 +6,14 @@
...
@@ -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
;
...
...
test/interface4.go
View file @
f48cbfdf
...
@@ -9,15 +9,15 @@
...
@@ -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() {
...
@@ -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
()
{
...
...
test/interface5.go
View file @
f48cbfdf
...
@@ -6,10 +6,10 @@
...
@@ -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
()
{
...
...
test/interface6.go
View file @
f48cbfdf
...
@@ -15,9 +15,9 @@ func check(b bool, msg string) {
...
@@ -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() {
...
@@ -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() {
...
@@ -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() {
...
@@ -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
}
...
...
test/iota.go
View file @
f48cbfdf
...
@@ -21,13 +21,13 @@ const (
...
@@ -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
;
...
...
test/ken/array.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -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)
...
@@ -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
...
@@ -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)
...
@@ -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");
...
...
test/ken/chan.go
View file @
f48cbfdf
...
@@ -19,7 +19,7 @@ nrand(n int) int
...
@@ -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
...
@@ -30,7 +30,7 @@ var
(
(
nproc
int
;
nproc
int
;
cval
int
;
cval
int
;
E
nd
int
=
10000
;
e
nd
int
=
10000
;
totr
,
tots
int
;
totr
,
tots
int
;
nc
*
Chan
;
nc
*
Chan
;
)
)
...
@@ -62,7 +62,7 @@ expect(v, v0 int) (newv int)
...
@@ -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
E
nd
;
return
e
nd
;
}
}
return
v
+
1
;
return
v
+
1
;
}
}
...
@@ -75,7 +75,7 @@ send() bool
...
@@ -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
==
E
nd
{
if
c
.
sv
==
e
nd
{
c
.
sc
=
nil
;
c
.
sc
=
nil
;
return
true
;
return
true
;
}
}
...
@@ -104,7 +104,7 @@ recv(v int) bool
...
@@ -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
==
E
nd
{
if
c
.
rv
==
e
nd
{
c
.
rc
=
nil
;
c
.
rc
=
nil
;
return
true
;
return
true
;
}
}
...
...
test/ken/embed.go
View file @
f48cbfdf
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
package
main
package
main
type
export
type
I
interface
I
interface
{
{
test1
,
test1
,
...
@@ -23,7 +23,7 @@ I interface
...
@@ -23,7 +23,7 @@ I interface
******
******
******/
******/
type
export
type
SubpSubp
struct
SubpSubp
struct
{
{
a7
int
;
a7
int
;
...
@@ -45,7 +45,7 @@ testx()
...
@@ -45,7 +45,7 @@ testx()
******
******
******/
******/
type
export
type
SubpSub
struct
SubpSub
struct
{
{
a6
int
;
a6
int
;
...
@@ -68,7 +68,7 @@ testx()
...
@@ -68,7 +68,7 @@ testx()
******
******
******/
******/
type
export
type
SubSubp
struct
SubSubp
struct
{
{
a5
int
;
a5
int
;
...
@@ -85,7 +85,7 @@ test5() int
...
@@ -85,7 +85,7 @@ test5() int
******
******
******/
******/
type
export
type
SubSub
struct
SubSub
struct
{
{
a4
int
;
a4
int
;
...
@@ -102,7 +102,7 @@ test4() int
...
@@ -102,7 +102,7 @@ test4() int
******
******
******/
******/
type
export
type
Subp
struct
Subp
struct
{
{
a3
int
;
a3
int
;
...
@@ -121,7 +121,7 @@ test3() int
...
@@ -121,7 +121,7 @@ test3() int
******
******
******/
******/
type
export
type
Sub
struct
Sub
struct
{
{
a2
int
;
a2
int
;
...
@@ -140,7 +140,7 @@ test2() int
...
@@ -140,7 +140,7 @@ test2() int
******
******
******/
******/
type
export
type
S
struct
S
struct
{
{
a1
int
;
a1
int
;
...
...
test/ken/interbasic.go
View file @
f48cbfdf
...
@@ -8,7 +8,7 @@ package main
...
@@ -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
()
...
...
test/ken/interfun.go
View file @
f48cbfdf
...
@@ -6,17 +6,17 @@
...
@@ -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
;
}
}
...
...
test/ken/intervar.go
View file @
f48cbfdf
...
@@ -6,14 +6,14 @@
...
@@ -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()
...
@@ -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)
...
@@ -43,7 +43,7 @@ puts(s string)
// ---------
// ---------
type
File
struct
export
type
File
struct
{
{
whoami
int
;
whoami
int
;
put
Iputs
;
put
Iputs
;
...
...
test/ken/ptrfun.go
View file @
f48cbfdf
...
@@ -7,7 +7,7 @@
...
@@ -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
;
...
...
test/ken/rob1.go
View file @
f48cbfdf
...
@@ -6,18 +6,18 @@
...
@@ -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()
...
@@ -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
;
}
}
...
...
test/ken/rob2.go
View file @
f48cbfdf
...
@@ -9,24 +9,24 @@ package main
...
@@ -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() {
...
@@ -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;
...
@@ -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()
...
@@ -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
...
@@ -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()
...
@@ -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)
...
@@ -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
...
@@ -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
...
@@ -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
;
...
...
test/ken/robfunc.go
View file @
f48cbfdf
...
@@ -44,7 +44,7 @@ func f8(a int) (x int, y float) {
...
@@ -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
;
}
}
...
...
test/mallocrand.go
View file @
f48cbfdf
...
@@ -20,7 +20,7 @@ var chatty = flag.Bool("v", false, "chatty");
...
@@ -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
()
.
s
ys
;
footprint
<
f
{
if
f
:=
malloc
.
GetStats
()
.
S
ys
;
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() {
...
@@ -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() {
...
@@ -68,7 +68,7 @@ func main() {
allocated
-=
blocks
[
b
]
.
siz
;
allocated
-=
blocks
[
b
]
.
siz
;
continue
continue
}
}
siz
:=
uint64
(
rand
.
rand
()
>>
(
11
+
rand
.
urand
32
()
%
20
));
siz
:=
uint64
(
rand
.
Int
()
>>
(
11
+
rand
.
Uint
32
()
%
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);
...
...
test/mallocrep.go
View file @
f48cbfdf
...
@@ -17,12 +17,12 @@ var chatty = flag.Bool("v", false, "chatty");
...
@@ -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
.
s
ys
{
if
st
:=
malloc
.
GetStats
();
oldsys
<
st
.
S
ys
{
oldsys
=
st
.
s
ys
;
oldsys
=
st
.
S
ys
;
if
*
chatty
{
if
*
chatty
{
println
(
st
.
sys
,
" system bytes for "
,
st
.
a
lloc
,
" Go bytes"
);
println
(
st
.
Sys
,
" system bytes for "
,
st
.
A
lloc
,
" Go bytes"
);
}
}
if
st
.
s
ys
>
1e9
{
if
st
.
S
ys
>
1e9
{
panicln
(
"too big"
);
panicln
(
"too big"
);
}
}
}
}
...
@@ -30,16 +30,16 @@ func bigger() {
...
@@ -30,16 +30,16 @@ func bigger() {
func
main
()
{
func
main
()
{
flag
.
Parse
();
flag
.
Parse
();
malloc
.
GetStats
()
.
a
lloc
=
0
;
// ignore stacks
malloc
.
GetStats
()
.
A
lloc
=
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
()
.
a
lloc
;
during
:=
malloc
.
GetStats
()
.
A
lloc
;
malloc
.
Free
(
b
);
malloc
.
Free
(
b
);
if
a
:=
malloc
.
GetStats
()
.
a
lloc
;
a
!=
0
{
if
a
:=
malloc
.
GetStats
()
.
A
lloc
;
a
!=
0
{
panicln
(
"malloc wrong count"
,
a
,
"after"
,
j
,
"during"
,
during
);
panicln
(
"malloc wrong count"
,
a
,
"after"
,
j
,
"during"
,
during
);
}
}
bigger
();
bigger
();
...
...
test/mallocrep1.go
View file @
f48cbfdf
...
@@ -22,7 +22,7 @@ var longtest = flag.Bool("l", false, "long test");
...
@@ -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 {
...
@@ -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
.
a
lloc
;
n1
:=
stats
.
A
lloc
;
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
()
.
s
ys
>
1e9
{
if
malloc
.
GetStats
()
.
S
ys
>
1e9
{
panicln
(
"too much memory allocated"
);
panicln
(
"too much memory allocated"
);
}
}
}
}
n2
:=
stats
.
a
lloc
;
n2
:=
stats
.
A
lloc
;
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
.
a
lloc
;
n3
:=
stats
.
A
lloc
;
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
.
a
lloc
;
alloc
:=
stats
.
A
lloc
;
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
.
a
lloc
!=
alloc
-
uint64
(
n
)
{
if
stats
.
A
lloc
!=
alloc
-
uint64
(
n
)
{
panicln
(
"free alloc got"
,
stats
.
a
lloc
,
"expected"
,
alloc
-
uint64
(
n
),
"after free of"
,
n
);
panicln
(
"free alloc got"
,
stats
.
A
lloc
,
"expected"
,
alloc
-
uint64
(
n
),
"after free of"
,
n
);
}
}
if
malloc
.
GetStats
()
.
s
ys
>
1e9
{
if
malloc
.
GetStats
()
.
S
ys
>
1e9
{
panicln
(
"too much memory allocated"
);
panicln
(
"too much memory allocated"
);
}
}
}
}
n4
:=
stats
.
a
lloc
;
n4
:=
stats
.
A
lloc
;
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
);
...
...
test/map.go
View file @
f48cbfdf
...
@@ -13,7 +13,7 @@ import (
...
@@ -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
{
...
...
test/method.go
View file @
f48cbfdf
...
@@ -6,12 +6,12 @@
...
@@ -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 }
...
@@ -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
}
}
...
...
test/method1.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -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"
...
...
test/method2.go
View file @
f48cbfdf
...
@@ -6,9 +6,9 @@
...
@@ -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"
test/method3.go
View file @
f48cbfdf
...
@@ -8,10 +8,10 @@
...
@@ -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
}
}
...
...
test/nil.go
View file @
f48cbfdf
...
@@ -6,11 +6,11 @@
...
@@ -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
()
{
...
...
test/peano.go
View file @
f48cbfdf
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
package
main
package
main
type
Number
struct
{
export
type
Number
struct
{
next
*
Number
next
*
Number
}
}
...
...
test/sieve.go
View file @
f48cbfdf
...
@@ -7,7 +7,7 @@
...
@@ -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) {
...
@@ -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) {
...
@@ -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
{
...
...
test/test0.go
View file @
f48cbfdf
...
@@ -18,7 +18,7 @@ const (
...
@@ -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
;
...
...
test/vectors.go
View file @
f48cbfdf
...
@@ -9,7 +9,7 @@ package main
...
@@ -9,7 +9,7 @@ package main
import
"array"
import
"array"
type
S
struct
{
export
type
S
struct
{
val
int
val
int
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment