annotate gen/rttibuilder.h @ 1638:0de4525a9ed6

Apply workaround for #395 by klickverbot.
author Christian Kamm <kamm incasoftware de>
date Mon, 08 Mar 2010 20:06:08 +0100
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