github.com/aloncn/graphics-go@v0.0.1/src/runtime/type.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Runtime type representation. 6 7 package runtime 8 9 import "unsafe" 10 11 // Needs to be in sync with ../cmd/compile/internal/ld/decodesym.go:/^func.commonsize, 12 // ../cmd/compile/internal/gc/reflect.go:/^func.dcommontype and 13 // ../reflect/type.go:/^type.rtype. 14 type _type struct { 15 size uintptr 16 ptrdata uintptr // size of memory prefix holding all pointers 17 hash uint32 18 _unused uint8 19 align uint8 20 fieldalign uint8 21 kind uint8 22 alg *typeAlg 23 // gcdata stores the GC type data for the garbage collector. 24 // If the KindGCProg bit is set in kind, gcdata is a GC program. 25 // Otherwise it is a ptrmask bitmap. See mbitmap.go for details. 26 gcdata *byte 27 _string *string 28 x *uncommontype 29 ptrto *_type 30 } 31 32 type method struct { 33 name *string 34 pkgpath *string 35 mtyp *_type 36 typ *_type 37 ifn unsafe.Pointer 38 tfn unsafe.Pointer 39 } 40 41 type uncommontype struct { 42 name *string 43 pkgpath *string 44 mhdr []method 45 } 46 47 type imethod struct { 48 name *string 49 pkgpath *string 50 _type *_type 51 } 52 53 type interfacetype struct { 54 typ _type 55 mhdr []imethod 56 } 57 58 type maptype struct { 59 typ _type 60 key *_type 61 elem *_type 62 bucket *_type // internal type representing a hash bucket 63 hmap *_type // internal type representing a hmap 64 keysize uint8 // size of key slot 65 indirectkey bool // store ptr to key instead of key itself 66 valuesize uint8 // size of value slot 67 indirectvalue bool // store ptr to value instead of value itself 68 bucketsize uint16 // size of bucket 69 reflexivekey bool // true if k==k for all keys 70 needkeyupdate bool // true if we need to update key on an overwrite 71 } 72 73 type arraytype struct { 74 typ _type 75 elem *_type 76 slice *_type 77 len uintptr 78 } 79 80 type chantype struct { 81 typ _type 82 elem *_type 83 dir uintptr 84 } 85 86 type slicetype struct { 87 typ _type 88 elem *_type 89 } 90 91 type functype struct { 92 typ _type 93 dotdotdot bool 94 in []*_type 95 out []*_type 96 } 97 98 type ptrtype struct { 99 typ _type 100 elem *_type 101 } 102 103 type structfield struct { 104 name *string 105 pkgpath *string 106 typ *_type 107 tag *string 108 offset uintptr 109 } 110 111 type structtype struct { 112 typ _type 113 fields []structfield 114 }