//===---------- Assembly.h - Definition of an assembly --------------------===//
//
//                              N3
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//


#ifndef N3_ASSEMBLY_H
#define N3_ASSEMBLY_H

#include <vector>

#include "types.h"

#include "mvm/Object.h"
#include "mvm/Threads/Locks.h"
#include "mvm/Threads/Cond.h"

#include "llvm/DerivedTypes.h"
#include "llvm/Type.h"

namespace llvm {
  class GenericValue;
}

namespace n3 {

class ArrayUInt8;
class ArrayObject;
class Assembly;
class ClassNameMap;
class ClassTokenMap;
class FieldTokenMap;
class MethodTokenMap;
class N3;
class Param;
class Property;
class Reader;
class UTF8;
class VirtualMachine;
class VMClass;
class VMGenericClass;
class VMClassArray;
class VMClassPointer;
class VMCommonClass;
class VMField;
class VMMethod;
class VMObject;
class VMGenericClass;
class VMGenericMethod;

class Section : public mvm::Object {
public:
  static VirtualTable* VT;
  virtual void print(mvm::PrintBuffer* buf) const;
  virtual void TRACER;
  
  char* name;
  uint32 virtualSize;
  uint32 virtualAddress;
  uint32 rawSize;
  uint32 rawAddress;
  uint32 relocAddress;
  uint32 lineNumbers;
  uint32 relocationsNumber;
  uint32 lineNumbersNumber;
  uint32 characteristics;

  void read(Reader* reader, N3* vm);
};

class Stream : public mvm::Object {
public:
  static VirtualTable* VT;
  virtual void print(mvm::PrintBuffer* buf) const;
  virtual void TRACER;

  char* name;
  uint32 realOffset;
  uint32 size;
};

class Table : public mvm::Object {
public:
  static VirtualTable* VT;
  virtual void print(mvm::PrintBuffer* buf) const;
  virtual void TRACER;

  uint32 offset;
  uint32 rowsNumber;
  uint32 rowSize;
  uint32 count;
  uint32 sizeMask;

  void readRow(uint32* result, uint32 row, ArrayUInt8* array);
  uint32 readIndexInRow(uint32 row, uint32 index, ArrayUInt8* array);

};


class Header : public mvm::Object {
public:
  static VirtualTable* VT;
  virtual void print(mvm::PrintBuffer* buf) const;
  virtual void TRACER;

  uint32 signature;
  uint32 major;
  uint32 minor;
  uint32 reserved;
  uint32 versionLength;
  uint32 flags;
  uint32 nbStreams;

  const UTF8* versionName;
  Stream* tildStream;
  Stream* stringStream;
  Stream* usStream;
  Stream* blobStream;
  Stream* guidStream;
  std::vector<Table*, gc_allocator<Table*> > tables;
  
  void read(Reader* reader, N3* vm);
};

typedef void (*maskVector_t)(uint32 index,
                             std::vector<Table*, gc_allocator<Table*> >& tables,
                             uint32 heapSizes);

typedef VMCommonClass* (*signatureVector_t)(uint32 op, Assembly* ass,
                                            uint32& offset, VMGenericClass* genClass, VMGenericMethod* genMethod);

class Assembly : public mvm::Object {
public:
  static VirtualTable* VT;
  virtual void print(mvm::PrintBuffer* buf) const;
  virtual void TRACER;

  VMClassPointer* constructPointer(VMCommonClass* base, uint32 dims);
  VMClassArray* constructArray(VMCommonClass* base, uint32 dims);
  VMClassArray* constructArray(const UTF8* name, const UTF8* nameSpace,
                               uint32 dims);
  VMClass*      constructClass(const UTF8* name,
                               const UTF8* nameSpace, uint32 token);
  VMGenericClass* constructGenericClass(const UTF8* name,
                                        const UTF8* nameSpace,
                                        std::vector<VMCommonClass*> genArgs,
                                        uint32 token);
  VMField*      constructField(VMClass* cl, const UTF8* name,
                               VMCommonClass* signature, uint32 token, VMGenericClass* genClass, VMGenericMethod* genMethod);
  VMMethod*     constructMethod(VMClass* cl, const UTF8* name,
                                uint32 token, bool generic, std::vector<VMCommonClass*>* genMethodInstantiation, VMGenericClass* genClass);
  VMCommonClass* lookupClassFromName(const UTF8* name, const UTF8* nameSpace);
  VMCommonClass* lookupClassFromToken(uint32 token);
  VMMethod* lookupMethodFromToken(uint32 token);
  VMField* lookupFieldFromToken(uint32 token);
  
