root/src/pkg/runtime/type.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// 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
 *
 * The Type*s here correspond 1-1 to type.go's *rtype.
 */

typedef struct Type Type;
typedef struct UncommonType UncommonType;
typedef struct InterfaceType InterfaceType;
typedef struct Method Method;
typedef struct IMethod IMethod;
typedef struct SliceType SliceType;
typedef struct FuncType FuncType;

// Needs to be in sync with ../../cmd/ld/decodesym.c:/^commonsize
struct Type
{
        uintptr size;
        uint32 hash;
        uint8 _unused;
        uint8 align;
        uint8 fieldAlign;
        uint8 kind;
        Alg *alg;
        void *gc;
        String *string;
        UncommonType *x;
        Type *ptrto;
        byte *zero;  // ptr to the zero value for this type
};

struct Method
{
        String *name;
        String *pkgPath;
        Type    *mtyp;
        Type *typ;
        void (*ifn)(void);
        void (*tfn)(void);
};

struct UncommonType
{
        String *name;
        String *pkgPath;
        Slice mhdr;
        Method m[];
};

struct IMethod
{
        String *name;
        String *pkgPath;
        Type *type;
};

struct InterfaceType
{
        Type;
        Slice mhdr;
        IMethod m[];
};

struct MapType
{
        Type;
        Type *key;
        Type *elem;
        Type *bucket; // internal type representing a hash bucket
        Type *hmap;   // internal type representing a Hmap
};

struct ChanType
{
        Type;
        Type *elem;
        uintptr dir;
};

struct SliceType
{
        Type;
        Type *elem;
};

struct FuncType
{
        Type;
        bool dotdotdot;
        Slice in;
        Slice out;
};

struct PtrType
{
        Type;
        Type *elem;
};

/* [<][>][^][v][top][bottom][index][help] */