annotate dmd/declaration.h @ 1650:40bd4a0d4870

Update to work with LLVM 2.7. Removed use of dyn_cast, llvm no compiles without exceptions and rtti by default. We do need exceptions for the libconfig stuff, but rtti isn't necessary (anymore). Debug info needs to be rewritten, as in LLVM 2.7 the format has completely changed. To have something to look at while rewriting, the old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means that you have to define this to compile at the moment. Updated tango 0.99.9 patch to include updated EH runtime code, which is needed for LLVM 2.7 as well.
author Tomas Lindquist Olsen
date Wed, 19 May 2010 12:42:32 +0200
parents 44b145be2ef5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
2 // Compiler implementation of the D programming language
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
3 // Copyright (c) 1999-2009 by Digital Mars
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
4 // All Rights Reserved
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
5 // written by Walter Bright
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
6 // http://www.digitalmars.com
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
7 // License for redistribution is by either the Artistic License
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
9 // See the included readme.txt for details.
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
10
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
11 #ifndef DMD_DECLARATION_H
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
12 #define DMD_DECLARATION_H
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
13
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
14 #ifdef __DMC__
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
15 #pragma once
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
16 #endif /* __DMC__ */
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
17
1630
44b145be2ef5 Merge dmd 1.056.
Robert Clipsham <robert@octarineparrot.com>
parents: 1621
diff changeset
18 #if IN_LLVM
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
19 #include <set>
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
20 #include <map>
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
21 #include <string>
1630
44b145be2ef5 Merge dmd 1.056.
Robert Clipsham <robert@octarineparrot.com>
parents: 1621
diff changeset
22 #endif
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
23
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
24 #include "dsymbol.h"
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
25 #include "lexer.h"
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
26 #include "mtype.h"
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
27
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
28 struct Expression;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
29 struct Statement;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
30 struct LabelDsymbol;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
31 struct LabelStatement;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
32 struct Initializer;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
33 struct Module;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
34 struct InlineScanState;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
35 struct ForeachStatement;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
36 struct FuncDeclaration;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
37 struct ExpInitializer;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
38 struct StructDeclaration;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
39 struct TupleType;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
40 struct InterState;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
41 struct IRState;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
42 struct AnonDeclaration;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
43
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
44 enum PROT;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
45 enum LINK;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
46 enum TOK;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
47 enum MATCH;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
48
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
49 enum STC
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
50 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
51 STCundefined = 0,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
52 STCstatic = 1,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
53 STCextern = 2,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
54 STCconst = 4,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
55 STCfinal = 8,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
56 STCabstract = 0x10,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
57 STCparameter = 0x20,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
58 STCfield = 0x40,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
59 STCoverride = 0x80,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
60 STCauto = 0x100,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
61 STCsynchronized = 0x200,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
62 STCdeprecated = 0x400,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
63 STCin = 0x800, // in parameter
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
64 STCout = 0x1000, // out parameter
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
65 STClazy = 0x2000, // lazy parameter
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
66 STCforeach = 0x4000, // variable for foreach loop
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
67 STCcomdat = 0x8000, // should go into COMDAT record
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
68 STCvariadic = 0x10000, // variadic function argument
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
69 STCctorinit = 0x20000, // can only be set inside constructor
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
70 STCtemplateparameter = 0x40000, // template parameter
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
71 STCscope = 0x80000, // template parameter
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
72 STCimmutable = 0x100000,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
73 STCref = 0x200000,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
74 STCinit = 0x400000, // has explicit initializer
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
75 STCmanifest = 0x800000, // manifest constant
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
76 STCnodtor = 0x1000000, // don't run destructor
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
77 STCnothrow = 0x2000000, // never throws exceptions
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
78 STCpure = 0x4000000, // pure function
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
79 STCtls = 0x8000000, // thread local
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
80 STCalias = 0x10000000, // alias parameter
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
81 STCshared = 0x20000000, // accessible from multiple threads
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
82 STCgshared = 0x40000000, // accessible from multiple threads
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
83 // but not typed as "shared"
1621
fb2e6707ad17 Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't...
Leandro Lucarella <llucax@gmail.com>
parents: 1619
diff changeset
84 STCwild = 0x80000000, // for "wild" type constructor
fb2e6707ad17 Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't...
Leandro Lucarella <llucax@gmail.com>
parents: 1619
diff changeset
85 STC_TYPECTOR = (STCconst | STCimmutable | STCshared | STCwild),
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
86 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
87
1621
fb2e6707ad17 Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't...
Leandro Lucarella <llucax@gmail.com>
parents: 1619
diff changeset
88 #define STCproperty 0x100000000LL
fb2e6707ad17 Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't...
Leandro Lucarella <llucax@gmail.com>
parents: 1619
diff changeset
89 #define STCsafe 0x200000000LL
fb2e6707ad17 Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't...
Leandro Lucarella <llucax@gmail.com>
parents: 1619
diff changeset
90 #define STCtrusted 0x400000000LL
fb2e6707ad17 Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't...
Leandro Lucarella <llucax@gmail.com>
parents: 1619
diff changeset
91 #define STCsystem 0x800000000LL
fb2e6707ad17 Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't...
Leandro Lucarella <llucax@gmail.com>
parents: 1619
diff changeset
92 #define STCctfe 0x1000000000LL // can be used in CTFE, even if it is static
fb2e6707ad17 Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't...
Leandro Lucarella <llucax@gmail.com>
parents: 1619
diff changeset
93
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
94 struct Match
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
95 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
96 int count; // number of matches found
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
97 MATCH last; // match level of lastf
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
98 FuncDeclaration *lastf; // last matching function we found
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
99 FuncDeclaration *nextf; // current matching function
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
100 FuncDeclaration *anyf; // pick a func, any func, to use for error recovery
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
101 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
102
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
103 void overloadResolveX(Match *m, FuncDeclaration *f,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
104 Expression *ethis, Expressions *arguments, Module *from);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
105 int overloadApply(Module* from, FuncDeclaration *fstart,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
106 int (*fp)(void *, FuncDeclaration *),
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
107 void *param);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
108
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
109 /**************************************************************/
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
110
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
111 struct Declaration : Dsymbol
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
112 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
113 Type *type;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
114 Type *originalType; // before semantic analysis
1602
a413ae7329bf Merge DMD r243: some harmonization with D2 dmd
Leandro Lucarella <llucax@gmail.com>
parents: 1587
diff changeset
115 StorageClass storage_class;
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
116 enum PROT protection;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
117 enum LINK linkage;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
118 int inuse; // used to detect cycles
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
119
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
120 Declaration(Identifier *id);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
121 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
122 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
123 unsigned size(Loc loc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
124 void checkModify(Loc loc, Scope *sc, Type *t);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
125
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
126 void emitComment(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
127 void toJsonBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
128 void toDocBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
129
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
130 char *mangle();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
131 int isStatic() { return storage_class & STCstatic; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
132 virtual int isStaticConstructor();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
133 virtual int isStaticDestructor();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
134 virtual int isDelete();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
135 virtual int isDataseg();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
136 virtual int isThreadlocal();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
137 virtual int isCodeseg();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
138 int isCtorinit() { return storage_class & STCctorinit; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
139 int isFinal() { return storage_class & STCfinal; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
140 int isAbstract() { return storage_class & STCabstract; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
141 int isConst() { return storage_class & STCconst; }
1619
c61782a76dff Merge DMD r304: refactor invariant => immutable
Leandro Lucarella <llucax@gmail.com>
parents: 1617
diff changeset
142 int isImmutable() { return storage_class & STCimmutable; }
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
143 int isAuto() { return storage_class & STCauto; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
144 int isScope() { return storage_class & STCscope; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
145 int isSynchronized() { return storage_class & STCsynchronized; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
146 int isParameter() { return storage_class & STCparameter; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
147 int isDeprecated() { return storage_class & STCdeprecated; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
148 int isOverride() { return storage_class & STCoverride; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
149
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
150 virtual int isSameAsInitializer() { return isConst(); };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
151
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
152 int isIn() { return storage_class & STCin; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
153 int isOut() { return storage_class & STCout; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
154 int isRef() { return storage_class & STCref; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
155
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
156 enum PROT prot();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
157
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
158 Declaration *isDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
159
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
160 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
161 /// Codegen traversal
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
162 virtual void codegen(Ir* ir);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
163 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
164 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
165
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
166 /**************************************************************/
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
167
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
168 struct TupleDeclaration : Declaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
169 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
170 Objects *objects;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
171 int isexp; // 1: expression tuple
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
172
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
173 TypeTuple *tupletype; // !=NULL if this is a type tuple
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
174
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
175 TupleDeclaration(Loc loc, Identifier *ident, Objects *objects);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
176 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
177 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
178 Type *getType();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
179 int needThis();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
180
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
181 TupleDeclaration *isTupleDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
182
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
183 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
184 /// Codegen traversal
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
185 void codegen(Ir* ir);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
186 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
187 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
188
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
189 /**************************************************************/
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
190
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
191 struct TypedefDeclaration : Declaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
192 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
193 Type *basetype;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
194 Initializer *init;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
195 int sem; // 0: semantic() has not been run
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
196 // 1: semantic() is in progress
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
197 // 2: semantic() has been run
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
198 // 3: semantic2() has been run
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
199
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
200 TypedefDeclaration(Loc loc, Identifier *ident, Type *basetype, Initializer *init);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
201 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
202 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
203 void semantic2(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
204 char *mangle();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
205 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
206 Type *getType();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
207 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
208 #ifdef _DH
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
209 Type *htype;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
210 Type *hbasetype;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
211 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
212
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
213 void toDocBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
214
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
215 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
216 void toObjFile(int multiobj); // compile to .obj file
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
217 void toDebug();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
218 int cvMember(unsigned char *p);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
219 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
220
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
221 TypedefDeclaration *isTypedefDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
222
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
223 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
224 Symbol *sinit;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
225 Symbol *toInitializer();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
226 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
227
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
228 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
229 /// Codegen traversal
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
230 void codegen(Ir* ir);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
231 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
232 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
233
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
234 /**************************************************************/
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
235
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
236 struct AliasDeclaration : Declaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
237 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
238 Dsymbol *aliassym;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
239 Dsymbol *overnext; // next in overload list
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
240 int inSemantic;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
241 PROT importprot; // if generated by import, store its protection
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
242
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
243 AliasDeclaration(Loc loc, Identifier *ident, Type *type);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
244 AliasDeclaration(Loc loc, Identifier *ident, Dsymbol *s);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
245 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
246 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
247 int overloadInsert(Dsymbol *s);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
248 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
249 Type *getType();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
250 Dsymbol *toAlias();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
251 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
252 #ifdef _DH
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
253 Type *htype;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
254 Dsymbol *haliassym;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
255 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
256
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
257 void toDocBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
258
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
259 AliasDeclaration *isAliasDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
260 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
261
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
262 /**************************************************************/
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
263
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
264 struct VarDeclaration : Declaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
265 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
266 Initializer *init;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
267 unsigned offset;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
268 int noscope; // no scope semantics
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
269 #if DMDV2
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
270 FuncDeclarations nestedrefs; // referenced by these lexically nested functions
1602
a413ae7329bf Merge DMD r243: some harmonization with D2 dmd
Leandro Lucarella <llucax@gmail.com>
parents: 1587
diff changeset
271 bool isargptr; // if parameter that _argptr points to
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
272 #else
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
273 int nestedref; // referenced by a lexically nested function
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
274 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
275 int ctorinit; // it has been initialized in a ctor
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
276 int onstack; // 1: it has been allocated on the stack
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
277 // 2: on stack, run destructor anyway
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
278 int canassign; // it can be assigned to
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
279 Dsymbol *aliassym; // if redone as alias to another symbol
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
280 Expression *value; // when interpreting, this is the value
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
281 // (NULL if value not determinable)
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
282 #if DMDV2
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
283 VarDeclaration *rundtor; // if !NULL, rundtor is tested at runtime to see
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
284 // if the destructor should be run. Used to prevent
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
285 // dtor calls on postblitted vars
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
286 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
287
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
288 VarDeclaration(Loc loc, Type *t, Identifier *id, Initializer *init);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
289 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
290 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
291 void semantic2(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
292 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
293 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
294 #ifdef _DH
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
295 Type *htype;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
296 Initializer *hinit;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
297 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
298 int needThis();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
299 int isImportedSymbol();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
300 int isDataseg();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
301 int isThreadlocal();
1621
fb2e6707ad17 Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't...
Leandro Lucarella <llucax@gmail.com>
parents: 1619
diff changeset
302 int isCTFE();
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
303 int hasPointers();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
304 #if DMDV2
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
305 int canTakeAddressOf();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
306 int needsAutoDtor();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
307 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
308 Expression *callScopeDtor(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
309 ExpInitializer *getExpInitializer();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
310 Expression *getConstInitializer();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
311 void checkCtorConstInit();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
312 void checkNestedReference(Scope *sc, Loc loc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
313 Dsymbol *toAlias();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
314
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
315 virtual int isSameAsInitializer();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
316
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
317 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
318 void toObjFile(int multiobj); // compile to .obj file
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
319 Symbol *toSymbol();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
320 int cvMember(unsigned char *p);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
321 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
322
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
323 // Eliminate need for dynamic_cast
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
324 VarDeclaration *isVarDeclaration() { return (VarDeclaration *)this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
325
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
326 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
327 /// Codegen traversal
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
328 virtual void codegen(Ir* ir);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
329
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
330 /// Index into parent aggregate.
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
331 /// Set during type generation.
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
332 unsigned aggrIndex;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
333
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
334 /// Variables that wouldn't have gotten semantic3'ed if we weren't inlining set this flag.
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
335 bool availableExternally;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
336 /// Override added to set above flag.
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
337 void semantic3(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
338
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
339 // FIXME: we're not using these anymore!
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
340 AnonDeclaration* anonDecl;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
341 unsigned offset2;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
342
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
343 /// This var is used by a naked function.
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
344 bool nakedUse;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
345 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
346 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
347
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
348 /**************************************************************/
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
349
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
350 // LDC uses this to denote static struct initializers
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
351
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
352 struct StaticStructInitDeclaration : Declaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
353 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
354 StructDeclaration *dsym;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
355
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
356 StaticStructInitDeclaration(Loc loc, StructDeclaration *dsym);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
357
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
358 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
359 Symbol *toSymbol();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
360 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
361
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
362 // Eliminate need for dynamic_cast
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
363 StaticStructInitDeclaration *isStaticStructInitDeclaration() { return (StaticStructInitDeclaration *)this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
364 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
365
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
366 struct ClassInfoDeclaration : VarDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
367 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
368 ClassDeclaration *cd;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
369
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
370 ClassInfoDeclaration(ClassDeclaration *cd);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
371 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
372 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
373
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
374 void emitComment(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
375 void toJsonBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
376
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
377 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
378 Symbol *toSymbol();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
379 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
380
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
381 ClassInfoDeclaration* isClassInfoDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
382 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
383
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
384 struct ModuleInfoDeclaration : VarDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
385 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
386 Module *mod;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
387
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
388 ModuleInfoDeclaration(Module *mod);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
389 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
390 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
391
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
392 void emitComment(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
393 void toJsonBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
394
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
395 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
396 Symbol *toSymbol();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
397 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
398 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
399
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
400 struct TypeInfoDeclaration : VarDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
401 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
402 Type *tinfo;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
403
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
404 TypeInfoDeclaration(Type *tinfo, int internal);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
405 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
406 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
407
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
408 void emitComment(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
409 void toJsonBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
410
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
411 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
412 void toObjFile(int multiobj); // compile to .obj file
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
413 Symbol *toSymbol();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
414 virtual void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
415 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
416
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
417 virtual TypeInfoDeclaration* isTypeInfoDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
418
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
419 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
420 /// Codegen traversal
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
421 void codegen(Ir* ir);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
422 virtual void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
423 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
424 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
425
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
426 struct TypeInfoStructDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
427 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
428 TypeInfoStructDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
429
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
430 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
431 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
432 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
433
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
434 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
435 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
436 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
437 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
438
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
439 struct TypeInfoClassDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
440 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
441 TypeInfoClassDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
442
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
443 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
444 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
445 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
446
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
447 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
448 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
449 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
450 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
451
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
452 struct TypeInfoInterfaceDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
453 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
454 TypeInfoInterfaceDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
455
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
456 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
457 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
458 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
459
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
460 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
461 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
462 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
463 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
464
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
465 struct TypeInfoTypedefDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
466 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
467 TypeInfoTypedefDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
468
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
469 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
470 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
471 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
472
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
473 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
474 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
475 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
476 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
477
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
478 struct TypeInfoPointerDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
479 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
480 TypeInfoPointerDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
481
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
482 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
483 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
484 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
485
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
486 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
487 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
488 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
489 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
490
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
491 struct TypeInfoArrayDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
492 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
493 TypeInfoArrayDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
494
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
495 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
496 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
497 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
498
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
499 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
500 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
501 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
502 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
503
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
504 struct TypeInfoStaticArrayDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
505 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
506 TypeInfoStaticArrayDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
507
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
508 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
509 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
510 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
511
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
512 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
513 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
514 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
515 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
516
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
517 struct TypeInfoAssociativeArrayDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
518 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
519 TypeInfoAssociativeArrayDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
520
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
521 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
522 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
523 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
524
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
525 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
526 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
527 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
528 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
529
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
530 struct TypeInfoEnumDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
531 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
532 TypeInfoEnumDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
533
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
534 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
535 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
536 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
537
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
538 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
539 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
540 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
541 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
542
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
543 struct TypeInfoFunctionDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
544 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
545 TypeInfoFunctionDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
546
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
547 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
548 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
549 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
550
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
551 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
552 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
553 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
554 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
555
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
556 struct TypeInfoDelegateDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
557 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
558 TypeInfoDelegateDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
559
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
560 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
561 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
562 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
563
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
564 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
565 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
566 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
567 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
568
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
569 struct TypeInfoTupleDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
570 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
571 TypeInfoTupleDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
572
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
573 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
574 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
575 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
576
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
577 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
578 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
579 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
580 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
581
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
582 #if DMDV2
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
583 struct TypeInfoConstDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
584 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
585 TypeInfoConstDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
586
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
587 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
588 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
589 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
590
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
591 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
592 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
593 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
594 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
595
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
596 struct TypeInfoInvariantDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
597 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
598 TypeInfoInvariantDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
599
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
600 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
601 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
602 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
603
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
604 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
605 void llvmDefine();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
606 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
607 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
608
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
609 struct TypeInfoSharedDeclaration : TypeInfoDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
610 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
611 TypeInfoSharedDeclaration(Type *tinfo);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
612
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
613 void toDt(dt_t **pdt);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
614 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
615 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
616
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
617 /**************************************************************/
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
618
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
619 struct ThisDeclaration : VarDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
620 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
621 ThisDeclaration(Loc loc, Type *t);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
622 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
623 ThisDeclaration *isThisDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
624 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
625
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
626 enum ILS
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
627 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
628 ILSuninitialized, // not computed yet
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
629 ILSno, // cannot inline
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
630 ILSyes, // can inline
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
631 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
632
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
633 /**************************************************************/
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
634 #if DMDV2
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
635
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
636 enum BUILTIN
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
637 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
638 BUILTINunknown = -1, // not known if this is a builtin
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
639 BUILTINnot, // this is not a builtin
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
640 BUILTINsin, // std.math.sin
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
641 BUILTINcos, // std.math.cos
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
642 BUILTINtan, // std.math.tan
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
643 BUILTINsqrt, // std.math.sqrt
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
644 BUILTINfabs, // std.math.fabs
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
645 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
646
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
647 Expression *eval_builtin(enum BUILTIN builtin, Expressions *arguments);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
648
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
649 #else
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
650 enum BUILTIN { };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
651 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
652
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
653 struct FuncDeclaration : Declaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
654 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
655 Array *fthrows; // Array of Type's of exceptions (not used)
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
656 Statement *frequire;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
657 Statement *fensure;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
658 Statement *fbody;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
659
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
660 FuncDeclarations foverrides; // functions this function overrides
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
661 FuncDeclaration *fdrequire; // function that does the in contract
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
662 FuncDeclaration *fdensure; // function that does the out contract
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
663
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
664 Identifier *outId; // identifier for out statement
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
665 VarDeclaration *vresult; // variable corresponding to outId
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
666 LabelDsymbol *returnLabel; // where the return goes
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
667
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
668 DsymbolTable *localsymtab; // used to prevent symbols in different
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
669 // scopes from having the same name
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
670 VarDeclaration *vthis; // 'this' parameter (member and nested)
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
671 VarDeclaration *v_arguments; // '_arguments' parameter
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
672 #if IN_GCC
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
673 VarDeclaration *v_argptr; // '_argptr' variable
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
674 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
675 Dsymbols *parameters; // Array of VarDeclaration's for parameters
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
676 DsymbolTable *labtab; // statement label symbol table
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
677 Declaration *overnext; // next in overload list
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
678 Loc endloc; // location of closing curly bracket
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
679 int vtblIndex; // for member functions, index into vtbl[]
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
680 int naked; // !=0 if naked
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
681 int inlineAsm; // !=0 if has inline assembler
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
682 ILS inlineStatus;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
683 int inlineNest; // !=0 if nested inline
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
684 int cantInterpret; // !=0 if cannot interpret function
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
685 int semanticRun; // 1 semantic() run
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
686 // 2 semantic2() run
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
687 // 3 semantic3() started
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
688 // 4 semantic3() done
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
689 // 5 toObjFile() run
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
690 // this function's frame ptr
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
691 ForeachStatement *fes; // if foreach body, this is the foreach
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
692 int introducing; // !=0 if 'introducing' function
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
693 Type *tintro; // if !=NULL, then this is the type
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
694 // of the 'introducing' function
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
695 // this one is overriding
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
696 int inferRetType; // !=0 if return type is to be inferred
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
697
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
698 // Things that should really go into Scope
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
699 int hasReturnExp; // 1 if there's a return exp; statement
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
700 // 2 if there's a throw statement
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
701 // 4 if there's an assert(0)
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
702 // 8 if there's inline asm
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
703
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
704 // Support for NRVO (named return value optimization)
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
705 int nrvo_can; // !=0 means we can do it
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
706 VarDeclaration *nrvo_var; // variable to replace with shidden
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
707 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
708 Symbol *shidden; // hidden pointer passed to function
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
709 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
710
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
711 #if DMDV2
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
712 enum BUILTIN builtin; // set if this is a known, builtin
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
713 // function we can evaluate at compile
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
714 // time
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
715
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
716 int tookAddressOf; // set if someone took the address of
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
717 // this function
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
718 Dsymbols closureVars; // local variables in this function
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
719 // which are referenced by nested
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
720 // functions
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
721 #else
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
722 int nestedFrameRef; // !=0 if nested variables referenced
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
723 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
724
1602
a413ae7329bf Merge DMD r243: some harmonization with D2 dmd
Leandro Lucarella <llucax@gmail.com>
parents: 1587
diff changeset
725 FuncDeclaration(Loc loc, Loc endloc, Identifier *id, StorageClass storage_class, Type *type);
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
726 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
727 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
728 void semantic2(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
729 void semantic3(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
730 // called from semantic3
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
731 void varArgs(Scope *sc, TypeFunction*, VarDeclaration *&, VarDeclaration *&);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
732
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
733 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
734 void bodyToCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
735 int overrides(FuncDeclaration *fd);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
736 int findVtblIndex(Array *vtbl, int dim);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
737 int overloadInsert(Dsymbol *s);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
738 FuncDeclaration *overloadExactMatch(Type *t, Module* from);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
739 FuncDeclaration *overloadResolve(Loc loc, Expression *ethis, Expressions *arguments, Module *from, int flags = 0);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
740 MATCH leastAsSpecialized(FuncDeclaration *g);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
741 LabelDsymbol *searchLabel(Identifier *ident);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
742 AggregateDeclaration *isThis();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
743 AggregateDeclaration *isMember2();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
744 int getLevel(Loc loc, FuncDeclaration *fd); // lexical nesting level difference
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
745 void appendExp(Expression *e);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
746 void appendState(Statement *s);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
747 char *mangle();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
748 const char *toPrettyChars();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
749 int isMain();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
750 int isWinMain();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
751 int isDllMain();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
752 enum BUILTIN isBuiltin();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
753 int isExport();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
754 int isImportedSymbol();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
755 int isAbstract();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
756 int isCodeseg();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
757 int isOverloadable();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
758 int isPure();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
759 virtual int isNested();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
760 int needThis();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
761 virtual int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
762 virtual int isFinal();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
763 virtual int addPreInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
764 virtual int addPostInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
765 Expression *interpret(InterState *istate, Expressions *arguments, Expression *thisexp = NULL);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
766 void inlineScan();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
767 int canInline(int hasthis, int hdrscan = 0);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
768 Expression *doInline(InlineScanState *iss, Expression *ethis, Array *arguments);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
769 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
770 void toDocBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
771 FuncDeclaration *isUnique();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
772 int needsClosure();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
773 Statement *mergeFrequire(Statement *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
774 Statement *mergeFensure(Statement *);
1617
6820110de311 Merge DMD r301: a little refactor and harmonize
Leandro Lucarella <llucax@gmail.com>
parents: 1607
diff changeset
775 Parameters *getParameters(int *pvarargs);
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
776
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
777 // LDC: give argument types to runtime functions
1607
207a8a438dea Merge DMD r253: refactor: Argument => Parameter
Leandro Lucarella <llucax@gmail.com>
parents: 1602
diff changeset
778 static FuncDeclaration *genCfunc(Parameters *args, Type *treturn, const char *name);
207a8a438dea Merge DMD r253: refactor: Argument => Parameter
Leandro Lucarella <llucax@gmail.com>
parents: 1602
diff changeset
779 static FuncDeclaration *genCfunc(Parameters *args, Type *treturn, Identifier *id);
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
780
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
781 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
782 Symbol *toSymbol();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
783 Symbol *toThunkSymbol(int offset); // thunk version
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
784 void toObjFile(int multiobj); // compile to .obj file
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
785 int cvMember(unsigned char *p);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
786 void buildClosure(IRState *irs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
787 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
788
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
789 FuncDeclaration *isFuncDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
790
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
791 #if IN_LLVM
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
792 // LDC stuff
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
793
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
794 /// Codegen traversal
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
795 void codegen(Ir* ir);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
796
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
797 // vars declared in this function that nested funcs reference
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
798 // is this is not empty, nestedFrameRef is set and these VarDecls
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
799 // probably have nestedref set too, see VarDeclaration::checkNestedReference
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
800 std::set<VarDeclaration*> nestedVars;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
801
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
802 std::string intrinsicName;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
803
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
804 bool isIntrinsic();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
805 bool isVaIntrinsic();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
806
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
807 // we keep our own table of label statements as LabelDsymbolS
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
808 // don't always carry their corresponding statement along ...
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
809 typedef std::map<const char*, LabelStatement*> LabelMap;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
810 LabelMap labmap;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
811
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
812 // if this is an array operation it gets a little special attention
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
813 bool isArrayOp;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
814
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
815 // Functions that wouldn't have gotten semantic3'ed if we weren't inlining set this flag.
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
816 bool availableExternally;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
817
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
818 // true if overridden with the pragma(allow_inline); stmt
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
819 bool allowInlining;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
820 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
821 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
822
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
823 #if DMDV2
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
824 FuncDeclaration *resolveFuncCall(Scope *sc, Loc loc, Dsymbol *s,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
825 Objects *tiargs,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
826 Expression *ethis,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
827 Expressions *arguments,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
828 int flags);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
829 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
830
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
831 struct FuncAliasDeclaration : FuncDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
832 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
833 FuncDeclaration *funcalias;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
834 PROT importprot; // if generated by import, store its protection
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
835
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
836 FuncAliasDeclaration(FuncDeclaration *funcalias);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
837
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
838 FuncAliasDeclaration *isFuncAliasDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
839 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
840 #if IN_DMD
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
841 Symbol *toSymbol();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
842 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
843 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
844
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
845 struct FuncLiteralDeclaration : FuncDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
846 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
847 enum TOK tok; // TOKfunction or TOKdelegate
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
848
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
849 FuncLiteralDeclaration(Loc loc, Loc endloc, Type *type, enum TOK tok,
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
850 ForeachStatement *fes);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
851 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
852 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
853 int isNested();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
854 int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
855
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
856 FuncLiteralDeclaration *isFuncLiteralDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
857 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
858 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
859
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
860 struct CtorDeclaration : FuncDeclaration
1607
207a8a438dea Merge DMD r253: refactor: Argument => Parameter
Leandro Lucarella <llucax@gmail.com>
parents: 1602
diff changeset
861 { Parameters *arguments;
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
862 int varargs;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
863
1607
207a8a438dea Merge DMD r253: refactor: Argument => Parameter
Leandro Lucarella <llucax@gmail.com>
parents: 1602
diff changeset
864 CtorDeclaration(Loc loc, Loc endloc, Parameters *arguments, int varargs);
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
865 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
866 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
867 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
868 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
869 char *toChars();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
870 int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
871 int addPreInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
872 int addPostInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
873 void toDocBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
874
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
875 CtorDeclaration *isCtorDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
876 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
877
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
878 #if DMDV2
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
879 struct PostBlitDeclaration : FuncDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
880 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
881 PostBlitDeclaration(Loc loc, Loc endloc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
882 PostBlitDeclaration(Loc loc, Loc endloc, Identifier *id);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
883 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
884 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
885 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
886 int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
887 int addPreInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
888 int addPostInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
889 int overloadInsert(Dsymbol *s);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
890 void emitComment(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
891 void toJsonBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
892
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
893 PostBlitDeclaration *isPostBlitDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
894 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
895 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
896
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
897 struct DtorDeclaration : FuncDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
898 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
899 DtorDeclaration(Loc loc, Loc endloc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
900 DtorDeclaration(Loc loc, Loc endloc, Identifier *id);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
901 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
902 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
903 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
904 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
905 char *toChars();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
906 int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
907 int addPreInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
908 int addPostInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
909 int overloadInsert(Dsymbol *s);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
910 void emitComment(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
911 void toJsonBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
912
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
913 DtorDeclaration *isDtorDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
914 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
915
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
916 struct StaticCtorDeclaration : FuncDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
917 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
918 StaticCtorDeclaration(Loc loc, Loc endloc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
919 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
920 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
921 AggregateDeclaration *isThis();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
922 int isStaticConstructor();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
923 int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
924 int addPreInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
925 int addPostInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
926 void emitComment(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
927 void toJsonBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
928 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
929
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
930 StaticCtorDeclaration *isStaticCtorDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
931 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
932
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
933 struct StaticDtorDeclaration : FuncDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
934 { VarDeclaration *vgate; // 'gate' variable
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
935
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
936 StaticDtorDeclaration(Loc loc, Loc endloc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
937 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
938 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
939 AggregateDeclaration *isThis();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
940 int isStaticDestructor();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
941 int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
942 int addPreInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
943 int addPostInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
944 void emitComment(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
945 void toJsonBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
946 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
947
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
948 StaticDtorDeclaration *isStaticDtorDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
949 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
950
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
951 struct InvariantDeclaration : FuncDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
952 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
953 InvariantDeclaration(Loc loc, Loc endloc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
954 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
955 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
956 int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
957 int addPreInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
958 int addPostInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
959 void emitComment(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
960 void toJsonBuffer(OutBuffer *buf);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
961 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
962
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
963 InvariantDeclaration *isInvariantDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
964 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
965
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
966
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
967 struct UnitTestDeclaration : FuncDeclaration
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
968 {
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
969 UnitTestDeclaration(Loc loc, Loc endloc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
970 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
971 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
972 AggregateDeclaration *isThis();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
973 int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
974 int addPreInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
975 int addPostInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
976 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
977
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
978 UnitTestDeclaration *isUnitTestDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
979 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
980
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
981 struct NewDeclaration : FuncDeclaration
1607
207a8a438dea Merge DMD r253: refactor: Argument => Parameter
Leandro Lucarella <llucax@gmail.com>
parents: 1602
diff changeset
982 { Parameters *arguments;
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
983 int varargs;
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
984
1607
207a8a438dea Merge DMD r253: refactor: Argument => Parameter
Leandro Lucarella <llucax@gmail.com>
parents: 1602
diff changeset
985 NewDeclaration(Loc loc, Loc endloc, Parameters *arguments, int varargs);
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
986 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
987 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
988 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
989 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
990 int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
991 int addPreInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
992 int addPostInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
993
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
994 NewDeclaration *isNewDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
995 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
996
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
997
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
998 struct DeleteDeclaration : FuncDeclaration
1607
207a8a438dea Merge DMD r253: refactor: Argument => Parameter
Leandro Lucarella <llucax@gmail.com>
parents: 1602
diff changeset
999 { Parameters *arguments;
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1000
1607
207a8a438dea Merge DMD r253: refactor: Argument => Parameter
Leandro Lucarella <llucax@gmail.com>
parents: 1602
diff changeset
1001 DeleteDeclaration(Loc loc, Loc endloc, Parameters *arguments);
1587
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1002 Dsymbol *syntaxCopy(Dsymbol *);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1003 void semantic(Scope *sc);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1004 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1005 const char *kind();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1006 int isDelete();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1007 int isVirtual();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1008 int addPreInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1009 int addPostInvariant();
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1010 #ifdef _DH
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1011 DeleteDeclaration *isDeleteDeclaration() { return this; }
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1012 #endif
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1013 };
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1014
def7a1d494fd Merge DMD 1.051
Christian Kamm <kamm incasoftware de>
parents: 1530
diff changeset
1015 #endif /* DMD_DECLARATION_H */