// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. /* * Runtime type representation; master is type.go */ typedef struct CommonType CommonType; typedef struct UncommonType UncommonType; typedef struct InterfaceType InterfaceType; typedef struct Method Method; typedef struct IMethod IMethod; typedef struct MapType MapType; typedef struct ChanType ChanType; typedef struct SliceType SliceType; struct CommonType { uintptr size; uint32 hash; uint8 alg; uint8 align; uint8 fieldAlign; uint8 kind; String *string; UncommonType *x; }; enum { KindBool = 1, KindInt, KindInt8, KindInt16, KindInt32, KindInt64, KindUint, KindUint8, KindUint16, KindUint32, KindUint64, KindUintptr, KindFloat, KindFloat32, KindFloat64, KindArray, KindChan, KindDotDotDot, KindFunc, KindInterface, KindMap, KindPtr, KindSlice, KindString, KindStruct, KindUnsafePointer, KindNoPointers = 1<<7, }; struct Method { uint32 hash; String *name; String *pkgPath; Type *typ; void (*ifn)(void); void (*tfn)(void); }; struct UncommonType { String *name; String *pkgPath; Slice mhdr; Method m[]; }; struct Type { void *type; // interface{} value void *ptr; CommonType; }; struct IMethod { uint32 hash; uint32 perm; String *name; String *pkgPath; Type *type; }; struct InterfaceType { Type; Slice mhdr; IMethod m[]; }; struct MapType { Type; Type *key; Type *elem; }; struct ChanType { Type; Type *elem; uintptr dir; }; struct SliceType { Type; Type *elem; };