aboutsummaryrefslogtreecommitdiff
path: root/src/pkg
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-09-24 11:43:38 -0700
committerRuss Cox <rsc@golang.org>2009-09-24 11:43:38 -0700
commita4d09c2aa3c963a53d3ce3d93f1ec61cedde98f4 (patch)
tree7d71f0ff51b91651ef585c8efa10d25bb88e322b /src/pkg
parent12fc21733625e119dc4e9a3228d5bc0ab56d1988 (diff)
downloadgo-a4d09c2aa3c963a53d3ce3d93f1ec61cedde98f4.tar.xz
add Size method to dwarf.Type
R=r DELTA=30 (24 added, 3 deleted, 3 changed) OCL=34950 CL=34974
Diffstat (limited to 'src/pkg')
-rw-r--r--src/pkg/debug/dwarf/type.go33
1 files changed, 27 insertions, 6 deletions
diff --git a/src/pkg/debug/dwarf/type.go b/src/pkg/debug/dwarf/type.go
index 09672f392f..63b63db04e 100644
--- a/src/pkg/debug/dwarf/type.go
+++ b/src/pkg/debug/dwarf/type.go
@@ -13,6 +13,14 @@ import (
"strconv";
)
+// A Type conventionally represents a pointer to any of the
+// specific Type structures (CharType, StructType, etc.).
+type Type interface {
+ Common() *CommonType;
+ String() string;
+ Size() int64;
+}
+
// A CommonType holds fields common to multiple types.
// If a field is not known or not applicable for a given type,
// the zero value is used.
@@ -25,6 +33,10 @@ func (c *CommonType) Common() *CommonType {
return c;
}
+func (c *CommonType) Size() int64 {
+ return c.ByteSize;
+}
+
// Basic types
// A BasicType holds fields common to all basic types.
@@ -98,6 +110,10 @@ func (t *QualType) String() string {
return t.Qual + " " + t.Type.String();
}
+func (t *QualType) Size() int64 {
+ return t.Type.Size();
+}
+
// An ArrayType represents a fixed size array type.
type ArrayType struct {
CommonType;
@@ -110,6 +126,10 @@ func (t *ArrayType) String() string {
return "[" + strconv.Itoa64(t.Count) + "]" + t.Type.String();
}
+func (t *ArrayType) Size() int64 {
+ return t.Count * t.Type.Size();
+}
+
// A VoidType represents the C void type.
type VoidType struct {
CommonType;
@@ -252,11 +272,8 @@ func (t *TypedefType) String() string {
return t.Name;
}
-// A Type conventionally represents a pointer to any of the
-// specific Type structures (CharType, StructType, etc.).
-type Type interface {
- Common() *CommonType;
- String() string;
+func (t *TypedefType) Size() int64 {
+ return t.Type.Size();
}
func (d *Data) Type(off Offset) (Type, os.Error) {
@@ -589,7 +606,11 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
goto Error;
}
- typ.Common().ByteSize, _ = e.Val(AttrByteSize).(int64);
+ b, ok := e.Val(AttrByteSize).(int64);
+ if !ok {
+ b = -1;
+ }
+ typ.Common().ByteSize = b;
return typ, nil;