annotate ir/irstruct.h @ 1230:e67c85d6e680

Completed interface implementation. Hopefully that's it for now..
author Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
date Thu, 16 Apr 2009 13:18:56 +0200
parents 79758fd2f48a
children 752bed475b75
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 435
diff changeset
1 #ifndef LDC_IR_IRSTRUCT_H
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 435
diff changeset
2 #define LDC_IR_IRSTRUCT_H
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
3
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
4 #include "ir/ir.h"
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
5
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
6 #include <vector>
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
7 #include <map>
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
8
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
9 // DMD forward declarations
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
10 struct StructInitializer;
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
11
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
12 //////////////////////////////////////////////////////////////////////////////
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
13
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
14 // represents a struct or class
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
15 // it is used during codegen to hold all the vital info we need
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
16 struct IrStruct : IrBase
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
17 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
18 /// Constructor.
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
19 IrStruct(AggregateDeclaration* agg);
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
20
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
21 //////////////////////////////////////////////////////////////////////////
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
22 // public fields,
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
23 // FIXME this is basically stuff I just haven't gotten around to yet.
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
24
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
25 /// The D aggregate.
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
26 AggregateDeclaration* aggrdecl;
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
27
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
28 /// Aggregate D type.
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
29 Type* type;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
30
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
31 /// true only for: align(1) struct S { ... }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
32 bool packed;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
33
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
34 /// Composite type debug description.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
35 llvm::DICompositeType diCompositeType;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
36
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
37 //////////////////////////////////////////////////////////////////////////
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
38
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
39 /// Create the __initZ symbol lazily.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
40 LLGlobalVariable* getInitSymbol();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
41 /// Builds the __initZ initializer constant lazily.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
42 LLConstant* getDefaultInit();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
43
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
44 /// Create the __vtblZ symbol lazily.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
45 LLGlobalVariable* getVtblSymbol();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
46 /// Builds the __vtblZ initializer constant lazily.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
47 LLConstant* getVtblInit();
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
48
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
49 /// Create the __ClassZ symbol lazily.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
50 LLGlobalVariable* getClassInfoSymbol();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
51 /// Builds the __ClassZ initializer constant lazily.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
52 LLConstant* getClassInfoInit();
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
53
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
54 /// Create the __interfaceInfos symbol lazily.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
55 LLGlobalVariable* getInterfaceArraySymbol();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
56
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
57 /// Creates a StructInitializer constant.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
58 LLConstant* createStructInitializer(StructInitializer* si);
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
59
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
60 //////////////////////////////////////////////////////////////////////////
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
61 protected:
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
62 /// Static default initializer global.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
63 llvm::GlobalVariable* init;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
64 /// Static default initializer constant.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
65 LLConstant* constInit;
137
ce7b81fb957f [svn r141] fixed more problems with classinfo
lindquist
parents: 136
diff changeset
66
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
67 /// Vtbl global.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
68 llvm::GlobalVariable* vtbl;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
69 /// Vtbl initializer constant.
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 244
diff changeset
70 LLConstant* constVtbl;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
71
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
72 /// ClassInfo global.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
73 llvm::GlobalVariable* classInfo;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
74 /// ClassInfo initializer constant.
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 244
diff changeset
75 LLConstant* constClassInfo;
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
76
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
77 /// Map for mapping ClassDeclaration* to LLVM GlobalVariable.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
78 typedef std::map<ClassDeclaration*, llvm::GlobalVariable*> ClassGlobalMap;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
79
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
80 /// Map from of interface vtbls implemented by this class.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
81 ClassGlobalMap interfaceVtblMap;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
82
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
83 /// Interface info array global.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
84 /// Basically: static object.Interface[num_interfaces]
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
85 llvm::GlobalVariable* classInterfacesArray;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
86
1230
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
87 /// std::vector of BaseClass*
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
88 typedef std::vector<BaseClass*> BaseClassVector;
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
89
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
90 /// Array of all interface vtbl implementations - in order - implemented
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
91 /// by this class.
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
92 /// Corresponds to the Interface instances needed to be output.
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
93 BaseClassVector interfacesWithVtbls;
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
94
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
95 //////////////////////////////////////////////////////////////////////////
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
96
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
97 /// Create static default initializer for struct.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
98 LLConstant* createStructDefaultInitializer();
252
e3355ce5444b [svn r269] Fixed dwarf debug info for structs.
lindquist
parents: 244
diff changeset
99
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
100 /// Create static default initializer for class.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
101 LLConstant* createClassDefaultInitializer();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
102
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
103 /// Returns vtbl for interface implementation, creates it if not already built.
1230
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
104 llvm::GlobalVariable* getInterfaceVtbl(
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
105 BaseClass* b,
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
106 bool new_inst,
e67c85d6e680 Completed interface implementation. Hopefully that's it for now..
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
107 size_t interfaces_index);
435
74101be2a553 Added type param to DVarValue as DMD sometimes overrides the type of the VarDeclaration.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 307
diff changeset
108
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
109 /// Add base class data to initializer list.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
110 /// Also creates the IrField instance for each data field.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
111 void addBaseClassInits(
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
112 std::vector<llvm::Constant*>& constants,
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
113 ClassDeclaration* base,
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
114 size_t& offset,
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
115 size_t& field_index);
1149
5ebe8224988b Fixed problems introduced by previous commits that prevented Tango from compiling.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
116
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
117 // FIXME make this a member instead
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
118 friend LLConstant* DtoDefineClassInfo(ClassDeclaration* cd);
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
119
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
120 /// Create the Interface[] interfaces ClassInfo field initializer.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1155
diff changeset
121 LLConstant* getClassInfoInterfaces();
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
122 };
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
123
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
124 //////////////////////////////////////////////////////////////////////////////
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
125
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
126 #endif