From 55ee21421e7239c8f068a1957fa19db0e14a97e4 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Mon, 20 May 2024 13:47:32 +0800 Subject: [PATCH] runtime: Struct --- internal/abi/llgo_autogen.lla | Bin 4424 -> 4827 bytes internal/abi/type.go | 18 ++++++++++++++++-- internal/runtime/llgo_autogen.lla | Bin 6919 -> 7225 bytes internal/runtime/z_type.go | 29 ++++++++++++++++++++++++++++- 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/internal/abi/llgo_autogen.lla b/internal/abi/llgo_autogen.lla index 4f8bcd999012ee293df371a59bbd1d0db0936bcf..c349a176716001184331085d5860d529914f129d 100644 GIT binary patch delta 4806 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 delta 4400 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 diff --git a/internal/abi/type.go b/internal/abi/type.go index 17b61967..085a6475 100644 --- a/internal/abi/type.go +++ b/internal/abi/type.go @@ -50,8 +50,6 @@ type Type struct { PtrToThis TypeOff // type for pointer to this type, may be zero } -func (t *Type) Kind() Kind { return Kind(t.Kind_ & KindMask) } - // A Kind represents the specific kind of type that a Type represents. // The zero Kind is not a valid kind. type Kind uint @@ -86,12 +84,14 @@ const ( UnsafePointer ) +/* const ( // TODO (khr, drchase) why aren't these in TFlag? Investigate, fix if possible. KindDirectIface = 1 << 5 KindGCProg = 1 << 6 // Type.gc points to GC program KindMask = (1 << 5) - 1 ) +*/ // TFlag is used by a Type to signal what extra type information is // available in the memory directly following the Type value. @@ -207,6 +207,10 @@ type StructField struct { Offset uintptr // byte offset of field } +func (f *StructField) Embedded() bool { + return f.Name.IsEmbedded() +} + type StructType struct { Type PkgPath Name @@ -225,6 +229,16 @@ type Imethod struct { Typ TypeOff // .(*FuncType) underneath } +func (t *Type) Kind() Kind { return Kind(t.Kind_) } + +// Size returns the size of data with type t. +func (t *Type) Size() uintptr { return t.Size_ } + +// Align returns the alignment of data with type t. +func (t *Type) Align() int { return int(t.Align_) } + +func (t *Type) FieldAlign() int { return int(t.FieldAlign_) } + func (t *Type) Common() *Type { return t } diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index 94569d3013459d3fc524e9367f2ac91e08697462..ff4d84354ca5f8d7f9a6fdbe38d7ae57a426a0ca 100644 GIT binary patch delta 7084 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 WY?I6y5(3uali(U52F@D*0000jKE%oZ delta 6805 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