annotate gen/rttibuilder.h @ 1650:40bd4a0d4870

Update to work with LLVM 2.7. Removed use of dyn_cast, llvm no compiles without exceptions and rtti by default. We do need exceptions for the libconfig stuff, but rtti isn't necessary (anymore). Debug info needs to be rewritten, as in LLVM 2.7 the format has completely changed. To have something to look at while rewriting, the old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means that you have to define this to compile at the moment. Updated tango 0.99.9 patch to include updated EH runtime code, which is needed for LLVM 2.7 as well.
author Tomas Lindquist Olsen
date Wed, 19 May 2010 12:42:32 +0200
parents 1609490c123f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1374
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
1 #ifndef __LDC_GEN_RTTIBUILDER_H__
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
2 #define __LDC_GEN_RTTIBUILDER_H__
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
3
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
4 #include "llvm/Constant.h"
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
5 #include "llvm/ADT/SmallVector.h"
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
6
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
7 struct ClassDeclaration;
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
8 struct TypeClass;
1376
a5d0e04298a8 Cleaned up TypeInfo_Tuple generation.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1375
diff changeset
9 struct Type;
1374
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
10
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
11 struct IrStruct;
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
12
1382
a0a4d4dac1a4 Renamed !TypeInfoBuilder to !RTTIBuilder.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1376
diff changeset
13 struct RTTIBuilder
1374
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
14 {
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
15 ClassDeclaration* base;
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
16 TypeClass* basetype;
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
17 IrStruct* baseir;
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
18
1385
1609490c123f Updated comment in RTTIBuilder.h
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1384
diff changeset
19 // 10 is enough for any D1 TypeInfo
1609490c123f Updated comment in RTTIBuilder.h
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1384
diff changeset
20 // 14 is enough for any D1 ClassInfo
1384
68a0e361fdce Increased RTTIBuilder buffer to 14 constants, to be big enough for !ClassInfo as well as !TypeInfo
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1383
diff changeset
21 llvm::SmallVector<llvm::Constant*, 14> inits;
1374
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
22
1382
a0a4d4dac1a4 Renamed !TypeInfoBuilder to !RTTIBuilder.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1376
diff changeset
23 RTTIBuilder(ClassDeclaration* base_class);
1374
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
24
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
25 void push(llvm::Constant* C);
1383
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
26 void push_null(Type* T);
1374
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
27 void push_null_vp();
1375
63f4afd01036 Cleaned up TypeInfo_Struct.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1374
diff changeset
28 void push_null_void_array();
63f4afd01036 Cleaned up TypeInfo_Struct.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1374
diff changeset
29 void push_uint(unsigned u);
63f4afd01036 Cleaned up TypeInfo_Struct.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1374
diff changeset
30 void push_size(uint64_t s);
63f4afd01036 Cleaned up TypeInfo_Struct.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1374
diff changeset
31 void push_string(const char* str);
1374
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
32 void push_typeinfo(Type* t);
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
33 void push_classinfo(ClassDeclaration* cd);
1383
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
34
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
35 /// pushes the function pointer or a null void* if it cannot.
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
36 void push_funcptr(FuncDeclaration* fd, Type* castto = NULL);
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
37
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
38 /// pushes the array slice given.
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
39 void push_array(uint64_t dim, llvm::Constant * ptr);
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
40
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
41 /// pushes void[] slice, dim is used directly, ptr is cast to void* .
1376
a5d0e04298a8 Cleaned up TypeInfo_Tuple generation.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1375
diff changeset
42 void push_void_array(uint64_t dim, llvm::Constant* ptr);
1383
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
43
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
44 /// pushes void[] slice with data.
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
45 /// CI is the constant initializer the array should point to, the length
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
46 /// and ptr are resolved automatically
1376
a5d0e04298a8 Cleaned up TypeInfo_Tuple generation.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1375
diff changeset
47 void push_void_array(llvm::Constant* CI, Type* valtype, Dsymbol* mangle_sym);
1383
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
48
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
49 /// pushes valtype[] slice with data.
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
50 /// CI is the constant initializer that .ptr should point to
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
51 /// dim is .length member directly
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
52 /// valtype provides the D element type, .ptr is cast to valtype->pointerTo()
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
53 /// mangle_sym provides the mangle prefix for the symbol generated.
1376
a5d0e04298a8 Cleaned up TypeInfo_Tuple generation.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1375
diff changeset
54 void push_array(llvm::Constant* CI, uint64_t dim, Type* valtype, Dsymbol* mangle_sym);
1375
63f4afd01036 Cleaned up TypeInfo_Struct.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1374
diff changeset
55
63f4afd01036 Cleaned up TypeInfo_Struct.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1374
diff changeset
56 /// Creates the initializer constant and assigns it to the global.
1374
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
57 void finalize(IrGlobal* tid);
1383
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
58
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
59 /// Creates the initializer constant and assigns it to the global.
f15a2d131ceb Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1382
diff changeset
60 llvm::Constant* get_constant();
1374
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
61 };
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
62
e630ff79e10d Cleaned up TypeInfo generation, still need to do TypeInfo_Struct/Tuple. Eventually do ClassInfo and ModuleInfo as well using same interface.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
diff changeset
63 #endif