Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

file 52 lines (37 sloc) 1.578 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
#if USE_METADATA

#ifndef LDC_GEN_METADATA_H
#define LDC_GEN_METADATA_H

// MDNode was moved into its own header, and contains Value*s
#include "llvm/Metadata.h"
typedef llvm::Value MDNodeField;

// Use getNumElements() and getElement() to access elements.
inline unsigned MD_GetNumElements(llvm::MDNode* N) {
    return N->getNumElements();
}

inline MDNodeField* MD_GetElement(llvm::MDNode* N, unsigned i) {
    return N->getElement(i);
}

#define METADATA_LINKAGE_TYPE llvm::GlobalValue::WeakODRLinkage

// *** Metadata for TypeInfo instances ***
#define TD_PREFIX "llvm.ldc.typeinfo."

/// The fields in the metadata node for a TypeInfo instance.
/// (Its name will be TD_PREFIX ~ <Name of TypeInfo global>)
enum TypeDataFields {
    TD_Confirm, /// The TypeInfo this node is for.
    
    TD_Type, /// A value of the LLVM type corresponding to this D type
    
    // Must be kept last:
    TD_NumFields /// The number of fields in TypeInfo metadata
};


// *** Metadata for ClassInfo instances ***
#define CD_PREFIX "llvm.ldc.classinfo."

/// The fields in the metadata node for a ClassInfo instance.
/// (Its name will be CD_PREFIX ~ <Name of ClassInfo global>)
enum ClassDataFields {
    CD_BodyType, /// A value of the LLVM type corresponding to the class body.
    CD_Finalize, /// True if this class (or a base class) has a destructor.
    CD_CustomDelete,/// True if this class has an overridden delete operator.
    
    // Must be kept last
    CD_NumFields /// The number of fields in ClassInfo metadata
};

#endif

#endif // USE_METADATA
Something went wrong with that request. Please try again.