Mercurial > projects > ldc
annotate dmd2/aggregate.h @ 1587:def7a1d494fd
Merge DMD 1.051
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Fri, 06 Nov 2009 23:58:01 +0100 |
parents | f62347c22d81 |
children |
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; } |
1487
f62347c22d81
Apply changes from r1482 to D2 frontend too. Completely untested, but ldc2
Frits van Bommel <fvbommel wxs.nl>
parents:
1452
diff
changeset
|
124 |
f62347c22d81
Apply changes from r1482 to D2 frontend too. Completely untested, but ldc2
Frits van Bommel <fvbommel wxs.nl>
parents:
1452
diff
changeset
|
125 #if IN_LLVM |
f62347c22d81
Apply changes from r1482 to D2 frontend too. Completely untested, but ldc2
Frits van Bommel <fvbommel wxs.nl>
parents:
1452
diff
changeset
|
126 // Aggregates that wouldn't have gotten semantic3'ed if we weren't inlining set this flag. |
f62347c22d81
Apply changes from r1482 to D2 frontend too. Completely untested, but ldc2
Frits van Bommel <fvbommel wxs.nl>
parents:
1452
diff
changeset
|
127 bool availableExternally; |
f62347c22d81
Apply changes from r1482 to D2 frontend too. Completely untested, but ldc2
Frits van Bommel <fvbommel wxs.nl>
parents:
1452
diff
changeset
|
128 #endif |
1452
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
129 }; |
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 struct AnonymousAggregateDeclaration : AggregateDeclaration |
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() |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
134 : AggregateDeclaration(0, NULL) |
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 } |
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 AnonymousAggregateDeclaration *isAnonymousAggregateDeclaration() { return this; } |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
139 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
140 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
141 struct StructDeclaration : AggregateDeclaration |
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 int zeroInit; // !=0 if initialize with 0 fill |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
144 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
145 int hasIdentityAssign; // !=0 if has identity opAssign |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
146 FuncDeclaration *cpctor; // generated copy-constructor, if any |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
147 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
148 FuncDeclarations postblits; // Array of postblit functions |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
149 FuncDeclaration *postblit; // aggregate postblit |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
150 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
151 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
152 StructDeclaration(Loc loc, Identifier *id); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
153 Dsymbol *syntaxCopy(Dsymbol *s); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
154 void semantic(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
155 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
156 char *mangle(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
157 const char *kind(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
158 int needOpAssign(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
159 FuncDeclaration *buildOpAssign(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
160 FuncDeclaration *buildPostBlit(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
161 FuncDeclaration *buildCpCtor(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
162 void toDocBuffer(OutBuffer *buf); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
163 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
164 PROT getAccess(Dsymbol *smember); // determine access to smember |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
165 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
166 #if IN_DMD |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
167 void toObjFile(int multiobj); // compile to .obj file |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
168 void toDt(dt_t **pdt); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
169 void toDebug(); // to symbolic debug info |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
170 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
171 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
172 StructDeclaration *isStructDeclaration() { return this; } |
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 #if IN_LLVM |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
175 void codegen(Ir*); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
176 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
177 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
178 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
179 struct UnionDeclaration : StructDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
180 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
181 UnionDeclaration(Loc loc, Identifier *id); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
182 Dsymbol *syntaxCopy(Dsymbol *s); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
183 const char *kind(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
184 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
185 UnionDeclaration *isUnionDeclaration() { return this; } |
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 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
188 // 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
|
189 // BaseClass instance. |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
190 struct BaseClass |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
191 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
192 Type *type; // (before semantic processing) |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
193 enum PROT protection; // protection for the base interface |
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 ClassDeclaration *base; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
196 int offset; // 'this' pointer offset |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
197 Array vtbl; // for interfaces: Array of FuncDeclaration's |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
198 // making up the vtbl[] |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
199 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
200 int baseInterfaces_dim; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
201 BaseClass *baseInterfaces; // if BaseClass is an interface, these |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
202 // are a copy of the InterfaceDeclaration::interfaces |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
203 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
204 BaseClass(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
205 BaseClass(Type *type, enum PROT protection); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
206 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
207 int fillVtbl(ClassDeclaration *cd, Array *vtbl, int newinstance); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
208 void copyBaseInterfaces(BaseClasses *); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
209 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
210 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
211 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
212 #define CLASSINFO_SIZE (0x3C+16+4) // value of ClassInfo.size |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
213 #else |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
214 #define CLASSINFO_SIZE (0x3C+12+4) // value of ClassInfo.size |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
215 #endif |
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 struct ClassDeclaration : AggregateDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
218 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
219 static ClassDeclaration *object; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
220 static ClassDeclaration *classinfo; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
221 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
222 ClassDeclaration *baseClass; // NULL only if this is Object |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
223 FuncDeclaration *staticCtor; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
224 FuncDeclaration *staticDtor; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
225 Array vtbl; // Array of FuncDeclaration's making up the vtbl[] |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
226 Array vtblFinal; // More FuncDeclaration's that aren't in vtbl[] |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
227 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
228 BaseClasses baseclasses; // Array of BaseClass's; first is super, |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
229 // rest are Interface's |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
230 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
231 int interfaces_dim; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
232 BaseClass **interfaces; // interfaces[interfaces_dim] for this class |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
233 // (does not include baseClass) |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
234 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
235 BaseClasses *vtblInterfaces; // array of base interfaces that have |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
236 // their own vtbl[] |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
237 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
238 ClassInfoDeclaration *vclassinfo; // the ClassInfo object for this ClassDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
239 int com; // !=0 if this is a COM class (meaning |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
240 // it derives from IUnknown) |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
241 int isauto; // !=0 if this is an auto class |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
242 int isabstract; // !=0 if abstract class |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
243 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
244 int inuse; // to prevent recursive attempts |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
245 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
246 ClassDeclaration(Loc loc, Identifier *id, BaseClasses *baseclasses); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
247 Dsymbol *syntaxCopy(Dsymbol *s); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
248 void semantic(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
249 void toCBuffer(OutBuffer *buf, HdrGenState *hgs); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
250 int isBaseOf2(ClassDeclaration *cd); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
251 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
252 #define OFFSET_RUNTIME 0x76543210 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
253 virtual int isBaseOf(ClassDeclaration *cd, int *poffset); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
254 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
255 Dsymbol *search(Loc, Identifier *ident, int flags); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
256 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
257 int isFuncHidden(FuncDeclaration *fd); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
258 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
259 FuncDeclaration *findFunc(Identifier *ident, TypeFunction *tf); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
260 void interfaceSemantic(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
261 int isCOMclass(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
262 virtual int isCOMinterface(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
263 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
264 virtual int isCPPinterface(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
265 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
266 int isAbstract(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
267 virtual int vtblOffset(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
268 const char *kind(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
269 char *mangle(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
270 void toDocBuffer(OutBuffer *buf); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
271 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
272 PROT getAccess(Dsymbol *smember); // determine access to smember |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
273 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
274 void addLocalClass(ClassDeclarations *); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
275 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
276 #if IN_DMD |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
277 // Back end |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
278 void toObjFile(int multiobj); // compile to .obj file |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
279 void toDebug(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
280 unsigned baseVtblOffset(BaseClass *bc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
281 Symbol *toSymbol(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
282 Symbol *toVtblSymbol(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
283 void toDt(dt_t **pdt); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
284 void toDt2(dt_t **pdt, ClassDeclaration *cd); |
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 Symbol *vtblsym; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
287 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
288 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
289 ClassDeclaration *isClassDeclaration() { return (ClassDeclaration *)this; } |
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 #if IN_LLVM |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
292 virtual void codegen(Ir*); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
293 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
294 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
295 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
296 struct InterfaceDeclaration : ClassDeclaration |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
297 { |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
298 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
299 int cpp; // !=0 if this is a C++ interface |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
300 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
301 InterfaceDeclaration(Loc loc, Identifier *id, BaseClasses *baseclasses); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
302 Dsymbol *syntaxCopy(Dsymbol *s); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
303 void semantic(Scope *sc); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
304 int isBaseOf(ClassDeclaration *cd, int *poffset); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
305 int isBaseOf(BaseClass *bc, int *poffset); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
306 const char *kind(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
307 int vtblOffset(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
308 #if DMDV2 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
309 int isCPPinterface(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
310 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
311 virtual int isCOMinterface(); |
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 #if IN_DMD |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
314 void toObjFile(int multiobj); // compile to .obj file |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
315 Symbol *toSymbol(); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
316 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
317 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
318 InterfaceDeclaration *isInterfaceDeclaration() { return this; } |
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 #if IN_LLVM |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
321 void codegen(Ir*); |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
322 #endif |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
323 }; |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
324 |
638d16625da2
LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
797
diff
changeset
|
325 #endif /* DMD_AGGREGATE_H */ |