--- /dev/null
+/* -----------------------------------------------------------------------------
+ *
+ * (c) The GHC Team, 1998-2004
+ *
+ * Various C datatypes used in the run-time system. This is the
+ * lowest-level include file, after ghcconfig.h and RtsConfig.h.
+ *
+ * This module should define types *only*, all beginning with "Stg".
+ *
+ * Specifically:
+
+ StgInt8, 16, 32, 64
+ StgWord8, 16, 32, 64
+ StgChar, StgFloat, StgDouble
+
+ ***** All the same size (i.e. sizeof(void *)): *****
+ StgPtr Basic pointer type
+ StgWord Unit of heap allocation
+ StgInt Signed version of StgWord
+ StgAddr Generic address type
+
+ StgBool, StgVoid, StgClosurePtr, StgPtr, StgOffset,
+ StgTSOPtr, StgForeignPtr, StgStackOffset, StgStackPtr,
+ StgCode, StgArray, StgByteArray, StgStablePtr, StgFunPtr,
+ StgUnion.
+
+ * WARNING: Keep this file, MachDeps.h, and HsFFI.h in synch!
+ *
+ * NOTE: assumes #include "ghcconfig.h"
+ *
+ * Works with or without _POSIX_SOURCE.
+ *
+ * ---------------------------------------------------------------------------*/
+
+#ifndef STGTYPES_H
+#define STGTYPES_H
+
+/*
+ * First, platform-dependent definitions of size-specific integers.
+ * Assume for now that the int type is 32 bits.
+ * NOTE: Synch the following definitions with MachDeps.h!
+ * ToDo: move these into a platform-dependent file.
+ */
+
+typedef signed char StgInt8;
+typedef unsigned char StgWord8;
+
+typedef signed short StgInt16;
+typedef unsigned short StgWord16;
+
+#if SIZEOF_UNSIGNED_INT == 4
+typedef signed int StgInt32;
+typedef unsigned int StgWord32;
+#else
+#error GHC untested on this architecture: sizeof(unsigned int) != 4
+#endif
+
+#ifdef SUPPORT_LONG_LONGS
+/* assume long long is 64 bits */
+# ifndef _MSC_VER
+typedef signed long long int StgInt64;
+typedef unsigned long long int StgWord64;
+# else
+typedef __int64 StgInt64;
+typedef unsigned __int64 StgWord64;
+# endif
+#elif SIZEOF_LONG == 8
+typedef signed long StgInt64;
+typedef unsigned long StgWord64;
+#elif defined(__MSVC__)
+typedef __int64 StgInt64;
+typedef unsigned __int64 StgWord64;
+#else
+#error GHC untested on this architecture: sizeof(void *) < 8 and no long longs.
+#endif
+
+/*
+ * Define the standard word size we'll use on this machine: make it
+ * big enough to hold a pointer.
+ */
+
+#if SIZEOF_VOID_P == 8
+typedef StgInt64 StgInt;
+typedef StgWord64 StgWord;
+typedef StgInt32 StgHalfInt;
+typedef StgWord32 StgHalfWord;
+#else
+#if SIZEOF_VOID_P == 4
+typedef StgInt32 StgInt;
+typedef StgWord32 StgWord;
+typedef StgInt16 StgHalfInt;
+typedef StgWord16 StgHalfWord;
+#else
+#error GHC untested on this architecture: sizeof(void *) != 4 or 8
+#endif
+#endif
+
+#define W_MASK (sizeof(W_)-1)
+
+typedef void* StgAddr;
+
+/*
+ * Other commonly-used STG datatypes.
+ */
+
+typedef StgWord32 StgChar;
+typedef int StgBool;
+
+typedef float StgFloat;
+typedef double StgDouble;
+
+typedef void StgVoid;
+
+typedef struct StgClosure_ StgClosure;
+typedef StgClosure* StgClosurePtr;
+typedef StgWord* StgPtr; /* pointer into closure */
+typedef StgWord volatile* StgVolatilePtr; /* pointer to volatile word */
+typedef StgWord StgOffset; /* byte offset within closure */
+
+typedef struct StgTSO_* StgTSOPtr;
+
+typedef void* StgForeignPtr;
+
+typedef StgInt StgStackOffset; /* offset in words! */
+
+typedef StgWord* StgStackPtr;
+
+typedef StgWord8 StgCode; /* close enough */
+
+typedef StgPtr* StgArray; /* the goods of an Array# */
+typedef char* StgByteArray; /* the goods of a ByteArray# */
+
+typedef void* StgStablePtr;
+
+/*
+ Types for the generated C functions
+ take no arguments
+ return a pointer to the next function to be called
+ use: Ptr to Fun that returns a Ptr to Fun which returns Ptr to void
+
+ Note: Neither StgFunPtr not StgFun is quite right (that is,
+ StgFunPtr != StgFun*). So, the functions we define all have type
+ StgFun but we always have to cast them to StgFunPtr when we assign
+ them to something.
+ The only way round this would be to write a recursive type but
+ C only allows that if you're defining a struct or union.
+*/
+
+typedef void *(*(*StgFunPtr)(void))(void);
+typedef StgFunPtr StgFun(void);
+
+#endif /* STGTYPES_H */