Mercurial > projects > ldc
annotate dmd2/aggregate.h @ 1452:638d16625da2
LDC 2 compiles again.
author | Robert Clipsham <robert@octarineparrot.com> |
---|---|
date | Sat, 30 May 2009 17:23:32 +0100 |
parents | 340acf1535d0 |
children | f62347c22d81 |
rev | line source |
---|---|
1452
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
1 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
2 // Compiler implementation of the D programming language |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
3 // Copyright (c) 1999-2008 by Digital Mars |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
4 // All Rights Reserved |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
5 // written by Walter Bright |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
6 // http://www.digitalmars.com |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
7 // License for redistribution is by either the Artistic License |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
8 // in artistic.txt, or the GNU General Public License in gnu.txt. |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
9 // See the included readme.txt for details. |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
10 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
11 #ifndef DMD_AGGREGATE_H |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
12 #define DMD_AGGREGATE_H |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
13 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
14 #ifdef __DMC__ |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
15 #pragma once |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
16 #endif /* __DMC__ */ |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
17 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
18 #include "root.h" |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
19 #include "dsymbol.h" |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
20 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
21 #if IN_LLVM |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
22 #include <vector> |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
23 #include <set> |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
24 #include <map> |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
25 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
26 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
27 struct Identifier; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
28 struct Type; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
29 struct TypeFunction; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
30 struct Expression; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
31 struct FuncDeclaration; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
32 struct CtorDeclaration; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
33 struct DtorDeclaration; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
34 struct InvariantDeclaration; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
35 struct NewDeclaration; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
36 struct DeleteDeclaration; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
37 struct InterfaceDeclaration; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
38 struct ClassInfoDeclaration; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
39 struct VarDeclaration; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
40 struct dt_t; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
41 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
42 #if IN_LLVM |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
43 namespace llvm |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
44 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
45 class Type; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
46 class Value; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
47 class Constant; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
48 class ConstantStruct; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
49 class GlobalVariable; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
50 } |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
51 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
52 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
53 struct AggregateDeclaration : ScopeDsymbol |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
54 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
55 Type *type; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
56 unsigned storage_class; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
57 enum PROT protection; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
58 Type *handle; // 'this' type |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
59 unsigned structsize; // size of struct |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
60 unsigned alignsize; // size of struct for alignment purposes |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
61 unsigned structalign; // struct member alignment in effect |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
62 int hasUnions; // set if aggregate has overlapping fields |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
63 Array fields; // VarDeclaration fields |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
64 unsigned sizeok; // set when structsize contains valid data |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
65 // 0: no size |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
66 // 1: size is correct |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
67 // 2: cannot determine size; fwd referenced |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
68 int isdeprecated; // !=0 if deprecated |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
69 Scope *scope; // !=NULL means context to use |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
70 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
71 int isnested; // !=0 if is nested |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
72 VarDeclaration *vthis; // 'this' parameter if this aggregate is nested |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
73 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
74 // Special member functions |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
75 InvariantDeclaration *inv; // invariant |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
76 NewDeclaration *aggNew; // allocator |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
77 DeleteDeclaration *aggDelete; // deallocator |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
78 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
79 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
80 //CtorDeclaration *ctor; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
81 Dsymbol *ctor; // CtorDeclaration or TemplateDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
82 CtorDeclaration *defaultCtor; // default constructor |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
83 Dsymbol *aliasthis; // forward unresolved lookups to aliasthis |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
84 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
85 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
86 FuncDeclarations dtors; // Array of destructors |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
87 FuncDeclaration *dtor; // aggregate destructor |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
88 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
89 #ifdef IN_GCC |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
90 Array methods; // flat list of all methods for debug information |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
91 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
92 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
93 AggregateDeclaration(Loc loc, Identifier *id); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
94 void semantic2(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
95 void semantic3(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
96 void inlineScan(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
97 unsigned size(Loc loc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
98 static void alignmember(unsigned salign, unsigned size, unsigned *poffset); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
99 Type *getType(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
100 void addField(Scope *sc, VarDeclaration *v); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
101 int isDeprecated(); // is aggregate deprecated? |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
102 FuncDeclaration *buildDtor(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
103 int isNested(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
104 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
105 void emitComment(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
106 void toDocBuffer(OutBuffer *buf); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
107 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
108 // For access checking |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
109 virtual PROT getAccess(Dsymbol *smember); // determine access to smember |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
110 int isFriendOf(AggregateDeclaration *cd); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
111 int hasPrivateAccess(Dsymbol *smember); // does smember have private access to members of this class? |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
112 void accessCheck(Loc loc, Scope *sc, Dsymbol *smember); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
113 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
114 enum PROT prot(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
115 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
116 #if IN_DMD |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
117 // Back end |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
118 Symbol *stag; // tag symbol for debug data |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
119 Symbol *sinit; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
120 Symbol *toInitializer(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
121 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
122 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
123 AggregateDeclaration *isAggregateDeclaration() { return this; } |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
124 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
125 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
126 struct AnonymousAggregateDeclaration : AggregateDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
127 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
128 AnonymousAggregateDeclaration() |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
129 : AggregateDeclaration(0, NULL) |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
130 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
131 } |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
132 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
133 AnonymousAggregateDeclaration *isAnonymousAggregateDeclaration() { return this; } |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
134 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
135 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
136 struct StructDeclaration : AggregateDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
137 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
138 int zeroInit; // !=0 if initialize with 0 fill |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
139 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
140 int hasIdentityAssign; // !=0 if has identity opAssign |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
141 FuncDeclaration *cpctor; // generated copy-constructor, if any |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
142 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
143 FuncDeclarations postblits; // Array of postblit functions |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
144 FuncDeclaration *postblit; // aggregate postblit |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
145 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
146 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
147 StructDeclaration(Loc loc, Identifier *id); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
148 Dsymbol *syntaxCopy(Dsymbol *s); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
149 void semantic(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
150 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
151 char *mangle(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
152 const char *kind(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
153 int needOpAssign(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
154 FuncDeclaration *buildOpAssign(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
155 FuncDeclaration *buildPostBlit(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
156 FuncDeclaration *buildCpCtor(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
157 void toDocBuffer(OutBuffer *buf); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
158 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
159 PROT getAccess(Dsymbol *smember); // determine access to smember |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
160 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
161 #if IN_DMD |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
162 void toObjFile(int multiobj); // compile to .obj file |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
163 void toDt(dt_t **pdt); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
164 void toDebug(); // to symbolic debug info |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
165 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
166 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
167 StructDeclaration *isStructDeclaration() { return this; } |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
168 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
169 #if IN_LLVM |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
170 void codegen(Ir*); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
171 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
172 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
173 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
174 struct UnionDeclaration : StructDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
175 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
176 UnionDeclaration(Loc loc, Identifier *id); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
177 Dsymbol *syntaxCopy(Dsymbol *s); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
178 const char *kind(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
179 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
180 UnionDeclaration *isUnionDeclaration() { return this; } |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
181 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
182 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
183 // warning: two classes with the same base class share the same |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
184 // BaseClass instance. |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
185 struct BaseClass |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
186 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
187 Type *type; // (before semantic processing) |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
188 enum PROT protection; // protection for the base interface |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
189 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
190 ClassDeclaration *base; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
191 int offset; // 'this' pointer offset |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
192 Array vtbl; // for interfaces: Array of FuncDeclaration's |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
193 // making up the vtbl[] |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
194 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
195 int baseInterfaces_dim; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
196 BaseClass *baseInterfaces; // if BaseClass is an interface, these |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
197 // are a copy of the InterfaceDeclaration::interfaces |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
198 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
199 BaseClass(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
200 BaseClass(Type *type, enum PROT protection); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
201 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
202 int fillVtbl(ClassDeclaration *cd, Array *vtbl, int newinstance); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
203 void copyBaseInterfaces(BaseClasses *); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
204 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
205 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
206 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
207 #define CLASSINFO_SIZE (0x3C+16+4) // value of ClassInfo.size |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
208 #else |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
209 #define CLASSINFO_SIZE (0x3C+12+4) // value of ClassInfo.size |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
210 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
211 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
212 struct ClassDeclaration : AggregateDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
213 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
214 static ClassDeclaration *object; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
215 static ClassDeclaration *classinfo; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
216 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
217 ClassDeclaration *baseClass; // NULL only if this is Object |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
218 FuncDeclaration *staticCtor; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
219 FuncDeclaration *staticDtor; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
220 Array vtbl; // Array of FuncDeclaration's making up the vtbl[] |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
221 Array vtblFinal; // More FuncDeclaration's that aren't in vtbl[] |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
222 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
223 BaseClasses baseclasses; // Array of BaseClass's; first is super, |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
224 // rest are Interface's |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
225 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
226 int interfaces_dim; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
227 BaseClass **interfaces; // interfaces[interfaces_dim] for this class |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
228 // (does not include baseClass) |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
229 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
230 BaseClasses *vtblInterfaces; // array of base interfaces that have |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
231 // their own vtbl[] |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
232 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
233 ClassInfoDeclaration *vclassinfo; // the ClassInfo object for this ClassDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
234 int com; // !=0 if this is a COM class (meaning |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
235 // it derives from IUnknown) |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
236 int isauto; // !=0 if this is an auto class |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
237 int isabstract; // !=0 if abstract class |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
238 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
239 int inuse; // to prevent recursive attempts |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
240 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
241 ClassDeclaration(Loc loc, Identifier *id, BaseClasses *baseclasses); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
242 Dsymbol *syntaxCopy(Dsymbol *s); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
243 void semantic(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
244 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
245 int isBaseOf2(ClassDeclaration *cd); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
246 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
247 #define OFFSET_RUNTIME 0x76543210 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
248 virtual int isBaseOf(ClassDeclaration *cd, int *poffset); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
249 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
250 Dsymbol *search(Loc, Identifier *ident, int flags); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
251 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
252 int isFuncHidden(FuncDeclaration *fd); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
253 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
254 FuncDeclaration *findFunc(Identifier *ident, TypeFunction *tf); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
255 void interfaceSemantic(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
256 int isCOMclass(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
257 virtual int isCOMinterface(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
258 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
259 virtual int isCPPinterface(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
260 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
261 int isAbstract(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
262 virtual int vtblOffset(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
263 const char *kind(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
264 char *mangle(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
265 void toDocBuffer(OutBuffer *buf); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
266 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
267 PROT getAccess(Dsymbol *smember); // determine access to smember |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
268 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
269 void addLocalClass(ClassDeclarations *); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
270 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
271 #if IN_DMD |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
272 // Back end |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
273 void toObjFile(int multiobj); // compile to .obj file |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
274 void toDebug(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
275 unsigned baseVtblOffset(BaseClass *bc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
276 Symbol *toSymbol(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
277 Symbol *toVtblSymbol(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
278 void toDt(dt_t **pdt); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
279 void toDt2(dt_t **pdt, ClassDeclaration *cd); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
280 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
281 Symbol *vtblsym; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
282 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
283 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
284 ClassDeclaration *isClassDeclaration() { return (ClassDeclaration *)this; } |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
285 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
286 #if IN_LLVM |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
287 virtual void codegen(Ir*); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
288 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
289 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
290 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
291 struct InterfaceDeclaration : ClassDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
292 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
293 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
294 int cpp; // !=0 if this is a C++ interface |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
295 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
296 InterfaceDeclaration(Loc loc, Identifier *id, BaseClasses *baseclasses); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
297 Dsymbol *syntaxCopy(Dsymbol *s); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
298 void semantic(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
299 int isBaseOf(ClassDeclaration *cd, int *poffset); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
300 int isBaseOf(BaseClass *bc, int *poffset); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
301 const char *kind(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
302 int vtblOffset(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
303 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
304 int isCPPinterface(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
305 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
306 virtual int isCOMinterface(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
307 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
308 #if IN_DMD |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
309 void toObjFile(int multiobj); // compile to .obj file |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
310 Symbol *toSymbol(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
311 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
312 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
313 InterfaceDeclaration *isInterfaceDeclaration() { return this; } |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
314 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
315 #if IN_LLVM |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
316 void codegen(Ir*); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
317 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
318 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
319 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
320 #endif /* DMD_AGGREGATE_H */ |