mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.cc] cmd/internal/gc, cmd/new6g etc: convert from cmd/gc, cmd/6g etc
First draft of converted Go compiler, using rsc.io/c2go rev 83d795a. Change-Id: I29f4c7010de07d2ff1947bbca9865879d83c32c3 Reviewed-on: https://go-review.googlesource.com/4851 Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
parent
c11882bc3e
commit
8c195bdf12
119 changed files with 88449 additions and 254 deletions
|
|
@ -8,6 +8,7 @@ import (
|
|||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
|
|
@ -23,21 +24,30 @@ func Cputime() float64 {
|
|||
}
|
||||
|
||||
type Biobuf struct {
|
||||
unget int
|
||||
haveUnget bool
|
||||
f *os.File
|
||||
r *bufio.Reader
|
||||
w *bufio.Writer
|
||||
unget [2]int
|
||||
numUnget int
|
||||
f *os.File
|
||||
r *bufio.Reader
|
||||
w *bufio.Writer
|
||||
linelen int
|
||||
}
|
||||
|
||||
func Bopenw(name string) (*Biobuf, error) {
|
||||
f, err := os.Open(name)
|
||||
f, err := os.Create(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Biobuf{f: f, w: bufio.NewWriter(f)}, nil
|
||||
}
|
||||
|
||||
func Bopenr(name string) (*Biobuf, error) {
|
||||
f, err := os.Open(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Biobuf{f: f, r: bufio.NewReader(f)}, nil
|
||||
}
|
||||
|
||||
func Binitw(w io.Writer) *Biobuf {
|
||||
return &Biobuf{w: bufio.NewWriter(w)}
|
||||
}
|
||||
|
|
@ -46,6 +56,41 @@ func (b *Biobuf) Write(p []byte) (int, error) {
|
|||
return b.w.Write(p)
|
||||
}
|
||||
|
||||
func Bwritestring(b *Biobuf, p string) (int, error) {
|
||||
return b.w.WriteString(p)
|
||||
}
|
||||
|
||||
func Bseek(b *Biobuf, offset int64, whence int) int64 {
|
||||
if b.w != nil {
|
||||
if err := b.w.Flush(); err != nil {
|
||||
log.Fatal("writing output: %v", err)
|
||||
}
|
||||
} else if b.r != nil {
|
||||
if whence == 1 {
|
||||
offset -= int64(b.r.Buffered())
|
||||
}
|
||||
}
|
||||
off, err := b.f.Seek(offset, whence)
|
||||
if err != nil {
|
||||
log.Fatal("seeking in output: %v", err)
|
||||
}
|
||||
if b.r != nil {
|
||||
b.r.Reset(b.f)
|
||||
}
|
||||
return off
|
||||
}
|
||||
|
||||
func Boffset(b *Biobuf) int64 {
|
||||
if err := b.w.Flush(); err != nil {
|
||||
log.Fatal("writing output: %v", err)
|
||||
}
|
||||
off, err := b.f.Seek(0, 1)
|
||||
if err != nil {
|
||||
log.Fatal("seeking in output: %v", err)
|
||||
}
|
||||
return off
|
||||
}
|
||||
|
||||
func (b *Biobuf) Flush() error {
|
||||
return b.w.Flush()
|
||||
}
|
||||
|
|
@ -58,26 +103,86 @@ func Bputc(b *Biobuf, c byte) {
|
|||
b.w.WriteByte(c)
|
||||
}
|
||||
|
||||
const Beof = -1
|
||||
|
||||
func Bread(b *Biobuf, p []byte) int {
|
||||
n, err := io.ReadFull(b.r, p)
|
||||
if n == 0 {
|
||||
if err != nil && err != io.EOF {
|
||||
n = -1
|
||||
}
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
func Bgetc(b *Biobuf) int {
|
||||
if b.haveUnget {
|
||||
b.haveUnget = false
|
||||
return int(b.unget)
|
||||
if b.numUnget > 0 {
|
||||
b.numUnget--
|
||||
return int(b.unget[b.numUnget])
|
||||
}
|
||||
c, err := b.r.ReadByte()
|
||||
r := int(c)
|
||||
if err != nil {
|
||||
r = -1
|
||||
}
|
||||
b.unget[1] = b.unget[0]
|
||||
b.unget[0] = r
|
||||
return r
|
||||
}
|
||||
|
||||
func Bgetrune(b *Biobuf) int {
|
||||
r, _, err := b.r.ReadRune()
|
||||
if err != nil {
|
||||
b.unget = -1
|
||||
return -1
|
||||
}
|
||||
b.unget = int(c)
|
||||
return int(c)
|
||||
return int(r)
|
||||
}
|
||||
|
||||
func Bungetrune(b *Biobuf) {
|
||||
b.r.UnreadRune()
|
||||
}
|
||||
|
||||
func (b *Biobuf) Read(p []byte) (int, error) {
|
||||
return b.r.Read(p)
|
||||
}
|
||||
|
||||
func Brdline(b *Biobuf, delim int) string {
|
||||
s, err := b.r.ReadBytes(byte(delim))
|
||||
if err != nil {
|
||||
log.Fatalf("reading input: %v", err)
|
||||
}
|
||||
b.linelen = len(s)
|
||||
return string(s)
|
||||
}
|
||||
|
||||
func Brdstr(b *Biobuf, delim int, cut int) string {
|
||||
s, err := b.r.ReadString(byte(delim))
|
||||
if err != nil {
|
||||
log.Fatalf("reading input: %v", err)
|
||||
}
|
||||
if len(s) > 0 && cut > 0 {
|
||||
s = s[:len(s)-1]
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
func Access(name string, mode int) int {
|
||||
if mode != 0 {
|
||||
panic("bad access")
|
||||
}
|
||||
_, err := os.Stat(name)
|
||||
if err != nil {
|
||||
return -1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func Blinelen(b *Biobuf) int {
|
||||
return b.linelen
|
||||
}
|
||||
|
||||
func Bungetc(b *Biobuf) {
|
||||
b.haveUnget = true
|
||||
}
|
||||
|
||||
func Boffset(b *Biobuf) int64 {
|
||||
panic("Boffset")
|
||||
b.numUnget++
|
||||
}
|
||||
|
||||
func Bflush(b *Biobuf) error {
|
||||
|
|
@ -85,7 +190,10 @@ func Bflush(b *Biobuf) error {
|
|||
}
|
||||
|
||||
func Bterm(b *Biobuf) error {
|
||||
err := b.w.Flush()
|
||||
var err error
|
||||
if b.w != nil {
|
||||
err = b.w.Flush()
|
||||
}
|
||||
err1 := b.f.Close()
|
||||
if err == nil {
|
||||
err = err1
|
||||
|
|
@ -116,6 +224,10 @@ func Getgoarm() string {
|
|||
return envOr("GOARM", defaultGOARM)
|
||||
}
|
||||
|
||||
func Getgo386() string {
|
||||
return envOr("GO386", defaultGO386)
|
||||
}
|
||||
|
||||
func Getgoversion() string {
|
||||
return version
|
||||
}
|
||||
|
|
@ -145,3 +257,15 @@ func (ctxt *Link) NewProg() *Prog {
|
|||
func (ctxt *Link) Line(n int) string {
|
||||
return Linklinefmt(ctxt, n, false, false)
|
||||
}
|
||||
|
||||
func (ctxt *Link) Dconv(a *Addr) string {
|
||||
return ctxt.Arch.Dconv(nil, 0, a)
|
||||
}
|
||||
|
||||
func (ctxt *Link) Rconv(reg int) string {
|
||||
return ctxt.Arch.Rconv(reg)
|
||||
}
|
||||
|
||||
func Getcallerpc(interface{}) uintptr {
|
||||
return 1
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue