Mercurial > projects > ldc
annotate gen/rttibuilder.h @ 1533:d1652c8fb4f6
Get rid of USE_METADATA
author | Benjamin Kramer <benny.kra@gmail.com> |
---|---|
date | Sat, 11 Jul 2009 14:19:21 +0200 |
parents | 1609490c123f |
children |
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 |