  ClassNameMap* loadedNameClasses;
  ClassTokenMap* loadedTokenClasses;
  MethodTokenMap* loadedTokenMethods;
  FieldTokenMap* loadedTokenFields;
  
  mvm::Lock* lockVar;
  mvm::Cond* condVar;
  const UTF8* name;
  ArrayUInt8* bytes;
  Section* textSection;
  Section* rsrcSection;
  Section* relocSection;
  Header* CLIHeader;
  N3* vm;
  VMObject* delegatee;
  Assembly** assemblyRefs;
  VMObject* getAssemblyDelegatee();

  uint32 CLIHeaderLocation;
  bool isRead;
  uint32 cb;
  uint32 major;
  uint32 minor;
  uint32 mdRva;
  uint32 mdSize;
  uint32 flags;
  uint32 entryPoint;
  uint32 resRva;
  uint32 resSize;

  static Assembly* allocate(const UTF8* name);
  static const UTF8* readUTF8(VirtualMachine* vm, uint32 len, Reader* reader);
  static const UTF8* readUTF16(VirtualMachine* vm, uint32 len, Reader* reader);
  static const UTF8* readUTF8(VirtualMachine* vm, uint32 len, ArrayUInt8* bytes,
                              uint32& offset);
  static const UTF8* readUTF16(VirtualMachine* vm, uint32 len, 
                               ArrayUInt8* bytes, uint32& offset);
  const UTF8* readString(VirtualMachine* vm, uint32 offset);
  void read();
  void readTables(Reader* reader);

  static maskVector_t maskVector[64];
  static const char* maskVectorName[64];
  static signatureVector_t signatureVector[0x46];
  static const char* signatureNames[0x46];
  

  uint32 uncompressSignature(uint32& offset);
  uint32 getTypeDefTokenFromMethod(uint32 token);
  VMCommonClass* loadType(N3* vm, uint32 token, bool resolveFunc, bool resolve,
                          bool clinit, bool dothrow, VMGenericClass* genClass, VMGenericMethod* genMethod);
  VMCommonClass* loadType(N3* vm, uint32 token, bool resolveFunc, bool resolve,
                          bool clinit, bool dothrow, std::vector<VMCommonClass*> genArgs, VMGenericClass* genClass, VMGenericMethod* genMethod);
  
  VMCommonClass* loadTypeFromName(const UTF8* name, const UTF8* nameSpace, 
                                  bool resolveFunc, bool resolve,
                                  bool clinit, bool dothrow);
  void readClass(VMCommonClass* cl, VMGenericMethod* genMethod);
  void getProperties(VMCommonClass* cl, VMGenericClass* genClass, VMGenericMethod* genMethod);
  Property* readProperty(uint32 index, VMCommonClass* cl, VMGenericClass* genClass, VMGenericMethod* genMethod);
  VMMethod* readMethodDef(uint32 index, VMCommonClass* cl,
                          std::vector<VMCommonClass*>* genMethodInstantiation, VMGenericClass* genClass);
  VMMethod* readMethodSpec(uint32 token, VMGenericClass* genClass, VMGenericMethod* genMethod);
  VMField* readField(uint32 index, VMCommonClass* cl, VMGenericClass* genClass, VMGenericMethod* genMethod);
  Param* readParam(uint32 index, VMMethod* meth);
  VMClass* readTypeDef(N3* vm, uint32 index);
  VMClass* readTypeDef(N3* vm, uint32 index, std::vector<VMCommonClass*> genArgs);
  VMCommonClass* readTypeSpec(N3* vm, uint32 index, VMGenericClass* genClass, VMGenericMethod* genMethod);
  Assembly* readAssemblyRef(N3* vm, uint32 index);
  VMCommonClass* readTypeRef(N3* vm, uint32 index);
  void readSignature(uint32 offset, std::vector<VMCommonClass*>& locals, VMGenericClass* genClass, VMGenericMethod* genMethod);
  
