diff options
Diffstat (limited to 'gcc/testsuite/go.test/test/ken/rob2.go')
-rw-r--r-- | gcc/testsuite/go.test/test/ken/rob2.go | 261 |
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() } |