diff options
author | Austin Clements <aclements@csail.mit.edu> | 2009-09-25 09:39:08 -0700 |
---|---|---|
committer | Austin Clements <aclements@csail.mit.edu> | 2009-09-25 09:39:08 -0700 |
commit | 3b4fd069f85c550e2c1aecf2cb71fce1bf9d2734 (patch) | |
tree | 3953c656d29f7babbcd97c70bb9be9f5e650f74f /usr/austin/sym/binary.go | |
parent | 57f80519032490f375886f5547eaf4f0971e4ffd (diff) | |
download | golang-3b4fd069f85c550e2c1aecf2cb71fce1bf9d2734.tar.gz |
Switch ogle to in-tree gosym package. Delete my private sym
package. If a Sym is a function symbol, include a reference
to the Func so it's easily accessible when you're traversing
the list of all symbols. This diff is more interesting than
the proc switch because the gosym interface differs from the
old sym interface.
R=rsc
APPROVED=rsc
DELTA=1957 (34 added, 1868 deleted, 55 changed)
OCL=34969
CL=35008
Diffstat (limited to 'usr/austin/sym/binary.go')
-rw-r--r-- | usr/austin/sym/binary.go | 194 |
1 files changed, 0 insertions, 194 deletions
diff --git a/usr/austin/sym/binary.go b/usr/austin/sym/binary.go deleted file mode 100644 index be395f209..000000000 --- a/usr/austin/sym/binary.go +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package sym - -import ( - "bufio"; - "io"; - "log"; - "os"; - "reflect"; -) - -type byteOrder interface { - Uint16(b []byte) uint16; - Uint32(b []byte) uint32; - Uint64(b []byte) uint64; - String() string; -} - -type olsb struct {} - -func (olsb) Uint16(b []byte) uint16 { - return uint16(b[0]) | uint16(b[1]) << 8; -} - -func (olsb) Uint32(b []byte) uint32 { - return uint32(b[0]) | uint32(b[1]) << 8 | uint32(b[2]) << 16 | uint32(b[3]) << 24; -} - -func (olsb) Uint64(b []byte) uint64 { - return uint64(b[0]) | uint64(b[1]) << 8 | uint64(b[2]) << 16 | uint64(b[3]) << 24 | uint64(b[4]) << 32 | uint64(b[5]) << 40 | uint64(b[6]) << 48 | uint64(b[7]) << 56; -} - -func (olsb) String() string { - return "LSB"; -} - -type omsb struct {} - -func (omsb) Uint16(b []byte) uint16 { - return uint16(b[1]) | uint16(b[0]) << 8; -} - -func (omsb) Uint32(b []byte) uint32 { - return uint32(b[3]) | uint32(b[2]) << 8 | uint32(b[1]) << 16 | uint32(b[0]) << 24; -} - -func (omsb) Uint64(b []byte) uint64 { - return uint64(b[7]) | uint64(b[6]) << 8 | uint64(b[5]) << 16 | uint64(b[4]) << 24 | uint64(b[3]) << 32 | uint64(b[2]) << 40 | uint64(b[1]) << 48 | uint64(b[0]) << 56; -} - -func (omsb) String() string { - return "MSB"; -} - -var ( - lsb = olsb{}; - msb = omsb{}; -) - -// A binaryReader decodes binary data from another reader. On an -// error, the Read methods simply return 0 and record the error, to -// make it more convenient to decode long sequences of binary data. -// The caller should use the Error method when convenient to check -// for errors. -type binaryReader struct { - *bufio.Reader; - err os.Error; - order byteOrder; -} - -// newBinaryReader creates a new binary data reader backed by the -// given reader and using the given byte order for decoding. -func newBinaryReader(r io.Reader, o byteOrder) *binaryReader { - return &binaryReader{bufio.NewReader(r), nil, o}; -} - -// Error returns the recorded error, or nil if no error has occurred. -func (r *binaryReader) Error() os.Error { - return r.err; -} - -func (r *binaryReader) ReadUint8() uint8 { - var buf [1]byte; - _, err := io.ReadFull(r.Reader, &buf); - if r.err == nil && err != nil { - r.err = err; - } - return buf[0]; -} - -func (r *binaryReader) ReadUint16() uint16 { - var buf [2]byte; - _, err := io.ReadFull(r.Reader, &buf); - if r.err == nil && err != nil { - r.err = err; - } - return r.order.Uint16(&buf); -} - -func (r *binaryReader) ReadUint32() uint32 { - var buf [4]byte; - _, err := io.ReadFull(r.Reader, &buf); - if r.err == nil && err != nil { - r.err = err; - } - return r.order.Uint32(&buf); -} - -func (r *binaryReader) ReadUint64() uint64 { - var buf [8]byte; - _, err := io.ReadFull(r.Reader, &buf); - if r.err == nil && err != nil { - r.err = err; - } - return r.order.Uint64(&buf); -} - -func (r *binaryReader) ReadInt8() int8 { - return int8(r.ReadUint8()); -} - -func (r *binaryReader) ReadInt16() int16 { - return int16(r.ReadUint16()); -} - -func (r *binaryReader) ReadInt32() int32 { - return int32(r.ReadUint32()); -} - -func (r *binaryReader) ReadInt64() int64 { - return int64(r.ReadUint64()); -} - -// ReadCString reads a NUL-terminated string. -func (r *binaryReader) ReadCString() string { - str, err := r.Reader.ReadString('\x00'); - if r.err == nil && err != nil { - r.err = err; - } - n := len(str); - if n > 0 { - str = str[0:n-1]; - } - return str; -} - -// ReadValue reads a value according to its reflected type. This can -// read any of the types for which there is a regular Read method, -// plus structs and arrays. It assumes structs contain no padding. -func (r *binaryReader) ReadValue(v reflect.Value) { - switch v := v.(type) { - case *reflect.ArrayValue: - l := v.Len(); - for i := 0; i < l; i++ { - r.ReadValue(v.Elem(i)); - } - case *reflect.StructValue: - l := v.NumField(); - for i := 0; i < l; i++ { - r.ReadValue(v.Field(i)); - } - - case *reflect.Uint8Value: - v.Set(r.ReadUint8()); - case *reflect.Uint16Value: - v.Set(r.ReadUint16()); - case *reflect.Uint32Value: - v.Set(r.ReadUint32()); - case *reflect.Uint64Value: - v.Set(r.ReadUint64()); - case *reflect.Int8Value: - v.Set(r.ReadInt8()); - case *reflect.Int16Value: - v.Set(r.ReadInt16()); - case *reflect.Int32Value: - v.Set(r.ReadInt32()); - case *reflect.Int64Value: - v.Set(r.ReadInt64()); - case *reflect.StringValue: - v.Set(r.ReadCString()); - - default: - log.Crashf("Value of unexpected type %T", v); - } -} - -// ReadAny is a convenience wrapper for ReadValue. It can be passed a -// pointer any type that can be decoded by ReadValue. -func (r *binaryReader) ReadAny(out interface {}) { - r.ReadValue(reflect.Indirect(reflect.NewValue(out))); -} |