  void getInterfacesFromTokenType(std::vector<uint32>& tokens, uint32 token);
  
  bool extractMethodSignature(uint32& offset, VMCommonClass* cl,
                              std::vector<VMCommonClass*> &params, VMGenericClass* genClass, VMGenericMethod* genMethod);
  bool isGenericMethod(uint32& offset);
  void localVarSignature(uint32& offset,
                         std::vector<VMCommonClass*>& locals, VMGenericClass* genClass, VMGenericMethod* genMethod);
  void methodSpecSignature(uint32& offset,
                           std::vector<VMCommonClass*>& genArgs, VMGenericClass* genClass, VMGenericMethod* genMethod);
  VMCommonClass* extractFieldSignature(uint32& offset, VMGenericClass* genClass, VMGenericMethod* genMethod);
  VMCommonClass* extractTypeInSignature(uint32& offset, VMGenericClass* genClass, VMGenericMethod* genMethod);
  VMCommonClass* exploreType(uint32& offset, VMGenericClass* genClass, VMGenericMethod* genMethod); 
  
  VMCommonClass* getClassFromName(N3* vm, const UTF8* name, const UTF8* nameSpace);
  
  VMField* getFieldFromToken(uint32 token, bool stat, VMGenericClass* genClass, VMGenericMethod* genMethod); 
  uint32 getTypedefTokenFromField(uint32 token);
  VMField* readMemberRefAsField(uint32 token, bool stat, VMGenericClass* genClass, VMGenericMethod* genMethod);
  
  VMMethod* getMethodFromToken(uint32 token, VMGenericClass* genClass, VMGenericMethod* genMethod); 
  uint32 getTypedefTokenFromMethod(uint32 token);
  VMMethod* readMemberRefAsMethod(uint32 token, std::vector<VMCommonClass*>* genArgs, VMGenericClass* genClass, VMGenericMethod* genMethod);

  const UTF8* readUserString(uint32 token); 
  uint32 getExplicitLayout(uint32 token);
  uint32 getRVAFromField(uint32 token);
  
  static Assembly* getCallingAssembly();
  static Assembly* getExecutingAssembly();

