Mercurial > projects > ldc
view ir/irtype.h @ 1621:fb2e6707ad17
Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't...
Both DMD revisions are for fixing bugzilla 2029 (Typesafe variadic
functions don't work in CTFE).
The DMD r314 commit message is:
bugzilla 2029 (Typesafe variadic functions don't work in CTFE
The DMD r315 commit message is:
bugzilla 2029 - try again
---
dmd/constfold.c | 11 ++++-
dmd/declaration.c | 21 +++++++++-
dmd/declaration.h | 10 ++++-
dmd/expression.c | 1 +
dmd/interpret.c | 111 +++++++++++++++++++++++++++++++++++++++++++++--------
dmd/mars.h | 2 +-
dmd/mtype.c | 2 +-
7 files changed, 135 insertions(+), 23 deletions(-)
author | Leandro Lucarella <llucax@gmail.com> |
---|---|
date | Wed, 06 Jan 2010 15:18:22 -0300 |
parents | 81121ac19f61 |
children |
line wrap: on
line source
#ifndef __LDC_IR_IRTYPE_H__ #define __LDC_IR_IRTYPE_H__ #include "llvm/Type.h" ////////////////////////////////////////////////////////////////////////////// // forward declarations struct Type; class IrTypeAggr; class IrTypeArray; class IrTypeBasic; class IrTypeClass; class IrTypeDelegate; class IrTypeFunction; class IrTypePointer; class IrTypeSArray; class IrTypeStruct; ////////////////////////////////////////////////////////////////////////////// /// Base class for IrTypeS. class IrType { public: /// IrType(Type* dt, const llvm::Type* lt); /// virtual IrTypeAggr* isAggr() { return NULL; } /// virtual IrTypeArray* isArray() { return NULL; } /// virtual IrTypeBasic* isBasic() { return NULL; } /// virtual IrTypeClass* isClass() { return NULL; } /// virtual IrTypeDelegate* isDelegate(){ return NULL; } /// virtual IrTypeFunction* isFunction(){ return NULL; } /// virtual IrTypePointer* isPointer() { return NULL; } /// virtual IrTypeSArray* isSArray() { return NULL; } /// virtual IrTypeStruct* isStruct() { return NULL; } /// Type* getD() { return dtype; } /// virtual const llvm::Type* get() { return pa.get(); } /// llvm::PATypeHolder& getPA() { return pa; } /// virtual const llvm::Type* buildType() = 0; protected: /// Type* dtype; /// LLVM type holder. llvm::PATypeHolder pa; }; ////////////////////////////////////////////////////////////////////////////// /// IrType for basic D types. class IrTypeBasic : public IrType { public: /// IrTypeBasic(Type* dt); /// IrTypeBasic* isBasic() { return this; } /// const llvm::Type* buildType(); protected: /// const llvm::Type* basic2llvm(Type* t); }; ////////////////////////////////////////////////////////////////////////////// /// IrType from pointers. class IrTypePointer : public IrType { public: /// IrTypePointer(Type* dt); /// IrTypePointer* isPointer() { return this; } /// const llvm::Type* buildType(); protected: /// const llvm::Type* pointer2llvm(Type* t); }; ////////////////////////////////////////////////////////////////////////////// /// IrType for static arrays class IrTypeSArray : public IrType { public: /// IrTypeSArray(Type* dt); /// IrTypeSArray* isSArray() { return this; } /// const llvm::Type* buildType(); protected: /// const llvm::Type* sarray2llvm(Type* t); /// Dimension. uint64_t dim; }; ////////////////////////////////////////////////////////////////////////////// /// IrType for dynamic arrays class IrTypeArray : public IrType { public: /// IrTypeArray(Type* dt); /// IrTypeArray* isArray() { return this; } /// const llvm::Type* buildType(); protected: /// const llvm::Type* array2llvm(Type* t); }; ////////////////////////////////////////////////////////////////////////////// #endif