summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/type.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/type.h')
-rw-r--r--src/pkg/runtime/type.h131
1 files changed, 131 insertions, 0 deletions
diff --git a/src/pkg/runtime/type.h b/src/pkg/runtime/type.h
new file mode 100644
index 000000000..8c80c62d3
--- /dev/null
+++ b/src/pkg/runtime/type.h
@@ -0,0 +1,131 @@
+// 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 *Types here correspond 1-1 to type.go's *Type's, but are
+ * prefixed with an extra header of 2 pointers, corresponding to the
+ * interface{} structure, which itself is called type Type again on
+ * the Go side.
+ */
+
+typedef struct CommonType CommonType;
+typedef struct UncommonType UncommonType;
+typedef struct InterfaceType InterfaceType;
+typedef struct Method Method;
+typedef struct IMethod IMethod;
+typedef struct SliceType SliceType;
+typedef struct FuncType FuncType;
+
+struct CommonType
+{
+ uintptr size;
+ uint32 hash;
+ uint8 alg;
+ uint8 align;
+ uint8 fieldAlign;
+ uint8 kind;
+ String *string;
+ UncommonType *x;
+ Type *ptrto;
+};
+
+enum {
+ KindBool = 1,
+ KindInt,
+ KindInt8,
+ KindInt16,
+ KindInt32,
+ KindInt64,
+ KindUint,
+ KindUint8,
+ KindUint16,
+ KindUint32,
+ KindUint64,
+ KindUintptr,
+ KindFloat32,
+ KindFloat64,
+ KindComplex64,
+ KindComplex128,
+ KindArray,
+ KindChan,
+ KindFunc,
+ KindInterface,
+ KindMap,
+ KindPtr,
+ KindSlice,
+ KindString,
+ KindStruct,
+ KindUnsafePointer,
+
+ KindNoPointers = 1<<7,
+};
+
+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 Type
+{
+ void *type; // interface{} value
+ void *ptr;
+ CommonType;
+};
+
+struct IMethod
+{
+ 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;
+};
+
+struct FuncType
+{
+ Type;
+ bool dotdotdot;
+ Slice in;
+ Slice out;
+};