  void readCustomAttributes(uint32 offset, std::vector<llvm::GenericValue>& args, VMMethod* meth);
  ArrayObject* getCustomAttributes(uint32 token, VMCommonClass* cl);
private:
    VMMethod *instantiateGenericMethod(std::vector<VMCommonClass*> *genArgs, VMCommonClass *type, const UTF8 *& name, std::vector<VMCommonClass*> & args, uint32 token, bool virt, VMGenericClass* genClass);


};


#define CONSTANT_Assembly 0x20
#define CONSTANT_AssemblyOS 0x22
#define CONSTANT_AssemblyProcessor 0x21
#define CONSTANT_AssemblyRef 0x23
#define CONSTANT_AssemblyRefOS 0x25
#define CONSTANT_AssemblyRefProcessor 0x24
#define CONSTANT_ClassLayout 0x0F
#define CONSTANT_Constant 0x0B
#define CONSTANT_CustomAttribute 0x0C
#define CONSTANT_DeclSecurity 0x0E
#define CONSTANT_EventMap 0x12
#define CONSTANT_Event 0x14
#define CONSTANT_ExportedType 0x27
#define CONSTANT_Field 0x04
#define CONSTANT_FieldLayout 0x10
#define CONSTANT_FieldMarshal 0x0D
#define CONSTANT_FieldRVA 0x1D
#define CONSTANT_File 0x26
#define CONSTANT_GenericParam 0x2A
#define CONSTANT_GenericParamConstraint 0x2C
#define CONSTANT_ImplMap 0x1C
#define CONSTANT_InterfaceImpl 0x09
#define CONSTANT_ManifestResource 0x28
#define CONSTANT_MemberRef 0x0A
#define CONSTANT_MethodDef 0x06
#define CONSTANT_MethodImpl 0x19
#define CONSTANT_MethodSemantics 0x18
#define CONSTANT_MethodSpec 0x2B
#define CONSTANT_Module 0x00
#define CONSTANT_ModuleRef 0x1A
#define CONSTANT_NestedClass 0x29
#define CONSTANT_Param 0x08
#define CONSTANT_Property 0x17
#define CONSTANT_PropertyMap 0x15
#define CONSTANT_StandaloneSig 0x11
#define CONSTANT_TypeDef 0x02
#define CONSTANT_TypeRef 0x01
#define CONSTANT_TypeSpec 0x1B


#define CONSTANT_HasThis 0x20
#define CONSTANT_ExplicitThis 0x40
#define CONSTANT_Default 0x0
#define CONSTANT_Vararg 0x5
#define CONSTANT_C 0x1
#define CONSTANT_StdCall 0x2
#define CONSTANT_ThisCall 0x3
#define CONSTANT_FastCall 0x4
#define CONSTANT_Generic 0x10
#define CONSTANT_Sentinel 0x41


#define CONSTANT_CorILMethod_TinyFormat 0x2
#define CONSTANT_CorILMethod_FatFormat 0x3
#define CONSTANT_CorILMethod_MoreSects 0x8
#define CONSTANT_CorILMethod_InitLocals 0x10
#define CONSTANT_CorILMethod_Sect_FatFormat 0x40
#define CONSTANT_COR_ILEXCEPTION_CLAUSE_EXCEPTION  0x0000
#define CONSTANT_COR_ILEXCEPTION_CLAUSE_FILTER     0x0001
#define CONSTANT_COR_ILEXCEPTION_CLAUSE_FINALLY    0x0002
#define CONSTANT_COR_ILEXCEPTION_CLAUSE_FAULT      0x0004


#define CLI_HEADER 0x168
#define TEXT_SECTION_HEADER 0x178
#define RSRC_SECTION_HEADER 0x178
#define RELOC_SECTION_HEADER 0x178
#define SECTION_NAME_LENGTH 8
#define TABLE_MAX 64
#define NB_TABLES 41

#define INT16(offset)                       \
  rowSize += 2;                             \
  bitmask = bitmask | (1 << (offset << 1));

#define INT32(offset)                       \
  rowSize += 4;                             \
  bitmask = bitmask | (3 << (offset << 1));


#define STRING(offset) {                    \
  uint32 fieldSize = 0;                     \
  if (heapSizes & 0x01) {                   \
    fieldSize = 4;                          \
  } else {                                  \
    fieldSize = 2;                          \
  }                                         \
  rowSize += fieldSize;                     \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define GUID(offset) {                      \
  uint32 fieldSize = 0;                     \
  if (heapSizes & 0x02) {                   \
    fieldSize = 4;                          \
  } else {                                  \
    fieldSize = 2;                          \
  }                                         \
  rowSize += fieldSize;                     \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define BLOB(offset) {                      \
  uint32 fieldSize = 0;                     \
  if (heapSizes & 0x04) {                   \
    fieldSize = 4;                          \
  } else {                                  \
    fieldSize = 2;                          \
  }                                         \
  rowSize += fieldSize;                     \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define TABLE(table, offset) {                  \
  uint32 fieldSize = 0;                         \
  if (tables[table]->rowsNumber < 0x10000) {    \
    fieldSize = 2;                              \
  } else {                                      \
    fieldSize = 4;                              \
  }                                             \
  rowSize += fieldSize;                         \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}


#define TYPEDEF_OR_REF(offset) { \
  uint32 fieldSize = 0; \
  if (tables[CONSTANT_TypeDef]->rowsNumber < 0x4000 &&      \
      tables[CONSTANT_TypeRef]->rowsNumber < 0x4000 &&      \
      tables[CONSTANT_TypeSpec]->rowsNumber < 0x4000) {     \
    fieldSize = 2;                                        \
  } else {                                                \
    fieldSize = 4;                                        \
  }                                                       \
  rowSize += fieldSize;                                   \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}


#define HAS_CONSTANT(offset) { \
  uint32 fieldSize = 0; \
  if (tables[CONSTANT_Field]->rowsNumber < 0x4000 &&      \
      tables[CONSTANT_Param]->rowsNumber < 0x4000 &&      \
      tables[CONSTANT_Property]->rowsNumber < 0x4000) {   \
    fieldSize = 2;                                        \
  } else {                                                \
    fieldSize = 4;                                        \
  }                                                       \
  rowSize += fieldSize;                                   \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define HAS_CUSTOM_ATTRIBUTE(offset) {                          \
  uint32 fieldSize = 0;                                         \
  if (tables[CONSTANT_MethodDef]->rowsNumber < 0x800 &&         \
      tables[CONSTANT_Field]->rowsNumber < 0x800 &&             \
      tables[CONSTANT_TypeRef]->rowsNumber < 0x800 &&           \
      tables[CONSTANT_TypeDef]->rowsNumber < 0x800 &&           \
      tables[CONSTANT_Param]->rowsNumber < 0x800 &&             \
      tables[CONSTANT_InterfaceImpl]->rowsNumber < 0x800 &&     \
      tables[CONSTANT_MemberRef]->rowsNumber < 0x800 &&         \
      tables[CONSTANT_Module]->rowsNumber < 0x800 &&            \
      tables[CONSTANT_DeclSecurity]->rowsNumber < 0x800 &&      \
      tables[CONSTANT_Property]->rowsNumber < 0x800 &&          \
      tables[CONSTANT_Event]->rowsNumber < 0x800 &&             \
      tables[CONSTANT_StandaloneSig]->rowsNumber < 0x800 &&     \
      tables[CONSTANT_ModuleRef]->rowsNumber < 0x800 &&         \
      tables[CONSTANT_TypeSpec]->rowsNumber < 0x800 &&          \
      tables[CONSTANT_Assembly]->rowsNumber < 0x800 &&          \
      tables[CONSTANT_AssemblyRef]->rowsNumber < 0x800 &&       \
      tables[CONSTANT_File]->rowsNumber < 0x800 &&              \
      tables[CONSTANT_ExportedType]->rowsNumber < 0x800 &&      \
      tables[CONSTANT_ManifestResource]->rowsNumber < 0x800) {  \
    fieldSize = 2;                                              \
  } else {                                                      \
    fieldSize = 4;                                              \
  }                                                             \
  rowSize += fieldSize;                                         \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1));       \
}

