Commit a4d09c2a authored by Russ Cox's avatar Russ Cox

add Size method to dwarf.Type

R=r
DELTA=30  (24 added, 3 deleted, 3 changed)
OCL=34950
CL=34974
parent 12fc2173
...@@ -13,6 +13,14 @@ import ( ...@@ -13,6 +13,14 @@ import (
"strconv"; "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. // A CommonType holds fields common to multiple types.
// If a field is not known or not applicable for a given type, // If a field is not known or not applicable for a given type,
// the zero value is used. // the zero value is used.
...@@ -25,6 +33,10 @@ func (c *CommonType) Common() *CommonType { ...@@ -25,6 +33,10 @@ func (c *CommonType) Common() *CommonType {
return c; return c;
} }
func (c *CommonType) Size() int64 {
return c.ByteSize;
}
// Basic types // Basic types
// A BasicType holds fields common to all basic types. // A BasicType holds fields common to all basic types.
...@@ -98,6 +110,10 @@ func (t *QualType) String() string { ...@@ -98,6 +110,10 @@ func (t *QualType) String() string {
return t.Qual + " " + t.Type.String(); return t.Qual + " " + t.Type.String();
} }
func (t *QualType) Size() int64 {
return t.Type.Size();
}
// An ArrayType represents a fixed size array type. // An ArrayType represents a fixed size array type.
type ArrayType struct { type ArrayType struct {
CommonType; CommonType;
...@@ -110,6 +126,10 @@ func (t *ArrayType) String() string { ...@@ -110,6 +126,10 @@ func (t *ArrayType) String() string {
return "[" + strconv.Itoa64(t.Count) + "]" + t.Type.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. // A VoidType represents the C void type.
type VoidType struct { type VoidType struct {
CommonType; CommonType;
...@@ -252,11 +272,8 @@ func (t *TypedefType) String() string { ...@@ -252,11 +272,8 @@ func (t *TypedefType) String() string {
return t.Name; return t.Name;
} }
// A Type conventionally represents a pointer to any of the func (t *TypedefType) Size() int64 {
// specific Type structures (CharType, StructType, etc.). return t.Type.Size();
type Type interface {
Common() *CommonType;
String() string;
} }
func (d *Data) Type(off Offset) (Type, os.Error) { func (d *Data) Type(off Offset) (Type, os.Error) {
...@@ -589,7 +606,11 @@ func (d *Data) Type(off Offset) (Type, os.Error) { ...@@ -589,7 +606,11 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
goto 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; return typ, nil;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment