annotate gen/structs.h @ 213:7816aafeea3c trunk

[svn r229] Updated the object.d implementation to the latest Tango. Fixed a bunch of the built-in typeinfos for arrays, they did not inherit TypeInfo_Array. Applied patch to tango/text/convert/Layout.d by fvbommel, closes #47 . Cleaned up some type code. Replaced uses of llvm::Type with LLType (a typedef), same for Value and Constant. Fixed a few cases where typeinfo for user structs could be emitted multiple times, seems to still be some cases of this :/
author lindquist
date Fri, 30 May 2008 19:32:04 +0200
parents 027b8d8b71ec
children 0806379a5eca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
88
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
1 #ifndef LLVMD_GEN_STRUCTS_H
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
2 #define LLVMD_GEN_STRUCTS_H
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
3
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
4 struct StructInitializer;
100
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
5
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 102
diff changeset
6 const LLType* DtoStructType(Type* t);
100
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
7
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 102
diff changeset
8 LLValue* DtoStructZeroInit(LLValue* v);
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 102
diff changeset
9 LLValue* DtoStructCopy(LLValue* dst, LLValue* src);
100
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
10
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 102
diff changeset
11 LLConstant* DtoConstStructInitializer(StructInitializer* si);
100
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
12
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
13 /**
102
027b8d8b71ec [svn r106] Turns out the last commit wasn't enough, now the D->LLVM process is even more split up.
lindquist
parents: 100
diff changeset
14 * Resolves the llvm type for a struct
027b8d8b71ec [svn r106] Turns out the last commit wasn't enough, now the D->LLVM process is even more split up.
lindquist
parents: 100
diff changeset
15 */
027b8d8b71ec [svn r106] Turns out the last commit wasn't enough, now the D->LLVM process is even more split up.
lindquist
parents: 100
diff changeset
16 void DtoResolveStruct(StructDeclaration* sd);
027b8d8b71ec [svn r106] Turns out the last commit wasn't enough, now the D->LLVM process is even more split up.
lindquist
parents: 100
diff changeset
17
027b8d8b71ec [svn r106] Turns out the last commit wasn't enough, now the D->LLVM process is even more split up.
lindquist
parents: 100
diff changeset
18 /**
100
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
19 * Provides the llvm declaration for a struct
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
20 */
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
21 void DtoDeclareStruct(StructDeclaration* sd);
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
22
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
23 /**
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
24 * Constructs the constant default initializer a struct
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
25 */
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
26 void DtoConstInitStruct(StructDeclaration* sd);
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
27
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
28 /**
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
29 * Provides the llvm definition for a struct
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
30 */
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
31 void DtoDefineStruct(StructDeclaration* sd);
5071469303d4 [svn r104] TONS OF FIXES.
lindquist
parents: 88
diff changeset
32
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 102
diff changeset
33 LLValue* DtoIndexStruct(LLValue* ptr, StructDeclaration* sd, Type* t, unsigned os, std::vector<unsigned>& idxs);
88
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
34
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
35 struct DUnionField
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
36 {
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
37 unsigned offset;
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
38 size_t size;
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 102
diff changeset
39 std::vector<const LLType*> types;
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 102
diff changeset
40 LLConstant* init;
88
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
41 size_t initsize;
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
42
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
43 DUnionField() {
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
44 offset = 0;
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
45 size = 0;
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
46 init = NULL;
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
47 initsize = 0;
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
48 }
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
49 };
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
50
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
51 struct DUnionIdx
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
52 {
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
53 unsigned idx,idxos;
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 102
diff changeset
54 LLConstant* c;
88
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
55
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
56 DUnionIdx()
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
57 : idx(0), c(0) {}
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 102
diff changeset
58 DUnionIdx(unsigned _idx, unsigned _idxos, LLConstant* _c)
88
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
59 : idx(_idx), idxos(_idxos), c(_c) {}
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
60 bool operator<(const DUnionIdx& i) const {
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
61 return (idx < i.idx) || (idx == i.idx && idxos < i.idxos);
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
62 }
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
63 };
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
64
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
65 class DUnion
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
66 {
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
67 std::vector<DUnionField> fields;
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
68 public:
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
69 DUnion();
213
7816aafeea3c [svn r229] Updated the object.d implementation to the latest Tango.
lindquist
parents: 102
diff changeset
70 LLConstant* getConst(std::vector<DUnionIdx>& in);
88
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
71 };
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
72
058d3925950e [svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
lindquist
parents:
diff changeset
73 #endif