#define HAS_FIELD_MARSHAL(offset) {                       \
  uint32 fieldSize = 0;                                   \
  if (tables[CONSTANT_Field]->rowsNumber < 0x8000 &&      \
      tables[CONSTANT_Param]->rowsNumber < 0x8000) {      \
    fieldSize = 2;                                        \
  } else {                                                \
    fieldSize = 4;                                        \
  }                                                       \
  rowSize += fieldSize;                                   \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define HAS_DECL_SECURITY(offset) {                       \
  uint32 fieldSize = 0;                                   \
  if (tables[CONSTANT_TypeDef]->rowsNumber < 0x4000 &&    \
      tables[CONSTANT_MethodDef]->rowsNumber < 0x4000 &&  \
      tables[CONSTANT_Assembly]->rowsNumber < 0x4000) {   \
    fieldSize = 2;                                        \
  } else {                                                \
    fieldSize = 4;                                        \
  }                                                       \
  rowSize += fieldSize;                                   \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define MEMBER_REF_PARENT(offset) {                       \
  uint32 fieldSize = 0;                                   \
  if (tables[CONSTANT_TypeDef]->rowsNumber < 0x2000 &&    \
      tables[CONSTANT_TypeRef]->rowsNumber < 0x2000 &&    \
      tables[CONSTANT_ModuleRef]->rowsNumber < 0x2000 &&  \
      tables[CONSTANT_MethodDef]->rowsNumber < 0x2000 &&  \
      tables[CONSTANT_TypeSpec]->rowsNumber < 0x2000) {   \
    fieldSize = 2;                                        \
  } else {                                                \
    fieldSize = 4;                                        \
  }                                                       \
  rowSize += fieldSize;                                   \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define HAS_SEMANTICS(offset) {                           \
  uint32 fieldSize = 0;                                   \
  if (tables[CONSTANT_Event]->rowsNumber < 0x8000 &&      \
      tables[CONSTANT_Property]->rowsNumber < 0x8000) {   \
    fieldSize = 2;                                        \
  } else {                                                \
    fieldSize = 4;                                        \
  }                                                       \
  rowSize += fieldSize;                                   \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define METHODDEF_OR_REF(offset) {                        \
  uint32 fieldSize = 0;                                   \
  if (tables[CONSTANT_MethodDef]->rowsNumber < 0x8000 &&  \
      tables[CONSTANT_MemberRef]->rowsNumber < 0x8000) {  \
    fieldSize = 2;                                        \
  } else {                                                \
    fieldSize = 4;                                        \
  }                                                       \
  rowSize += fieldSize;                                   \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define MEMBER_FORWARDED(offset) {                        \
  uint32 fieldSize = 0;                                   \
  if (tables[CONSTANT_Field]->rowsNumber < 0x8000 &&      \
      tables[CONSTANT_MethodDef]->rowsNumber < 0x8000) {  \
    fieldSize = 2;                                        \
  } else {                                                \
    fieldSize = 4;                                        \
  }                                                       \
  rowSize += fieldSize;                                   \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define IMPLEMENTATION(offset) {                              \
  uint32 fieldSize = 0;                                       \
  if (tables[CONSTANT_File]->rowsNumber < 0x4000 &&           \
      tables[CONSTANT_AssemblyRef]->rowsNumber < 0x4000 &&    \
      tables[CONSTANT_ExportedType]->rowsNumber < 0x4000) {   \
    fieldSize = 2;                                            \
  } else {                                                    \
    fieldSize = 4;                                            \
  }                                                           \
  rowSize += fieldSize;                                       \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1));     \
}

// Some encodings are not used here
#define CUSTOM_ATTRIBUTE_TYPE(offset) {                   \
  uint32 fieldSize = 0;                                   \
  if (tables[CONSTANT_MethodDef]->rowsNumber < 0x2000 &&  \
      tables[CONSTANT_MemberRef]->rowsNumber < 0x2000) {  \
    fieldSize = 2;                                        \
  } else {                                                \
    fieldSize = 4;                                        \
  }                                                       \
  rowSize += fieldSize;                                   \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}

#define RESOLUTION_SCOPE(offset) {                            \
  uint32 fieldSize = 0;                                       \
  if (tables[CONSTANT_Module]->rowsNumber < 0x4000 &&         \
      tables[CONSTANT_ModuleRef]->rowsNumber < 0x4000 &&      \
      tables[CONSTANT_AssemblyRef]->rowsNumber < 0x4000 &&    \
      tables[CONSTANT_TypeRef]->rowsNumber < 0x4000) {        \
    fieldSize = 2;                                            \
  } else {                                                    \
    fieldSize = 4;                                            \
  }                                                           \
  rowSize += fieldSize;                                       \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1));     \
}

