diff gen/rttibuilder.h @ 1374:e630ff79e10d

Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
author Tomas Lindquist Olsen <tomas.l.olsen gmail com>
date Sun, 17 May 2009 03:10:55 +0200
parents
children 63f4afd01036
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gen/rttibuilder.h	Sun May 17 03:10:55 2009 +0200
@@ -0,0 +1,34 @@
+#ifndef __LDC_GEN_RTTIBUILDER_H__
+#define __LDC_GEN_RTTIBUILDER_H__
+
+#include "llvm/Constant.h"
+#include "llvm/ADT/SmallVector.h"
+
+struct ClassDeclaration;
+struct TypeClass;
+
+struct IrStruct;
+
+struct TypeInfoBuilder
+{
+    ClassDeclaration* base;
+    TypeClass* basetype;
+    IrStruct* baseir;
+
+    // 10 is enough for any D1 typeinfo
+    llvm::SmallVector<llvm::Constant*, 10> inits;
+
+    TypeInfoBuilder(ClassDeclaration* base_class);
+
+    void push(llvm::Constant* C);
+    void push_null_vp();
+    void push_typeinfo(Type* t);
+    void push_classinfo(ClassDeclaration* cd);
+    void push_string(const char* str);
+    void push_null_void_array();
+    void push_void_array(size_t dim, llvm::Constant* ptr);
+    void push_void_array(llvm::Constant* CI, Type* valtype, Dsymbol* sym);
+    void finalize(IrGlobal* tid);
+};
+
+#endif