annotate dmd/statement.h @ 945:03d7c4aac654

SWITCHED TO LLVM 2.5 ! Applied patch from ticket #129 to compile against latest LLVM. Thanks Frits van Bommel. Fixed implicit return by asm block at the end of a function on x86-32. Other architectures will produce an error at the moment. Adding support for new targets is fairly simple. Fixed return calling convention for complex numbers, ST and ST(1) were switched around. Added some testcases. I've run a dstress test and there are no regressions. However, the runtime does not seem to compile with symbolic debug information. -O3 -release -inline works well and is what I used for the dstress run. Tango does not compile, a small workaround is needed in tango.io.digest.Digest.Digest.hexDigest. See ticket #206 .
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 08 Feb 2009 05:26:54 +0100
parents 545f54041d91
children b30fe7e1dbb9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
1
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
2 // Compiler implementation of the D programming language
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
3 // Copyright (c) 1999-2008 by Digital Mars
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
4 // All Rights Reserved
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
5 // written by Walter Bright
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
6 // http://www.digitalmars.com
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
7 // License for redistribution is by either the Artistic License
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
9 // See the included readme.txt for details.
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
10
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
11 #ifndef DMD_STATEMENT_H
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
12 #define DMD_STATEMENT_H
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
13
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
14 #ifdef __DMC__
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
15 #pragma once
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
16 #endif /* __DMC__ */
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
17
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
18 #include "root.h"
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
19
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
20 #include "arraytypes.h"
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
21 #include "dsymbol.h"
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
22 #include "lexer.h"
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
23
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
24 struct OutBuffer;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
25 struct Scope;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
26 struct Expression;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
27 struct LabelDsymbol;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
28 struct Identifier;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
29 struct IfStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
30 struct DeclarationStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
31 struct DefaultStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
32 struct VarDeclaration;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
33 struct Condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
34 struct Module;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
35 struct Token;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
36 struct InlineCostState;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
37 struct InlineDoState;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
38 struct InlineScanState;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
39 struct ReturnStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
40 struct CompoundStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
41 struct Argument;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
42 struct StaticAssert;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
43 struct AsmStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
44 struct AsmBlockStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
45 struct GotoStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
46 struct ScopeStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
47 struct TryCatchStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
48 struct TryFinallyStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
49 struct HdrGenState;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
50 struct InterState;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
51 struct CaseStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
52 struct LabelStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
53 struct VolatileStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
54 struct SynchronizedStatement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
55
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
56 enum TOK;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
57
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
58 namespace llvm
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
59 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
60 class Value;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
61 class BasicBlock;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
62 class ConstantInt;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
63 }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
64
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
65 // Back end
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
66 struct IRState;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
67 struct Blockx;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
68 #if IN_LLVM
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
69 struct DValue;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
70 typedef DValue elem;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
71 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
72
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
73 #if IN_GCC
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
74 union tree_node; typedef union tree_node block;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
75 //union tree_node; typedef union tree_node elem;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
76 #else
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
77 struct block;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
78 //struct elem;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
79 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
80 struct code;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
81
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
82 /* How a statement exits
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
83 */
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
84 enum BE
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
85 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
86 BEnone = 0,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
87 BEfallthru = 1,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
88 BEthrow = 2,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
89 BEreturn = 4,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
90 BEgoto = 8,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
91 BEhalt = 0x10,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
92 BEbreak = 0x20,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
93 BEcontinue = 0x40,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
94 BEany = (BEfallthru | BEthrow | BEreturn | BEgoto | BEhalt),
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
95 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
96
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
97 // LDC this is used for tracking try-finally, synchronized and volatile scopes
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
98 // definitions in gen/llvmhelpers.cpp
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
99 struct EnclosingHandler : Object
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
100 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
101 virtual void emitCode(IRState* p) = 0;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
102 virtual EnclosingHandler* getEnclosing() = 0;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
103 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
104 struct EnclosingTryFinally : EnclosingHandler
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
105 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
106 TryFinallyStatement* tf;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
107 void emitCode(IRState* p);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
108 EnclosingHandler* getEnclosing();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
109 EnclosingTryFinally(TryFinallyStatement* _tf) : tf(_tf) {}
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
110 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
111 struct EnclosingVolatile : EnclosingHandler
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
112 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
113 VolatileStatement* v;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
114 void emitCode(IRState* p);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
115 EnclosingHandler* getEnclosing();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
116 EnclosingVolatile(VolatileStatement* _tf) : v(_tf) {}
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
117 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
118 struct EnclosingSynchro : EnclosingHandler
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
119 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
120 SynchronizedStatement* s;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
121 void emitCode(IRState* p);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
122 EnclosingHandler* getEnclosing();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
123 EnclosingSynchro(SynchronizedStatement* _tf) : s(_tf) {}
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
124 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
125
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
126 struct Statement : Object
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
127 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
128 Loc loc;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
129
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
130 Statement(Loc loc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
131 virtual Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
132
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
133 void print();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
134 char *toChars();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
135
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
136 void error(const char *format, ...);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
137 virtual void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
138 virtual TryCatchStatement *isTryCatchStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
139 virtual GotoStatement *isGotoStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
140 virtual AsmStatement *isAsmStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
141 virtual AsmBlockStatement *isAsmBlockStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
142 #ifdef _DH
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
143 int incontract;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
144 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
145 virtual ScopeStatement *isScopeStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
146 virtual Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
147 Statement *semanticScope(Scope *sc, Statement *sbreak, Statement *scontinue);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
148 virtual int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
149 virtual int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
150 virtual int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
151 virtual int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
152 virtual int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
153 virtual void scopeCode(Statement **sentry, Statement **sexit, Statement **sfinally);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
154 virtual Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
155 virtual Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
156
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
157 virtual int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
158 virtual Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
159 virtual Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
160
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
161 // Back end
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
162 virtual void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
163
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
164 // Avoid dynamic_cast
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
165 virtual DeclarationStatement *isDeclarationStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
166 virtual CompoundStatement *isCompoundStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
167 virtual ReturnStatement *isReturnStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
168 virtual IfStatement *isIfStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
169 virtual CaseStatement* isCaseStatement() { return NULL; }
945
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
170
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
171 // LDC
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
172 virtual void toNakedIR(IRState *irs);
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
173 virtual AsmBlockStatement* endsWithAsm();
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
174 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
175
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
176 struct ExpStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
177 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
178 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
179
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
180 ExpStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
181 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
182 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
183 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
184 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
185 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
186
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
187 int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
188 Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
189 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
190
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
191 void toIR(IRState *irs);
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: 875
diff changeset
192
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: 875
diff changeset
193 // LDC
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: 875
diff changeset
194 void toNakedIR(IRState *irs);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
195 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
196
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
197 struct CompileStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
198 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
199 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
200
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
201 CompileStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
202 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
203 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
204 Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
205 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
206 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
207
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
208 struct DeclarationStatement : ExpStatement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
209 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
210 // Doing declarations as an expression, rather than a statement,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
211 // makes inlining functions much easier.
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
212
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
213 DeclarationStatement(Loc loc, Dsymbol *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
214 DeclarationStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
215 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
216 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
217 void scopeCode(Statement **sentry, Statement **sexit, Statement **sfinally);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
218
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
219 DeclarationStatement *isDeclarationStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
220 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
221
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
222 struct CompoundStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
223 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
224 Statements *statements;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
225
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
226 CompoundStatement(Loc loc, Statements *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
227 CompoundStatement(Loc loc, Statement *s1, Statement *s2);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
228 virtual Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
229 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
230 virtual Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
231 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
232 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
233 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
234 virtual Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
235 ReturnStatement *isReturnStatement();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
236 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
237
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
238 int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
239 Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
240 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
241
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
242 virtual void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
243
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: 875
diff changeset
244 // LDC
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: 875
diff changeset
245 virtual void toNakedIR(IRState *irs);
945
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
246 virtual AsmBlockStatement* endsWithAsm();
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: 875
diff changeset
247
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
248 virtual CompoundStatement *isCompoundStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
249 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
250
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
251 /* The purpose of this is so that continue will go to the next
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
252 * of the statements, and break will go to the end of the statements.
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
253 */
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
254 struct UnrolledLoopStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
255 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
256 Statements *statements;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
257 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
258
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
259 UnrolledLoopStatement(Loc loc, Statements *statements);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
260 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
261 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
262 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
263 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
264 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
265 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
266 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
267 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
268 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
269
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
270 int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
271 Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
272 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
273
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
274 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
275 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
276
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
277 struct ScopeStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
278 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
279 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
280
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
281 ScopeStatement(Loc loc, Statement *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
282 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
283 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
284 ScopeStatement *isScopeStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
285 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
286 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
287 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
288 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
289 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
290 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
291 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
292
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
293 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
294
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
295 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
296 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
297
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
298 struct WhileStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
299 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
300 Expression *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
301 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
302 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
303
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
304 WhileStatement(Loc loc, Expression *c, Statement *b);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
305 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
306 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
307 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
308 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
309 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
310 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
311 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
312 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
313 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
314
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
315 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
316
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
317 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
318 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
319
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
320 struct DoStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
321 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
322 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
323 Expression *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
324 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
325
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
326 DoStatement(Loc loc, Statement *b, Expression *c);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
327 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
328 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
329 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
330 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
331 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
332 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
333 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
334 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
335 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
337 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
338
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
339 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
340 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
341
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
342 struct ForStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
343 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
344 Statement *init;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
345 Expression *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
346 Expression *increment;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
347 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
348 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
349
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
350 ForStatement(Loc loc, Statement *init, Expression *condition, Expression *increment, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
351 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
352 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
353 void scopeCode(Statement **sentry, Statement **sexit, Statement **sfinally);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
354 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
355 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
356 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
357 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
358 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
359 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
360 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
361
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
362 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
363
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
364 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
365 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
366
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
367 struct ForeachStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
368 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
369 enum TOK op; // TOKforeach or TOKforeach_reverse
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
370 Arguments *arguments; // array of Argument*'s
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
371 Expression *aggr;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
372 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
373 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
374
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
375 VarDeclaration *key;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
376 VarDeclaration *value;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
377
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
378 FuncDeclaration *func; // function we're lexically in
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
379
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
380 Array cases; // put breaks, continues, gotos and returns here
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
381 Array gotos; // forward referenced goto's go here
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
382
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
383 ForeachStatement(Loc loc, enum TOK op, Arguments *arguments, Expression *aggr, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
384 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
385 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
386 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
387 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
388 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
389 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
390 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
391 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
392 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
393
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
394 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
395
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
396 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
397 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
398
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
399 #if DMDV2
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
400 struct ForeachRangeStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
401 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
402 enum TOK op; // TOKforeach or TOKforeach_reverse
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
403 Argument *arg; // loop index variable
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
404 Expression *lwr;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
405 Expression *upr;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
406 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
407
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
408 VarDeclaration *key;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
409
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
410 ForeachRangeStatement(Loc loc, enum TOK op, Argument *arg,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
411 Expression *lwr, Expression *upr, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
412 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
413 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
414 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
415 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
416 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
417 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
418 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
419 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
420 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
421
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
422 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
423
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
424 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
425 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
426 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
427
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
428 struct IfStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
429 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
430 Argument *arg;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
431 Expression *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
432 Statement *ifbody;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
433 Statement *elsebody;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
434
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
435 VarDeclaration *match; // for MatchExpression results
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
436
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
437 IfStatement(Loc loc, Argument *arg, Expression *condition, Statement *ifbody, Statement *elsebody);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
438 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
439 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
440 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
441 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
442 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
443 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
444 IfStatement *isIfStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
445
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
446 int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
447 Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
448 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
449
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
450 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
451 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
452
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
453 struct ConditionalStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
454 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
455 Condition *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
456 Statement *ifbody;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
457 Statement *elsebody;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
458
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
459 ConditionalStatement(Loc loc, Condition *condition, Statement *ifbody, Statement *elsebody);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
460 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
461 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
462 Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
463 int usesEH();
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 356
diff changeset
464 int blockExit();
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
465
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
466 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
467 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
468
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
469 struct PragmaStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
470 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
471 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
472 Expressions *args; // array of Expression's
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
473 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
474
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
475 PragmaStatement(Loc loc, Identifier *ident, Expressions *args, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
476 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
477 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
478 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
479 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
480
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
481 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
482 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
483
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
484 struct StaticAssertStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
485 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
486 StaticAssert *sa;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
487
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
488 StaticAssertStatement(StaticAssert *sa);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
489 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
490 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
491
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
492 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
493 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
494
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
495 struct SwitchStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
496 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
497 Expression *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
498 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
499
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
500 DefaultStatement *sdefault;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
501 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
502
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
503 Array gotoCases; // array of unresolved GotoCaseStatement's
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
504 Array *cases; // array of CaseStatement's
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
505 int hasNoDefault; // !=0 if no default statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
506
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
507 SwitchStatement(Loc loc, Expression *c, Statement *b);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
508 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
509 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
510 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
511 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
512 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
513 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
514 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
515
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
516 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
517
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
518 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
519 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
520
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
521 struct CaseStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
522 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
523 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
524 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
525 int index; // which case it is (since we sort this)
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
526 block *cblock; // back end: label for the block
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
527
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
528 CaseStatement(Loc loc, Expression *exp, Statement *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
529 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
530 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
531 int compare(Object *obj);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
532 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
533 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
534 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
535 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
536 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
537
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
538 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
539
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
540 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
541
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
542 CaseStatement* isCaseStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
543
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
544 // LDC
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
545 llvm::BasicBlock* bodyBB;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
546 llvm::ConstantInt* llvmIdx;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
547 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
548
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
549 struct DefaultStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
550 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
551 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
552 #if IN_GCC
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
553 block *cblock; // back end: label for the block
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
554 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
555
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
556 DefaultStatement(Loc loc, Statement *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
557 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
558 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
559 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
560 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
561 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
562 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
563 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
564
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
565 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
566
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
567 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
568
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
569 // LDC
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
570 llvm::BasicBlock* bodyBB;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
571 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
572
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
573 struct GotoDefaultStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
574 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
575 SwitchStatement *sw;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
576 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
577
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
578 GotoDefaultStatement(Loc loc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
579 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
580 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
581 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
582 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
583 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
584
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
585 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
586 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
587
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
588 struct GotoCaseStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
589 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
590 Expression *exp; // NULL, or which case to goto
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
591 CaseStatement *cs; // case statement it resolves to
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
592 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
593 SwitchStatement *sw;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
594
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
595 GotoCaseStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
596 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
597 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
598 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
599 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
600 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
601
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
602 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
603 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
604
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
605 struct SwitchErrorStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
606 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
607 SwitchErrorStatement(Loc loc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
608 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
609 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
610
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
611 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
612 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
613
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
614 struct ReturnStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
615 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
616 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
617 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
618
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
619 ReturnStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
620 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
621 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
622 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
623 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
624 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
625
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
626 int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
627 Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
628 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
629
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
630 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
631
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
632 ReturnStatement *isReturnStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
633 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
634
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
635 struct BreakStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
636 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
637 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
638 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
639
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
640 BreakStatement(Loc loc, Identifier *ident);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
641 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
642 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
643 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
644 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
645 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
646
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
647 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
648
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
649 // LDC: only set if ident is set: label statement to jump to
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
650 LabelStatement *target;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
651 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
652
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
653 struct ContinueStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
654 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
655 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
656 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
657
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
658 ContinueStatement(Loc loc, Identifier *ident);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
659 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
660 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
661 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
662 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
663 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
664
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
665 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
666
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
667 // LDC: only set if ident is set: label statement to jump to
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
668 LabelStatement *target;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
669 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
670
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
671 struct SynchronizedStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
672 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
673 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
674 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
675 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
676
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
677 SynchronizedStatement(Loc loc, Expression *exp, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
678 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
679 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
680 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
681 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
682 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
683 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
684 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
685
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
686 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
687
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
688 // Back end
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
689 elem *esync;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
690 SynchronizedStatement(Loc loc, elem *esync, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
691 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
692 llvm::Value* llsync;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
693 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
694
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
695 struct WithStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
696 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
697 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
698 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
699 VarDeclaration *wthis;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
700
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
701 WithStatement(Loc loc, Expression *exp, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
702 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
703 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
704 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
705 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
706 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
707
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
708 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
709
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
710 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
711 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
712
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
713 struct TryCatchStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
714 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
715 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
716 Array *catches;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
717
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
718 TryCatchStatement(Loc loc, Statement *body, Array *catches);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
719 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
720 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
721 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
722 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
723 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
724
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
725 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
726
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
727 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
728 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
729 TryCatchStatement *isTryCatchStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
730 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
731
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
732 struct Catch : Object
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
733 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
734 Loc loc;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
735 Type *type;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
736 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
737 VarDeclaration *var;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
738 Statement *handler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
739
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
740 Catch(Loc loc, Type *t, Identifier *id, Statement *handler);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
741 Catch *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
742 void semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
743 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
744 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
745 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
746
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
747 struct TryFinallyStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
748 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
749 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
750 Statement *finalbody;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
751 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
752
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
753 TryFinallyStatement(Loc loc, Statement *body, Statement *finalbody);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
754 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
755 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
756 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
757 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
758 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
759 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
760 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
761
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
762 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
763
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
764 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
765 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
766
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
767 struct OnScopeStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
768 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
769 TOK tok;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
770 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
771
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
772 OnScopeStatement(Loc loc, TOK tok, Statement *statement);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
773 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
774 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
775 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
776 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
777 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
778 void scopeCode(Statement **sentry, Statement **sexit, Statement **sfinally);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
779
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
780 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
781 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
782
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
783 struct ThrowStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
784 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
785 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
786
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
787 ThrowStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
788 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
789 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
790 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
791 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
792
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
793 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
794
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
795 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
796 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
797
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
798 struct VolatileStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
799 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
800 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
801 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
802
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
803 VolatileStatement(Loc loc, Statement *statement);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
804 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
805 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
806 Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
807 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
808 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
809
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
810 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
811
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
812 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
813 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
814
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
815 struct GotoStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
816 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
817 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
818 LabelDsymbol *label;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
819 TryFinallyStatement *tf;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
820 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
821
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
822 GotoStatement(Loc loc, Identifier *ident);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
823 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
824 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
825 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
826 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
827
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
828 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
829 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
830 GotoStatement *isGotoStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
831 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
832
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
833 struct LabelStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
834 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
835 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
836 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
837 TryFinallyStatement *tf;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
838 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
839 block *lblock; // back end
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
840 int isReturnLabel;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
841
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
842 LabelStatement(Loc loc, Identifier *ident, Statement *statement);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
843 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
844 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
845 Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
846 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
847 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
848 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
849 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
850 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
851
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
852 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
853
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
854 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
855
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
856 // LDC
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
857 bool asmLabel; // for labels inside inline assembler
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: 875
diff changeset
858 void toNakedIR(IRState *irs);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
859 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
860
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
861 struct LabelDsymbol : Dsymbol
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
862 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
863 LabelStatement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
864
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
865 LabelDsymbol(Identifier *ident);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
866 LabelDsymbol *isLabel();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
867 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
868
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
869 struct AsmStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
870 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
871 Token *tokens;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
872 code *asmcode;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
873 unsigned asmalign; // alignment of this statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
874 unsigned refparam; // !=0 if function parameter is referenced
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
875 unsigned naked; // !=0 if function is to be naked
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
876
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
877 AsmStatement(Loc loc, Token *tokens);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
878 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
879 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
880 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
881 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
882
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
883 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
884 virtual AsmStatement *isAsmStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
885
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
886 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
887
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
888 // LDC
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
889 // non-zero if this is a branch, contains the target labels identifier
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
890 Identifier* isBranchToLabel;
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: 875
diff changeset
891
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: 875
diff changeset
892 void toNakedIR(IRState *irs);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
893 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
894
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
895 struct AsmBlockStatement : CompoundStatement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
896 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
897 EnclosingHandler* enclosinghandler;
356
44daf304421c [svn r377] The previous check was too strict, it completely disallowed gotos within finally blocks. This reenables them as long as they don't cross a finally boundary.
ChristianK
parents: 353
diff changeset
898 TryFinallyStatement* tf;
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
899
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
900 AsmBlockStatement(Loc loc, Statements *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
901 Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
902 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
903 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
904
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
905 CompoundStatement *isCompoundStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
906 AsmBlockStatement *isAsmBlockStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
907
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
908 void toIR(IRState *irs);
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: 875
diff changeset
909 void toNakedIR(IRState *irs);
945
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
910 AsmBlockStatement* endsWithAsm();
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
911
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
912 llvm::Value* abiret;
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
913 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
914
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
915 #endif /* DMD_STATEMENT_H */