#define TYPE_OR_METHODDEF(offset) {                       \
  uint32 fieldSize = 0;                                   \
  if (tables[CONSTANT_TypeDef]->rowsNumber < 0x8000 &&    \
      tables[CONSTANT_MethodDef]->rowsNumber < 0x8000) {  \
    fieldSize = 2;                                        \
  } else {                                                \
    fieldSize = 4;                                        \
  }                                                       \
  rowSize += fieldSize;                                   \
  bitmask = bitmask | ((fieldSize - 1) << (offset << 1)); \
}


#define CONSTANT_MODULE_GENERATION 0
#define CONSTANT_MODULE_NAME 1
#define CONSTANT_MODULE_MVID 2
#define CONSTANT_MODULE_ENCID 3
#define CONSTANT_MODULE_ENCBASEID 4


#define CONSTANT_TYPEREF_RESOLUTION_SCOPE 0
#define CONSTANT_TYPEREF_NAME 1
#define CONSTANT_TYPEREF_NAMESPACE 2

#define CONSTANT_TYPEDEF_FLAGS 0
#define CONSTANT_TYPEDEF_NAME 1
#define CONSTANT_TYPEDEF_NAMESPACE 2
#define CONSTANT_TYPEDEF_EXTENDS 3
#define CONSTANT_TYPEDEF_FIELDLIST 4
#define CONSTANT_TYPEDEF_METHODLIST 5

