summaryrefslogtreecommitdiff
path: root/gcc/testsuite/go.test/test/ken/rob2.go
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/go.test/test/ken/rob2.go')
-rw-r--r--gcc/testsuite/go.test/test/ken/rob2.go261
1 files changed, 133 insertions, 128 deletions
diff --git a/gcc/testsuite/go.test/test/ken/rob2.go b/gcc/testsuite/go.test/test/ken/rob2.go
index af63e4d9f6..d13e2441d4 100644
--- a/gcc/testsuite/go.test/test/ken/rob2.go
+++ b/gcc/testsuite/go.test/test/ken/rob2.go
@@ -4,269 +4,274 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-
package main
-const nilchar = 0;
+import "fmt"
+
+const nilchar = 0
type Atom struct {
- str string;
- integer int;
- next *Slist; /* in hash bucket */
+ str string
+ integer int
+ next *Slist /* in hash bucket */
}
type List struct {
- car *Slist;
- cdr*Slist;
+ car *Slist
+ cdr *Slist
}
type Slist struct {
- isatom bool;
- isstring bool;
+ isatom bool
+ isstring bool
//union {
- atom Atom;
- list List;
+ atom Atom
+ list List
//} u;
}
func (this *Slist) Car() *Slist {
- return this.list.car;
+ return this.list.car
}
func (this *Slist) Cdr() *Slist {
- return this.list.cdr;
+ return this.list.cdr
}
func (this *Slist) String() string {
- return this.atom.str;
+ return this.atom.str
}
func (this *Slist) Integer() int {
- return this.atom.integer;
+ return this.atom.integer
}
func (slist *Slist) Free() {
if slist == nil {
- return;
+ return
}
if slist.isatom {
-// free(slist.String());
+ // free(slist.String());
} else {
- slist.Car().Free();
- slist.Cdr().Free();
+ slist.Car().Free()
+ slist.Cdr().Free()
}
-// free(slist);
+ // free(slist);
}
//Slist* atom(byte *s, int i);
-var token int;
-var peekc int = -1;
-var lineno int32 = 1;
+var token int
+var peekc int = -1
+var lineno int32 = 1
-var input string;
-var inputindex int = 0;
-var tokenbuf [100]byte;
-var tokenlen int = 0;
+var input string
+var inputindex int = 0
+var tokenbuf [100]byte
+var tokenlen int = 0
-const EOF int = -1;
+const EOF int = -1
func main() {
- var list *Slist;
+ var list *Slist
- OpenFile();
- for ;; {
- list = Parse();
+ OpenFile()
+ for {
+ list = Parse()
if list == nil {
- break;
+ break
+ }
+ r := list.Print()
+ list.Free()
+ if r != "(defn foo (add 12 34))" {
+ panic(r)
}
- list.Print();
- list.Free();
- break;
+ break
}
}
-func (slist *Slist) PrintOne(doparen bool) {
+func (slist *Slist) PrintOne(doparen bool) string {
if slist == nil {
- return;
+ return ""
}
+ var r string
if slist.isatom {
if slist.isstring {
- print(slist.String());
+ r = slist.String()
} else {
- print(slist.Integer());
+ r = fmt.Sprintf("%v", slist.Integer())
}
} else {
if doparen {
- print("(" );
+ r += "("
}
- slist.Car().PrintOne(true);
+ r += slist.Car().PrintOne(true)
if slist.Cdr() != nil {
- print(" ");
- slist.Cdr().PrintOne(false);
+ r += " "
+ r += slist.Cdr().PrintOne(false)
}
if doparen {
- print(")");
+ r += ")"
}
}
+ return r
}
-func (slist *Slist) Print() {
- slist.PrintOne(true);
- print("\n");
+func (slist *Slist) Print() string {
+ return slist.PrintOne(true)
}
func Get() int {
- var c int;
+ var c int
if peekc >= 0 {
- c = peekc;
- peekc = -1;
+ c = peekc
+ peekc = -1
} else {
- c = int(input[inputindex]);
- inputindex++;
+ c = int(input[inputindex])
+ inputindex++
if c == '\n' {
- lineno = lineno + 1;
+ lineno = lineno + 1
}
if c == nilchar {
- inputindex = inputindex - 1;
- c = EOF;
+ inputindex = inputindex - 1
+ c = EOF
}
}
- return c;
+ return c
}
func WhiteSpace(c int) bool {
- return c == ' ' || c == '\t' || c == '\r' || c == '\n';
+ return c == ' ' || c == '\t' || c == '\r' || c == '\n'
}
func NextToken() {
- var i, c int;
+ var i, c int
- tokenbuf[0] = nilchar; // clear previous token
- c = Get();
+ tokenbuf[0] = nilchar // clear previous token
+ c = Get()
for WhiteSpace(c) {
- c = Get();
+ c = Get()
}
switch c {
case EOF:
- token = EOF;
+ token = EOF
case '(', ')':
- token = c;
- break;
+ token = c
+ break
default:
- for i = 0; i < 100 - 1; { // sizeof tokenbuf - 1
- tokenbuf[i] = byte(c);
- i = i + 1;
- c = Get();
+ for i = 0; i < 100-1; { // sizeof tokenbuf - 1
+ tokenbuf[i] = byte(c)
+ i = i + 1
+ c = Get()
if c == EOF {
- break;
+ break
}
if WhiteSpace(c) || c == ')' {
- peekc = c;
- break;
+ peekc = c
+ break
}
}
- if i >= 100 - 1 { // sizeof tokenbuf - 1
- panic("atom too long\n");
+ if i >= 100-1 { // sizeof tokenbuf - 1
+ panic("atom too long\n")
}
- tokenlen = i;
- tokenbuf[i] = nilchar;
+ tokenlen = i
+ tokenbuf[i] = nilchar
if '0' <= tokenbuf[0] && tokenbuf[0] <= '9' {
- token = '0';
+ token = '0'
} else {
- token = 'A';
+ token = 'A'
}
}
}
func Expect(c int) {
if token != c {
- print("parse error: expected ", c, "\n");
- panic("parse");
+ print("parse error: expected ", c, "\n")
+ panic("parse")
}
- NextToken();
+ NextToken()
}
// Parse a non-parenthesized list up to a closing paren or EOF
func ParseList() *Slist {
- var slist, retval *Slist;
-
- slist = new(Slist);
- slist.list.car = nil;
- slist.list.cdr = nil;
- slist.isatom = false;
- slist.isstring = false;
-
- retval = slist;
- for ;; {
- slist.list.car = Parse();
- if token == ')' || token == EOF { // empty cdr
- break;
+ var slist, retval *Slist
+
+ slist = new(Slist)
+ slist.list.car = nil
+ slist.list.cdr = nil
+ slist.isatom = false
+ slist.isstring = false
+
+ retval = slist
+ for {
+ slist.list.car = Parse()
+ if token == ')' || token == EOF { // empty cdr
+ break
}
- slist.list.cdr = new(Slist);
- slist = slist.list.cdr;
+ slist.list.cdr = new(Slist)
+ slist = slist.list.cdr
}
- return retval;
+ return retval
}
-func atom(i int) *Slist { // BUG: uses tokenbuf; should take argument)
- var slist *Slist;
+func atom(i int) *Slist { // BUG: uses tokenbuf; should take argument)
+ var slist *Slist
- slist = new(Slist);
+ slist = new(Slist)
if token == '0' {
- slist.atom.integer = i;
- slist.isstring = false;
+ slist.atom.integer = i
+ slist.isstring = false
} else {
- slist.atom.str = string(tokenbuf[0:tokenlen]);
- slist.isstring = true;
+ slist.atom.str = string(tokenbuf[0:tokenlen])
+ slist.isstring = true
}
- slist.isatom = true;
- return slist;
+ slist.isatom = true
+ return slist
}
-func atoi() int { // BUG: uses tokenbuf; should take argument)
- var v int = 0;
+func atoi() int { // BUG: uses tokenbuf; should take argument)
+ var v int = 0
for i := 0; i < tokenlen && '0' <= tokenbuf[i] && tokenbuf[i] <= '9'; i = i + 1 {
- v = 10 * v + int(tokenbuf[i] - '0');
+ v = 10*v + int(tokenbuf[i]-'0')
}
- return v;
+ return v
}
func Parse() *Slist {
- var slist *Slist;
+ var slist *Slist
if token == EOF || token == ')' {
- return nil;
+ return nil
}
if token == '(' {
- NextToken();
- slist = ParseList();
- Expect(')');
- return slist;
+ NextToken()
+ slist = ParseList()
+ Expect(')')
+ return slist
} else {
// Atom
switch token {
case EOF:
- return nil;
+ return nil
case '0':
- slist = atom(atoi());
+ slist = atom(atoi())
case '"', 'A':
- slist = atom(0);
+ slist = atom(0)
default:
- slist = nil;
- print("unknown token: ", token, "\n");
+ slist = nil
+ print("unknown token: ", token, "\n")
}
- NextToken();
- return slist;
+ NextToken()
+ return slist
}
- return nil;
+ return nil
}
func OpenFile() {
- input = "(defn foo (add 12 34))\n\x00";
- inputindex = 0;
- peekc = -1; // BUG
- NextToken();
+ input = "(defn foo (add 12 34))\n\x00"
+ inputindex = 0
+ peekc = -1 // BUG
+ NextToken()
}