From 78f79fee9374b8e322a0362a01e1e711ff8b9248 Mon Sep 17 00:00:00 2001 From: Andrey Konovalov Date: Tue, 11 Oct 2016 14:24:25 +0200 Subject: Refactor & improve len type handling --- sys/decl.go | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'sys') diff --git a/sys/decl.go b/sys/decl.go index 275bbb380..ba38399ba 100644 --- a/sys/decl.go +++ b/sys/decl.go @@ -25,6 +25,7 @@ type Type interface { Default() uintptr Size() uintptr Align() uintptr + InnerType() Type // returns inner type for PtrType } func IsPad(t Type) bool { @@ -83,6 +84,10 @@ func (t ResourceType) Align() uintptr { return t.Desc.Type.Align() } +func (t ResourceType) InnerType() Type { + return t +} + type FileoffType struct { TypeCommon TypeSize uintptr @@ -97,6 +102,10 @@ func (t FileoffType) Align() uintptr { return t.Size() } +func (t FileoffType) InnerType() Type { + return t +} + type BufferKind int const ( @@ -136,6 +145,10 @@ func (t BufferType) Align() uintptr { return 1 } +func (t BufferType) InnerType() Type { + return t +} + type VmaType struct { TypeCommon } @@ -148,6 +161,10 @@ func (t VmaType) Align() uintptr { return t.Size() } +func (t VmaType) InnerType() Type { + return t +} + type LenType struct { TypeCommon TypeSize uintptr @@ -163,6 +180,10 @@ func (t LenType) Align() uintptr { return t.Size() } +func (t LenType) InnerType() Type { + return t +} + type FlagsType struct { TypeCommon TypeSize uintptr @@ -177,6 +198,10 @@ func (t FlagsType) Align() uintptr { return t.Size() } +func (t FlagsType) InnerType() Type { + return t +} + type ConstType struct { TypeCommon TypeSize uintptr @@ -192,6 +217,10 @@ func (t ConstType) Align() uintptr { return t.Size() } +func (t ConstType) InnerType() Type { + return t +} + type StrConstType struct { TypeCommon TypeSize uintptr @@ -206,6 +235,10 @@ func (t StrConstType) Align() uintptr { return t.Size() } +func (t StrConstType) InnerType() Type { + return t +} + type IntKind int const ( @@ -232,6 +265,10 @@ func (t IntType) Align() uintptr { return t.Size() } +func (t IntType) InnerType() Type { + return t +} + type FilenameType struct { TypeCommon } @@ -244,6 +281,10 @@ func (t FilenameType) Align() uintptr { return 1 } +func (t FilenameType) InnerType() Type { + return t +} + type ArrayKind int const ( @@ -270,6 +311,10 @@ func (t ArrayType) Align() uintptr { return t.Type.Align() } +func (t ArrayType) InnerType() Type { + return t +} + type PtrType struct { TypeCommon Type Type @@ -284,6 +329,10 @@ func (t PtrType) Align() uintptr { return t.Size() } +func (t PtrType) InnerType() Type { + return t.Type.InnerType() +} + type StructType struct { TypeCommon Fields []Type @@ -316,6 +365,10 @@ func (t *StructType) Align() uintptr { return align } +func (t *StructType) InnerType() Type { + return t +} + type UnionType struct { TypeCommon Options []Type @@ -345,6 +398,10 @@ func (t *UnionType) Align() uintptr { return align } +func (t *UnionType) InnerType() Type { + return t +} + type Dir int const ( -- cgit mrf-deployment