#define CONSTANT_METHODDEF_RVA 0
#define CONSTANT_METHODDEF_IMPLFLAGS 1
#define CONSTANT_METHODDEF_FLAGS 2
#define CONSTANT_METHODDEF_NAME 3
#define CONSTANT_METHODDEF_SIGNATURE 4
#define CONSTANT_METHODDEF_PARAMLIST 5

#define CONSTANT_PARAM_FLAGS 0
#define CONSTANT_PARAM_SEQUENCE 1
#define CONSTANT_PARAM_NAME 2

#define CONSTANT_MEMBERREF_CLASS 0
#define CONSTANT_MEMBERREF_NAME 1
#define CONSTANT_MEMBERREF_SIGNATURE 2

#define CONSTANT_CUSTOM_ATTRIBUTE_PARENT 0
#define CONSTANT_CUSTOM_ATTRIBUTE_TYPE 1
#define CONSTANT_CUSTOM_ATTRIBUTE_VALUE 2
  
#define CONSTANT_STANDALONE_SIG_SIGNATURE 0

#define CONSTANT_TYPESPEC_SIGNATURE 0

#define CONSTANT_ASSEMBLY_HASH_ALG_ID 0
#define CONSTANT_ASSEMBLY_MAJOR 1
#define CONSTANT_ASSEMBLY_MINOR 2
#define CONSTANT_ASSEMBLY_BUILD 3
#define CONSTANT_ASSEMBLY_REVISION 4
#define CONSTANT_ASSEMBLY_FLAGS 5
#define CONSTANT_ASSEMBLY_PUBLIC_KEY 6
#define CONSTANT_ASSEMBLY_NAME 7
#define CONSTANT_ASSEMBLY_CULTURE 8

#define CONSTANT_ASSEMBLY_REF_MAJOR 0
#define CONSTANT_ASSEMBLY_REF_MINOR 1
#define CONSTANT_ASSEMBLY_REF_BUILD 2
#define CONSTANT_ASSEMBLY_REF_REVISION 3
#define CONSTANT_ASSEMBLY_REF_FLAGS 4
#define CONSTANT_ASSEMBLY_REF_PUBLIC_KEY 5
#define CONSTANT_ASSEMBLY_REF_NAME 6
#define CONSTANT_ASSEMBLY_REF_CULTURE 7
#define CONSTANT_ASSEMBLY_REF_HASH_VALUE 8

#define CONSTANT_FIELD_FLAGS 0
#define CONSTANT_FIELD_NAME 1
#define CONSTANT_FIELD_SIGNATURE 2

#define CONSTANT_INTERFACE_IMPL_CLASS 0
#define CONSTANT_INTERFACE_IMPL_INTERFACE 1

#define CONSTANT_NESTED_CLASS_NESTED_CLASS 0
#define CONSTANT_NESTED_CLASS_ENCLOSING_CLASS 1

