annotate dmd/declaration.h @ 1168:ab186e535e72

A different fix to #218 and DMD2682 that does not lead to constant folding regressions. Fixes run/const_15, run/c/const_16_B. The price is removing the lvalueness of struct literals. If it turns out too much code depends on this behavior or we don't want to break with DMD, we could keep struct literals as lvalues and instead convert struct literals used as expression initializers into struct initializers.
author Christian Kamm <kamm incasoftware de>
date Sun, 29 Mar 2009 11:43:45 +0200
parents 3d1b16dabd25
children e961851fb8be
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
2 // Compiler implementation of the D programming language
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
3 // Copyright (c) 1999-2008 by Digital Mars
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
4 // All Rights Reserved
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
5 // written by Walter Bright
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
6 // http://www.digitalmars.com
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
7 // License for redistribution is by either the Artistic License
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
9 // See the included readme.txt for details.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
10
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
11 #ifndef DMD_DECLARATION_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
12 #define DMD_DECLARATION_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
13
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
14 #ifdef __DMC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
15 #pragma once
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
16 #endif /* __DMC__ */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
17
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
18 #include <set>
305
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 159
diff changeset
19 #include <map>
443
44f08170f4ef Removed tango from the repository and instead added a runtime dir with the files needed to patch and build tango from svn.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 378
diff changeset
20 #include <string>
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
21
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
22 #include "dsymbol.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
23 #include "lexer.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
24 #include "mtype.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
25
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
26 struct Expression;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
27 struct Statement;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
28 struct LabelDsymbol;
305
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 159
diff changeset
29 struct LabelStatement;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
30 struct Initializer;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
31 struct Module;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
32 struct InlineScanState;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
33 struct ForeachStatement;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
34 struct FuncDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
35 struct ExpInitializer;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
36 struct StructDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
37 struct TupleType;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
38 struct InterState;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
39 struct IRState;
737
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 732
diff changeset
40 struct AnonDeclaration;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
41
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
42 enum PROT;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
43 enum LINK;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
44 enum TOK;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
45 enum MATCH;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
46
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
47 enum STC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
48 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
49 STCundefined = 0,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
50 STCstatic = 1,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
51 STCextern = 2,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
52 STCconst = 4,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
53 STCfinal = 8,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
54 STCabstract = 0x10,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
55 STCparameter = 0x20,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
56 STCfield = 0x40,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
57 STCoverride = 0x80,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
58 STCauto = 0x100,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
59 STCsynchronized = 0x200,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
60 STCdeprecated = 0x400,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
61 STCin = 0x800, // in parameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
62 STCout = 0x1000, // out parameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
63 STClazy = 0x2000, // lazy parameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
64 STCforeach = 0x4000, // variable for foreach loop
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
65 STCcomdat = 0x8000, // should go into COMDAT record
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
66 STCvariadic = 0x10000, // variadic function argument
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
67 STCctorinit = 0x20000, // can only be set inside constructor
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
68 STCtemplateparameter = 0x40000, // template parameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
69 STCscope = 0x80000, // template parameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
70 STCinvariant = 0x100000,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
71 STCref = 0x200000,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
72 STCinit = 0x400000, // has explicit initializer
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
73 STCmanifest = 0x800000, // manifest constant
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
74 STCnodtor = 0x1000000, // don't run destructor
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
75 STCnothrow = 0x2000000, // never throws exceptions
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
76 STCpure = 0x4000000, // pure function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
77 STCtls = 0x8000000, // thread local
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
78 STCalias = 0x10000000, // alias parameter
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
79 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
80
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
81 struct Match
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
82 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
83 int count; // number of matches found
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
84 MATCH last; // match level of lastf
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
85 FuncDeclaration *lastf; // last matching function we found
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
86 FuncDeclaration *nextf; // current matching function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
87 FuncDeclaration *anyf; // pick a func, any func, to use for error recovery
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
88 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
89
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
90 void overloadResolveX(Match *m, FuncDeclaration *f, Expressions *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
91 int overloadApply(FuncDeclaration *fstart,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
92 int (*fp)(void *, FuncDeclaration *),
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
93 void *param);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
94
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
95 /**************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
96
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
97 struct Declaration : Dsymbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
98 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
99 Type *type;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
100 Type *originalType; // before semantic analysis
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
101 unsigned storage_class;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
102 enum PROT protection;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
103 enum LINK linkage;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
104
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
105 Declaration(Identifier *id);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
106 void semantic(Scope *sc);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
107 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
108 unsigned size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
109 void checkModify(Loc loc, Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
110
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
111 void emitComment(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
112 void toDocBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
113
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
114 char *mangle();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
115 int isStatic() { return storage_class & STCstatic; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
116 virtual int isStaticConstructor();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
117 virtual int isStaticDestructor();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
118 virtual int isDelete();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
119 virtual int isDataseg();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
120 virtual int isCodeseg();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
121 int isCtorinit() { return storage_class & STCctorinit; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
122 int isFinal() { return storage_class & STCfinal; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
123 int isAbstract() { return storage_class & STCabstract; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
124 int isConst() { return storage_class & STCconst; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
125 int isInvariant() { return 0; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
126 int isAuto() { return storage_class & STCauto; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
127 int isScope() { return storage_class & (STCscope | STCauto); }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
128 int isSynchronized() { return storage_class & STCsynchronized; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
129 int isParameter() { return storage_class & STCparameter; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
130 int isDeprecated() { return storage_class & STCdeprecated; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
131 int isOverride() { return storage_class & STCoverride; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
132
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
133 int isIn() { return storage_class & STCin; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
134 int isOut() { return storage_class & STCout; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
135 int isRef() { return storage_class & STCref; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
136
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
137 enum PROT prot();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
138
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
139 Declaration *isDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
140
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
141 #if IN_LLVM
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
142 /// Codegen traversal
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
143 virtual void codegen(Ir* ir);
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
144 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
145 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
146
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
147 /**************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
148
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
149 struct TupleDeclaration : Declaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
150 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
151 Objects *objects;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
152 int isexp; // 1: expression tuple
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
153
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
154 TypeTuple *tupletype; // !=NULL if this is a type tuple
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
155
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
156 TupleDeclaration(Loc loc, Identifier *ident, Objects *objects);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
157 Dsymbol *syntaxCopy(Dsymbol *);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
158 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
159 Type *getType();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
160 int needThis();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
161
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
162 TupleDeclaration *isTupleDeclaration() { return this; }
732
6aeaef263289 Fixed tuple fields, thanx downs
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 703
diff changeset
163
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
164 #if IN_LLVM
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
165 /// Codegen traversal
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
166 void codegen(Ir* ir);
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
167 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
168 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
169
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
170 /**************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
171
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
172 struct TypedefDeclaration : Declaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
173 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
174 Type *basetype;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
175 Initializer *init;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
176 int sem; // 0: semantic() has not been run
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
177 // 1: semantic() is in progress
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
178 // 2: semantic() has been run
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
179 // 3: semantic2() has been run
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
180 int inuse; // used to detect typedef cycles
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
181
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
182 TypedefDeclaration(Loc loc, Identifier *ident, Type *basetype, Initializer *init);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
183 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
184 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
185 void semantic2(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
186 char *mangle();
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
187 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
188 Type *getType();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
189 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
190 #ifdef _DH
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
191 Type *htype;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
192 Type *hbasetype;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
193 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
194
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
195 void toDocBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
196
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
197 #if IN_DMD
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
198 void toObjFile(int multiobj); // compile to .obj file
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
199 void toDebug();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
200 int cvMember(unsigned char *p);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
201 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
202
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
203 TypedefDeclaration *isTypedefDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
204
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
205 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
206 Symbol *sinit;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
207 Symbol *toInitializer();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
208 #endif
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
209
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
210 #if IN_LLVM
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
211 /// Codegen traversal
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
212 void codegen(Ir* ir);
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
213 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
214 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
215
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
216 /**************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
217
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
218 struct AliasDeclaration : Declaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
219 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
220 Dsymbol *aliassym;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
221 Dsymbol *overnext; // next in overload list
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
222 int inSemantic;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
223
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
224 AliasDeclaration(Loc loc, Identifier *ident, Type *type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
225 AliasDeclaration(Loc loc, Identifier *ident, Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
226 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
227 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
228 int overloadInsert(Dsymbol *s);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
229 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
230 Type *getType();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
231 Dsymbol *toAlias();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
232 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
233 #ifdef _DH
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
234 Type *htype;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
235 Dsymbol *haliassym;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
236 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
237
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
238 void toDocBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
239
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
240 AliasDeclaration *isAliasDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
241 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
242
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
243 /**************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
244
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
245 struct VarDeclaration : Declaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
246 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
247 Initializer *init;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
248 unsigned offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
249 int noauto; // no auto semantics
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
250 int nestedref; // referenced by a lexically nested function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
251 int inuse;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
252 int ctorinit; // it has been initialized in a ctor
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
253 int onstack; // 1: it has been allocated on the stack
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
254 // 2: on stack, run destructor anyway
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
255 int canassign; // it can be assigned to
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
256 Dsymbol *aliassym; // if redone as alias to another symbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
257 Expression *value; // when interpreting, this is the value
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
258 // (NULL if value not determinable)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
259
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
260 VarDeclaration(Loc loc, Type *t, Identifier *id, Initializer *init);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
261 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
262 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
263 void semantic2(Scope *sc);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
264 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
265 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
266 #ifdef _DH
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
267 Type *htype;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
268 Initializer *hinit;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
269 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
270 int needThis();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
271 int isImportedSymbol();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
272 int isDataseg();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
273 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
274 Expression *callAutoDtor();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
275 ExpInitializer *getExpInitializer();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
276 void checkCtorConstInit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
277 void checkNestedReference(Scope *sc, Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
278 Dsymbol *toAlias();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
279
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
280 #if IN_DMD
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
281 void toObjFile(int multiobj); // compile to .obj file
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
282 Symbol *toSymbol();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
283 int cvMember(unsigned char *p);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
284 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
285
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
286 // Eliminate need for dynamic_cast
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
287 VarDeclaration *isVarDeclaration() { return (VarDeclaration *)this; }
737
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 732
diff changeset
288
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
289 #if IN_LLVM
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
290 /// Codegen traversal
1148
3d1b16dabd25 Eliminated the need for resolve, declare, const-init and define lists to drive code generation.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1147
diff changeset
291 virtual void codegen(Ir* ir);
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
292
737
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 732
diff changeset
293 // LDC
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 732
diff changeset
294 AnonDeclaration* anonDecl;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 751
diff changeset
295 unsigned offset2;
920
545f54041d91 Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 913
diff changeset
296 bool nakedUse;
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
297 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
298 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
299
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
300 /**************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
301
913
29c0d1194033 Fix #198 and #199 by making CTFE on static struct initializers work.
Christian Kamm <kamm incasoftware de>
parents: 846
diff changeset
302 // LDC uses this to denote static struct initializers
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
303
913
29c0d1194033 Fix #198 and #199 by making CTFE on static struct initializers work.
Christian Kamm <kamm incasoftware de>
parents: 846
diff changeset
304 struct StaticStructInitDeclaration : Declaration
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
305 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
306 StructDeclaration *dsym;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
307
913
29c0d1194033 Fix #198 and #199 by making CTFE on static struct initializers work.
Christian Kamm <kamm incasoftware de>
parents: 846
diff changeset
308 StaticStructInitDeclaration(Loc loc, StructDeclaration *dsym);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
309
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
310 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
311 Symbol *toSymbol();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
312 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
313
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
314 // Eliminate need for dynamic_cast
913
29c0d1194033 Fix #198 and #199 by making CTFE on static struct initializers work.
Christian Kamm <kamm incasoftware de>
parents: 846
diff changeset
315 StaticStructInitDeclaration *isStaticStructInitDeclaration() { return (StaticStructInitDeclaration *)this; }
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
316 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
317
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
318 struct ClassInfoDeclaration : VarDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
319 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
320 ClassDeclaration *cd;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
321
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
322 ClassInfoDeclaration(ClassDeclaration *cd);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
323 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
324 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
325
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
326 void emitComment(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
327
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
328 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
329 Symbol *toSymbol();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
330 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
331
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
332 ClassInfoDeclaration* isClassInfoDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
333 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
334
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
335 struct ModuleInfoDeclaration : VarDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
336 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
337 Module *mod;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
338
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
339 ModuleInfoDeclaration(Module *mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
340 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
341 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
342
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
343 void emitComment(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
344
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
345 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
346 Symbol *toSymbol();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
347 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
348 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
349
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
350 struct TypeInfoDeclaration : VarDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
351 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
352 Type *tinfo;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
353
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
354 TypeInfoDeclaration(Type *tinfo, int internal);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
355 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
356 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
357
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
358 void emitComment(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
359
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
360 #if IN_DMD
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
361 void toObjFile(int multiobj); // compile to .obj file
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
362 Symbol *toSymbol();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
363 virtual void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
364 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
365
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
366 virtual TypeInfoDeclaration* isTypeInfoDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
367
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
368 #if IN_LLVM
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
369 /// Codegen traversal
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
370 void codegen(Ir* ir);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
371 virtual void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
372 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
373 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
374
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
375 struct TypeInfoStructDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
376 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
377 TypeInfoStructDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
378
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
379 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
380 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
381 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
382
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
383 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
384 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
385 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
386 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
387
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
388 struct TypeInfoClassDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
389 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
390 TypeInfoClassDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
391
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
392 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
393 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
394 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
395
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
396 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
397 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
398 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
399 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
400
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
401 struct TypeInfoInterfaceDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
402 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
403 TypeInfoInterfaceDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
404
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
405 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
406 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
407 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
408
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
409 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
410 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
411 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
412 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
413
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
414 struct TypeInfoTypedefDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
415 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
416 TypeInfoTypedefDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
417
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
418 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
419 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
420 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
421
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
422 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
423 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
424 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
425 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
426
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
427 struct TypeInfoPointerDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
428 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
429 TypeInfoPointerDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
430
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
431 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
432 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
433 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
434
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
435 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
436 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
437 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
438 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
439
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
440 struct TypeInfoArrayDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
441 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
442 TypeInfoArrayDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
443
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
444 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
445 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
446 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
447
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
448 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
449 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
450 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
451 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
452
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
453 struct TypeInfoStaticArrayDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
454 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
455 TypeInfoStaticArrayDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
456
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
457 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
458 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
459 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
460
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
461 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
462 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
463 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
464 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
465
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
466 struct TypeInfoAssociativeArrayDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
467 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
468 TypeInfoAssociativeArrayDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
469
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
470 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
471 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
472 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
473
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
474 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
475 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
476 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
477 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
478
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
479 struct TypeInfoEnumDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
480 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
481 TypeInfoEnumDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
482
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
483 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
484 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
485 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
486
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
487 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
488 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
489 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
490 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
491
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
492 struct TypeInfoFunctionDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
493 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
494 TypeInfoFunctionDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
495
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
496 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
497 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
498 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
499
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
500 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
501 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
502 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
503 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
504
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
505 struct TypeInfoDelegateDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
506 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
507 TypeInfoDelegateDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
508
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
509 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
510 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
511 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
512
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
513 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
514 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
515 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
516 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
517
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
518 struct TypeInfoTupleDeclaration : TypeInfoDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
519 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
520 TypeInfoTupleDeclaration(Type *tinfo);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
521
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
522 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
523 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
524 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
525
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
526 #if IN_LLVM
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
527 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
528 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
529 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
530
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
531 #if DMDV2
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
532 struct TypeInfoConstDeclaration : TypeInfoDeclaration
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
533 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
534 TypeInfoConstDeclaration(Type *tinfo);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
535
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
536 #if IN_DMD
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
537 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
538 #endif
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
539
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
540 #if IN_LLVM
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
541 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
542 #endif
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
543 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
544
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
545 struct TypeInfoInvariantDeclaration : TypeInfoDeclaration
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
546 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
547 TypeInfoInvariantDeclaration(Type *tinfo);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
548
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
549 #if IN_DMD
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
550 void toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
551 #endif
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
552
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
553 #if IN_LLVM
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
554 void llvmDefine();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
555 #endif
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
556 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
557 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
558
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
559 /**************************************************************/
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
560
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
561 struct ThisDeclaration : VarDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
562 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
563 ThisDeclaration(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
564 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
565 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
566
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
567 enum ILS
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
568 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
569 ILSuninitialized, // not computed yet
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
570 ILSno, // cannot inline
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
571 ILSyes, // can inline
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
572 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
573
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
574 /**************************************************************/
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
575 #if DMDV2
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
576
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
577 enum BUILTIN
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
578 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
579 BUILTINunknown = -1, // not known if this is a builtin
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
580 BUILTINnot, // this is not a builtin
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
581 BUILTINsin, // std.math.sin
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
582 BUILTINcos, // std.math.cos
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
583 BUILTINtan, // std.math.tan
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
584 BUILTINsqrt, // std.math.sqrt
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
585 BUILTINfabs, // std.math.fabs
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
586 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
587
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
588 Expression *eval_builtin(enum BUILTIN builtin, Expressions *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
589
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
590 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
591
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
592 struct FuncDeclaration : Declaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
593 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
594 Array *fthrows; // Array of Type's of exceptions (not used)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
595 Statement *frequire;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
596 Statement *fensure;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
597 Statement *fbody;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
598
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
599 Identifier *outId; // identifier for out statement
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
600 VarDeclaration *vresult; // variable corresponding to outId
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
601 LabelDsymbol *returnLabel; // where the return goes
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
602
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
603 DsymbolTable *localsymtab; // used to prevent symbols in different
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
604 // scopes from having the same name
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
605 VarDeclaration *vthis; // 'this' parameter (member and nested)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
606 VarDeclaration *v_arguments; // '_arguments' parameter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
607 #if IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
608 VarDeclaration *v_argptr; // '_argptr' variable
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
609 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
610 Dsymbols *parameters; // Array of VarDeclaration's for parameters
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
611 DsymbolTable *labtab; // statement label symbol table
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
612 Declaration *overnext; // next in overload list
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
613 Loc endloc; // location of closing curly bracket
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
614 int vtblIndex; // for member functions, index into vtbl[]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
615 int naked; // !=0 if naked
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
616 int inlineAsm; // !=0 if has inline assembler
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
617 ILS inlineStatus;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
618 int inlineNest; // !=0 if nested inline
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
619 int cantInterpret; // !=0 if cannot interpret function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
620 int semanticRun; // !=0 if semantic3() had been run
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
621 // this function's frame ptr
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
622 ForeachStatement *fes; // if foreach body, this is the foreach
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
623 int introducing; // !=0 if 'introducing' function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
624 Type *tintro; // if !=NULL, then this is the type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
625 // of the 'introducing' function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
626 // this one is overriding
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
627 int inferRetType; // !=0 if return type is to be inferred
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
628 Scope *scope; // !=NULL means context to use
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
629
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
630 // Things that should really go into Scope
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
631 int hasReturnExp; // 1 if there's a return exp; statement
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
632 // 2 if there's a throw statement
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
633 // 4 if there's an assert(0)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
634 // 8 if there's inline asm
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
635
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
636 // Support for NRVO (named return value optimization)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
637 int nrvo_can; // !=0 means we can do it
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
638 VarDeclaration *nrvo_var; // variable to replace with shidden
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
639 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
640 Symbol *shidden; // hidden pointer passed to function
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
641 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
642
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
643 #if DMDV2
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
644 enum BUILTIN builtin; // set if this is a known, builtin
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
645 // function we can evaluate at compile
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
646 // time
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
647
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
648 int tookAddressOf; // set if someone took the address of
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
649 // this function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
650 Dsymbols closureVars; // local variables in this function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
651 // which are referenced by nested
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
652 // functions
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
653 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
654 int nestedFrameRef; // !=0 if nested variables referenced
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
655 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
656
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
657 FuncDeclaration(Loc loc, Loc endloc, Identifier *id, enum STC storage_class, Type *type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
658 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
659 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
660 void semantic2(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
661 void semantic3(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
662 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
663 void bodyToCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
664 int overrides(FuncDeclaration *fd);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
665 int findVtblIndex(Array *vtbl, int dim);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
666 int overloadInsert(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
667 FuncDeclaration *overloadExactMatch(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
668 FuncDeclaration *overloadResolve(Loc loc, Expressions *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
669 LabelDsymbol *searchLabel(Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
670 AggregateDeclaration *isThis();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
671 AggregateDeclaration *isMember2();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
672 int getLevel(Loc loc, FuncDeclaration *fd); // lexical nesting level difference
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
673 void appendExp(Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
674 void appendState(Statement *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
675 char *mangle();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
676 int isMain();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
677 int isWinMain();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
678 int isDllMain();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
679 int isExport();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
680 int isImportedSymbol();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
681 int isAbstract();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
682 int isCodeseg();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
683 virtual int isNested();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
684 int needThis();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
685 virtual int isVirtual();
846
bc982f1ad106 Merged DMD 1.037 frontend
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 797
diff changeset
686 virtual int isFinal();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
687 virtual int addPreInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
688 virtual int addPostInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
689 Expression *interpret(InterState *istate, Expressions *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
690 void inlineScan();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
691 int canInline(int hasthis, int hdrscan = 0);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
692 Expression *doInline(InlineScanState *iss, Expression *ethis, Array *arguments);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
693 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
694 void toDocBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
695
663
6aaa3d3c1183 First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents: 639
diff changeset
696 // LDC: give argument types to runtime functions
1133
eeb8b95ea92e Cleanup DMD 1.041 merge.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 945
diff changeset
697 static FuncDeclaration *genCfunc(Arguments *args, Type *treturn, const char *name);
378
d8234836b40f Get rid of runTimeHack and instead add proper argument info to the frontend
Christian Kamm <kamm incasoftware de>
parents: 336
diff changeset
698 static FuncDeclaration *genCfunc(Arguments *args, Type *treturn, Identifier *id);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
699
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
700 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
701 Symbol *toSymbol();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
702 Symbol *toThunkSymbol(int offset); // thunk version
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
703 void toObjFile(int multiobj); // compile to .obj file
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
704 int cvMember(unsigned char *p);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
705 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
706
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
707 FuncDeclaration *isFuncDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
708
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
709 #if IN_LLVM
663
6aaa3d3c1183 First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents: 639
diff changeset
710 // LDC stuff
639
8aebdf56c455 Move check for access of context for nested class from backend into frontend.
Christian Kamm <kamm incasoftware de>
parents: 468
diff changeset
711
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
712 /// Codegen traversal
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
713 void codegen(Ir* ir);
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
714
639
8aebdf56c455 Move check for access of context for nested class from backend into frontend.
Christian Kamm <kamm incasoftware de>
parents: 468
diff changeset
715 // vars declared in this function that nested funcs reference
8aebdf56c455 Move check for access of context for nested class from backend into frontend.
Christian Kamm <kamm incasoftware de>
parents: 468
diff changeset
716 // is this is not empty, nestedFrameRef is set and these VarDecls
8aebdf56c455 Move check for access of context for nested class from backend into frontend.
Christian Kamm <kamm incasoftware de>
parents: 468
diff changeset
717 // probably have nestedref set too, see VarDeclaration::checkNestedReference
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
718 std::set<VarDeclaration*> nestedVars;
639
8aebdf56c455 Move check for access of context for nested class from backend into frontend.
Christian Kamm <kamm incasoftware de>
parents: 468
diff changeset
719
443
44f08170f4ef Removed tango from the repository and instead added a runtime dir with the files needed to patch and build tango from svn.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 378
diff changeset
720 std::string intrinsicName;
305
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 159
diff changeset
721
445
cc40db549aea Changed the handling of variadic intrinsics a bit.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 443
diff changeset
722 bool isIntrinsic();
cc40db549aea Changed the handling of variadic intrinsics a bit.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 443
diff changeset
723 bool isVaIntrinsic();
cc40db549aea Changed the handling of variadic intrinsics a bit.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 443
diff changeset
724
305
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 159
diff changeset
725 // we keep our own table of label statements as LabelDsymbolS
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 159
diff changeset
726 // don't always carry their corresponding statement along ...
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 159
diff changeset
727 typedef std::map<const char*, LabelStatement*> LabelMap;
2b72433d5c8c [svn r326] Fixed a bunch of issues with printf's that MinGW32 did not support.
lindquist
parents: 159
diff changeset
728 LabelMap labmap;
703
06576ece1a1b Changed premake.lua to work with mingw.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 663
diff changeset
729
06576ece1a1b Changed premake.lua to work with mingw.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 663
diff changeset
730 // if this is an array operation it gets a little special attention
06576ece1a1b Changed premake.lua to work with mingw.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 663
diff changeset
731 bool isArrayOp;
945
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
732
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
733 // true if overridden with the pragma(allow_inline); stmt
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
734 bool allowInlining;
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
735 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
736 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
737
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
738 struct FuncAliasDeclaration : FuncDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
739 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
740 FuncDeclaration *funcalias;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
741
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
742 FuncAliasDeclaration(FuncDeclaration *funcalias);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
743
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
744 FuncAliasDeclaration *isFuncAliasDeclaration() { return this; }
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
745 const char *kind();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
746 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
747 Symbol *toSymbol();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1133
diff changeset
748 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
749 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
750
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
751 struct FuncLiteralDeclaration : FuncDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
752 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
753 enum TOK tok; // TOKfunction or TOKdelegate
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
754
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
755 FuncLiteralDeclaration(Loc loc, Loc endloc, Type *type, enum TOK tok,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
756 ForeachStatement *fes);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
757 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
758 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
759 int isNested();
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
760 int isVirtual();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
761
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
762 FuncLiteralDeclaration *isFuncLiteralDeclaration() { return this; }
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
763 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
764 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
765
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
766 struct CtorDeclaration : FuncDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
767 { Arguments *arguments;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
768 int varargs;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
769
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
770 CtorDeclaration(Loc loc, Loc endloc, Arguments *arguments, int varargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
771 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
772 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
773 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
774 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
775 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
776 int isVirtual();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
777 int addPreInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
778 int addPostInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
779 void toDocBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
780
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
781 CtorDeclaration *isCtorDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
782 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
783
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
784 #if DMDV2
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
785 struct PostBlitDeclaration : FuncDeclaration
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
786 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
787 PostBlitDeclaration(Loc loc, Loc endloc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
788 PostBlitDeclaration(Loc loc, Loc endloc, Identifier *id);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
789 Dsymbol *syntaxCopy(Dsymbol *);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
790 void semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
791 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
792 int isVirtual();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
793 int addPreInvariant();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
794 int addPostInvariant();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
795 int overloadInsert(Dsymbol *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
796 void emitComment(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
797
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
798 PostBlitDeclaration *isPostBlitDeclaration() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
799 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
800 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
801
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
802 struct DtorDeclaration : FuncDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
803 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
804 DtorDeclaration(Loc loc, Loc endloc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
805 DtorDeclaration(Loc loc, Loc endloc, Identifier *id);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
806 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
807 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
808 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
809 int isVirtual();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
810 int addPreInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
811 int addPostInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
812 int overloadInsert(Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
813 void emitComment(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
814
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
815 DtorDeclaration *isDtorDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
816 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
817
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
818 struct StaticCtorDeclaration : FuncDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
819 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
820 StaticCtorDeclaration(Loc loc, Loc endloc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
821 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
822 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
823 AggregateDeclaration *isThis();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
824 int isStaticConstructor();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
825 int isVirtual();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
826 int addPreInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
827 int addPostInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
828 void emitComment(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
829 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
830
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
831 StaticCtorDeclaration *isStaticCtorDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
832 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
833
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
834 struct StaticDtorDeclaration : FuncDeclaration
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
835 { VarDeclaration *vgate; // 'gate' variable
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
836
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
837 StaticDtorDeclaration(Loc loc, Loc endloc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
838 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
839 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
840 AggregateDeclaration *isThis();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
841 int isStaticDestructor();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
842 int isVirtual();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
843 int addPreInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
844 int addPostInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
845 void emitComment(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
846 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
847
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
848 StaticDtorDeclaration *isStaticDtorDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
849 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
850
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
851 struct InvariantDeclaration : FuncDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
852 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
853 InvariantDeclaration(Loc loc, Loc endloc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
854 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
855 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
856 int isVirtual();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
857 int addPreInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
858 int addPostInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
859 void emitComment(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
860 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
861
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
862 InvariantDeclaration *isInvariantDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
863 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
864
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
865
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
866 struct UnitTestDeclaration : FuncDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
867 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
868 UnitTestDeclaration(Loc loc, Loc endloc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
869 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
870 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
871 AggregateDeclaration *isThis();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
872 int isVirtual();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
873 int addPreInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
874 int addPostInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
875 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
876
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
877 UnitTestDeclaration *isUnitTestDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
878 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
879
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
880 struct NewDeclaration : FuncDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
881 { Arguments *arguments;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
882 int varargs;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
883
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
884 NewDeclaration(Loc loc, Loc endloc, Arguments *arguments, int varargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
885 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
886 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
887 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
888 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
889 int isVirtual();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
890 int addPreInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
891 int addPostInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
892
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
893 NewDeclaration *isNewDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
894 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
895
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
896
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
897 struct DeleteDeclaration : FuncDeclaration
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
898 { Arguments *arguments;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
899
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
900 DeleteDeclaration(Loc loc, Loc endloc, Arguments *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
901 Dsymbol *syntaxCopy(Dsymbol *);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
902 void semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
903 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 305
diff changeset
904 const char *kind();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
905 int isDelete();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
906 int isVirtual();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
907 int addPreInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
908 int addPostInvariant();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
909 #ifdef _DH
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
910 DeleteDeclaration *isDeleteDeclaration() { return this; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
911 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
912 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
913
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 156
diff changeset
914 #endif /* DMD_DECLARATION_H */