//===-- llvm/Type.def - File that describes various LLVM types ---*- C++ -*--=//
//
// This file contains descriptions of the various LLVM types and derived types.
// This file serves as a source of in source documentation and a can be
// #included to do something on all of the type definitions.
//
//===----------------------------------------------------------------------===//

// NOTE: NO INCLUDE GUARD DESIRED!


// If the user didn't specify one of the macros, give a default noop defn.
//
#ifndef HANDLE_PRIM_TYPE
#define HANDLE_PRIM_TYPE(x,y)
#endif
#ifndef HANDLE_DERV_TYPE
#define HANDLE_DERV_TYPE(x,y)
#endif


// HANDLE_PRIM_TYPE - Parameterized #define that takes the following fields to
// declare a primitive type:
//
//   Type Name:  This is the symbolic name of the type, without the trailing Ty.
//   Type Size:  This is the size or precision of the type.
//
HANDLE_PRIM_TYPE(Void  , 0)
HANDLE_PRIM_TYPE(Bool  , 1)
HANDLE_PRIM_TYPE(SByte , 1)
HANDLE_PRIM_TYPE(UByte , 1)
HANDLE_PRIM_TYPE(Short , 2)
HANDLE_PRIM_TYPE(UShort, 2)
HANDLE_PRIM_TYPE(Int   , 4)
HANDLE_PRIM_TYPE(UInt  , 4)
HANDLE_PRIM_TYPE(Long  , 8)
HANDLE_PRIM_TYPE(ULong , 8)
HANDLE_PRIM_TYPE(Float , 4)
HANDLE_PRIM_TYPE(Double, 8)
HANDLE_PRIM_TYPE(Type  , 0)
HANDLE_PRIM_TYPE(Label , 0)


// HANDLE_DERV_TYPE - Parameterized #define that takes the following fields to
// declare a derived type:
//
//   Type Name:  This is the symbolic name of the type, without the trailing Ty.
//   Class Name: This is the subclass that implements the derived type.
//
HANDLE_DERV_TYPE(Function, FunctionType)
HANDLE_DERV_TYPE(Array   , ArrayType)
HANDLE_DERV_TYPE(Pointer , PointerType)
HANDLE_DERV_TYPE(Struct  , StructType)
HANDLE_DERV_TYPE(Opaque  , OpaqueType)

// Kill the macros on exit...
#undef HANDLE_PRIM_TYPE
#undef HANDLE_DERV_TYPE