#define CONSTANT_METHOD_SPEC_METHOD 0
#define CONSTANT_METHOD_SPEC_INSTANTIATION 1

#define CONSTANT_GENERIC_PARAM_CONSTRAINT_OWNER 0
#define CONSTANT_GENERIC_PARAM_CONSTRAINT_CONSTRAINT 1

#define CONSTANT_CONSTANT_TYPE 0
#define CONSTANT_CONSTANT_PARENT 1
#define CONSTANT_CONSTANT_VALUE 2

#define CONSTANT_FIELD_MARSHAL_PARENT 0
#define CONSTANT_FIELD_MARSHAL_NATIVE_TYPE 1

#define CONSTANT_DECL_SECURITY_ACTION 0
#define CONSTANT_DECL_SECURITY_PARENT 1
#define CONSTANT_DECL_SECURITY_PERMISSION_SET 2

#define CONSTANT_CLASS_LAYOUT_PACKING_SIZE 0
#define CONSTANT_CLASS_LAYOUT_CLASS_SIZE 1
#define CONSTANT_CLASS_LAYOUT_PARENT 2

#define CONSTANT_FIELD_LAYOUT_OFFSET 0
#define CONSTANT_FIELD_LAYOUT_FIELD 1

#define CONSTANT_EVENT_MAP_PARENT 0
#define CONSTANT_EVEN_MAP_EVENT_LIST 1

#define CONSTANT_EVENT_EVENT_FLAGS 0
#define CONSTANT_EVENT_NAME 1
#define CONSTANT_EVENT_TYPE 2

#define CONSTANT_PROPERTY_MAP_PARENT 0
#define CONSTANT_PROPERTY_MAP_PROPERTY_LIST 1

#define CONSTANT_PROPERTY_FLAGS 0
#define CONSTANT_PROPERTY_NAME 1
#define CONSTANT_PROPERTY_TYPE 2

#define CONSTANT_METHOD_SEMANTICS_SEMANTICS 0
#define CONSTANT_METHOD_SEMANTICS_METHOD 1
#define CONSTANT_METHOD_SEMANTICS_ASSOCIATION 2

#define CONSTANT_METHOD_IMPL_CLASS 0
#define CONSTANT_METHOD_IMPL_METHOD_BODY 1
#define CONSTANT_METHOD_IMPL_METHOD_DECLARATION 2

#define CONSTANT_MODULE_REF_NAME 0

#define CONSTANT_IMPL_MAP_MAPPING_FLAGS 0
#define CONSTANT_IMPL_MAP_MEMBER_FORWARDED 1
#define CONSTANT_IMPL_MAP_IMPORT_NAME 2
#define CONSTANT_IMPL_MAP_IMPORT_SCOPE 3

#define CONSTANT_FIELD_RVA_RVA 0
#define CONSTANT_FIELD_RVA_FIELD 1

#define CONSTANT_MANIFEST_RESOURCE_OFFSET 0
#define CONSTANT_MANIFEST_RESOURCE_FLAGS 1
#define CONSTANT_MANIFEST_RESOURCE_NAME 2
#define CONSTANT_MANIFEST_RESOURCE_IMPLEMENTATION 3

#define CONSTANT_ASSEMBLY_PROCESSOR_PROCESSOR 0

#define CONSTANT_ASSEMBLY_OS_PLATFORM_ID 0
#define CONSTANT_ASSEMBLY_OS_MAJOR_VERSION 1
#define CONSTANT_ASSEMBLY_OS_MINOR_VERSION 2

#define CONSTANT_FILE_FLAGS 0
#define CONSTANT_FILE_NAME 1
#define CONSTANT_FILE_HASH_VALUE 2

#define CONSTANT_GENERIC_PARAM_NUMBER 0
#define CONSTANT_GENERIC_PARAM_FLAGS 1
#define CONSTANT_GENERIC_PARAM_OWNER 2
#define CONSTANT_GENERIC_PARAM_NAME 3

} // end namespace n3

#endif

