annotate dmd/statement.h @ 1138:4c8bb03e4fbc

Update DtoConstFP() to be correct after LLVM r67562, which changed the way the APFloat constructor expects its i80 APInts to be formatted. (They're now actually consistent with the x87 format)
author Frits van Bommel <fvbommel wxs.nl>
date Tue, 24 Mar 2009 15:24:59 +0100
parents b30fe7e1dbb9
children f99a3b393c03
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
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 945
diff changeset
82 /* How a statement exits; this is returned by blockExit()
336
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, ...);
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 945
diff changeset
137 void warning(const char *format, ...);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
138 virtual void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
139 virtual TryCatchStatement *isTryCatchStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
140 virtual GotoStatement *isGotoStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
141 virtual AsmStatement *isAsmStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
142 virtual AsmBlockStatement *isAsmBlockStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
143 #ifdef _DH
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
144 int incontract;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
145 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
146 virtual ScopeStatement *isScopeStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
147 virtual Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
148 Statement *semanticScope(Scope *sc, Statement *sbreak, Statement *scontinue);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
149 virtual int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
150 virtual int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
151 virtual int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
152 virtual int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
153 virtual int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
154 virtual void scopeCode(Statement **sentry, Statement **sexit, Statement **sfinally);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
155 virtual Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
156 virtual Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
157
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
158 virtual int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
159 virtual Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
160 virtual Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
161
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
162 // Back end
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
163 virtual void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
164
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
165 // Avoid dynamic_cast
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
166 virtual DeclarationStatement *isDeclarationStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
167 virtual CompoundStatement *isCompoundStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
168 virtual ReturnStatement *isReturnStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
169 virtual IfStatement *isIfStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
170 virtual CaseStatement* isCaseStatement() { return NULL; }
945
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
171
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
172 // LDC
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
173 virtual void toNakedIR(IRState *irs);
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
174 virtual AsmBlockStatement* endsWithAsm();
336
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
177 struct ExpStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
178 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
179 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
180
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
181 ExpStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
182 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
183 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
184 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
185 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
186 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
187
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
188 int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
189 Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
190 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
191
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
192 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
193
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 // 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
195 void toNakedIR(IRState *irs);
336
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
198 struct CompileStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
199 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
200 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
201
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
202 CompileStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
203 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
204 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
205 Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
206 Statement *semantic(Scope *sc);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
209 struct DeclarationStatement : ExpStatement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
210 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
211 // Doing declarations as an expression, rather than a statement,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
212 // makes inlining functions much easier.
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
213
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
214 DeclarationStatement(Loc loc, Dsymbol *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
215 DeclarationStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
216 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
217 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
218 void scopeCode(Statement **sentry, Statement **sexit, Statement **sfinally);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
219
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
220 DeclarationStatement *isDeclarationStatement() { return this; }
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
223 struct CompoundStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
224 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
225 Statements *statements;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
226
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
227 CompoundStatement(Loc loc, Statements *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
228 CompoundStatement(Loc loc, Statement *s1, Statement *s2);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
229 virtual Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
230 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
231 virtual Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
232 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
233 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
234 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
235 virtual Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
236 ReturnStatement *isReturnStatement();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
237 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
238
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
239 int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
240 Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
241 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
242
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
243 virtual void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
244
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
245 // 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
246 virtual void toNakedIR(IRState *irs);
945
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
247 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
248
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
249 virtual CompoundStatement *isCompoundStatement() { return this; }
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
252 /* 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
253 * 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
254 */
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
255 struct UnrolledLoopStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
256 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
257 Statements *statements;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
258 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
259
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
260 UnrolledLoopStatement(Loc loc, Statements *statements);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
261 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
262 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
263 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
264 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
265 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
266 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
267 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
268 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
269 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
270
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
271 int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
272 Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
273 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
274
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
275 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
278 struct ScopeStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
279 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
280 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
281
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
282 ScopeStatement(Loc loc, Statement *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
283 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
284 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
285 ScopeStatement *isScopeStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
286 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
287 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
288 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
289 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
290 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
291 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
292 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
293
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
294 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
295
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
296 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
299 struct WhileStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
300 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
301 Expression *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
302 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
303 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
304
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
305 WhileStatement(Loc loc, Expression *c, Statement *b);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
306 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
307 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
308 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
309 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
310 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
311 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
312 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
313 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
314 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
315
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
316 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
317
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
318 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
321 struct DoStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
322 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
323 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
324 Expression *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
325 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
326
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
327 DoStatement(Loc loc, Statement *b, Expression *c);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
328 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
329 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
330 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
331 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
332 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
333 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
334 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
335 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
336 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
337
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
338 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
339
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
340 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
343 struct ForStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
344 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
345 Statement *init;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
346 Expression *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
347 Expression *increment;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
348 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
349 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
350
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
351 ForStatement(Loc loc, Statement *init, Expression *condition, Expression *increment, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
352 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
353 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
354 void scopeCode(Statement **sentry, Statement **sexit, Statement **sfinally);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
355 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
356 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
357 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
358 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
359 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
360 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
361 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
362
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
363 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
364
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
365 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
368 struct ForeachStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
369 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
370 enum TOK op; // TOKforeach or TOKforeach_reverse
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
371 Arguments *arguments; // array of Argument*'s
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
372 Expression *aggr;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
373 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
374 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
375
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
376 VarDeclaration *key;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
377 VarDeclaration *value;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
378
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
379 FuncDeclaration *func; // function we're lexically in
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
380
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
381 Array cases; // put breaks, continues, gotos and returns here
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
382 Array gotos; // forward referenced goto's go here
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
383
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
384 ForeachStatement(Loc loc, enum TOK op, Arguments *arguments, Expression *aggr, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
385 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
386 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
387 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
388 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
389 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
390 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
391 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
392 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
393 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
394
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
395 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
396
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
397 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
400 #if DMDV2
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
401 struct ForeachRangeStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
402 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
403 enum TOK op; // TOKforeach or TOKforeach_reverse
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
404 Argument *arg; // loop index variable
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
405 Expression *lwr;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
406 Expression *upr;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
407 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
408
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
409 VarDeclaration *key;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
410
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
411 ForeachRangeStatement(Loc loc, enum TOK op, Argument *arg,
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
412 Expression *lwr, Expression *upr, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
413 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
414 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
415 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
416 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
417 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
418 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
419 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
420 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
421 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
422
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
423 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
424
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
425 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
426 };
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
427 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
428
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
429 struct IfStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
430 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
431 Argument *arg;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
432 Expression *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
433 Statement *ifbody;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
434 Statement *elsebody;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
435
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
436 VarDeclaration *match; // for MatchExpression results
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
437
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
438 IfStatement(Loc loc, Argument *arg, Expression *condition, Statement *ifbody, Statement *elsebody);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
439 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
440 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
441 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
442 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
443 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
444 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
445 IfStatement *isIfStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
446
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
447 int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
448 Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
449 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
450
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
451 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
454 struct ConditionalStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
455 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
456 Condition *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
457 Statement *ifbody;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
458 Statement *elsebody;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
459
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
460 ConditionalStatement(Loc loc, Condition *condition, Statement *ifbody, Statement *elsebody);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
461 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
462 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
463 Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
464 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
465 int blockExit();
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
466
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
467 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
470 struct PragmaStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
471 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
472 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
473 Expressions *args; // array of Expression's
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
474 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
475
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
476 PragmaStatement(Loc loc, Identifier *ident, Expressions *args, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
477 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
478 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
479 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
480 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
481
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
482 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
485 struct StaticAssertStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
486 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
487 StaticAssert *sa;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
488
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
489 StaticAssertStatement(StaticAssert *sa);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
490 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
491 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
492
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
493 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
496 struct SwitchStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
497 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
498 Expression *condition;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
499 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
500
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
501 DefaultStatement *sdefault;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
502 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
503
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
504 Array gotoCases; // array of unresolved GotoCaseStatement's
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
505 Array *cases; // array of CaseStatement's
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
506 int hasNoDefault; // !=0 if no default statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
507
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
508 SwitchStatement(Loc loc, Expression *c, Statement *b);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
509 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
510 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
511 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
512 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
513 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
514 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
515 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
516
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
517 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
518
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
519 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
522 struct CaseStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
523 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
524 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
525 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
526 int index; // which case it is (since we sort this)
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
527 block *cblock; // back end: label for the block
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
528
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
529 CaseStatement(Loc loc, Expression *exp, Statement *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
530 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
531 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
532 int compare(Object *obj);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
533 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
534 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
535 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
536 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
537 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
538
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
539 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
540
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
541 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
542
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
543 CaseStatement* isCaseStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
544
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
545 // LDC
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
546 llvm::BasicBlock* bodyBB;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
547 llvm::ConstantInt* llvmIdx;
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
550 struct DefaultStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
551 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
552 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
553 #if IN_GCC
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
554 block *cblock; // back end: label for the block
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
555 #endif
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
556
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
557 DefaultStatement(Loc loc, Statement *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
558 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
559 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
560 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
561 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
562 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
563 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
564 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
565
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
566 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
567
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
568 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
569
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
570 // LDC
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
571 llvm::BasicBlock* bodyBB;
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
574 struct GotoDefaultStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
575 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
576 SwitchStatement *sw;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
577 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
578
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
579 GotoDefaultStatement(Loc loc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
580 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
581 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
582 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
583 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
584 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
585
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
586 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
589 struct GotoCaseStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
590 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
591 Expression *exp; // NULL, or which case to goto
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
592 CaseStatement *cs; // case statement it resolves to
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
593 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
594 SwitchStatement *sw;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
595
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
596 GotoCaseStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
597 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
598 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
599 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
600 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
601 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
602
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
603 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
606 struct SwitchErrorStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
607 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
608 SwitchErrorStatement(Loc loc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
609 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
610 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
611
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
612 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
615 struct ReturnStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
616 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
617 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
618 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
619
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
620 ReturnStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
621 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
622 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
623 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
624 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
625 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
626
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
627 int inlineCost(InlineCostState *ics);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
628 Expression *doInline(InlineDoState *ids);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
629 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
630
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
631 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
632
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
633 ReturnStatement *isReturnStatement() { return this; }
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
636 struct BreakStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
637 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
638 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
639 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
640
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
641 BreakStatement(Loc loc, Identifier *ident);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
642 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
643 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
644 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
645 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
646 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
647
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
648 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
649
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
650 // 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
651 LabelStatement *target;
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
654 struct ContinueStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
655 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
656 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
657 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
658
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
659 ContinueStatement(Loc loc, Identifier *ident);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
660 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
661 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
662 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
663 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
664 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
665
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
666 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
667
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
668 // 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
669 LabelStatement *target;
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
672 struct SynchronizedStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
673 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
674 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
675 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
676 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
677
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
678 SynchronizedStatement(Loc loc, Expression *exp, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
679 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
680 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
681 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
682 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
683 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
684 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
685 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
686
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
687 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
688
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
689 // Back end
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
690 elem *esync;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
691 SynchronizedStatement(Loc loc, elem *esync, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
692 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
693 llvm::Value* llsync;
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
696 struct WithStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
697 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
698 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
699 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
700 VarDeclaration *wthis;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
701
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
702 WithStatement(Loc loc, Expression *exp, Statement *body);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
703 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
704 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
705 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
706 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
707 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
708
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
709 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
710
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
711 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
714 struct TryCatchStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
715 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
716 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
717 Array *catches;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
718
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
719 TryCatchStatement(Loc loc, Statement *body, Array *catches);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
720 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
721 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
722 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
723 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
724 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
725
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
726 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
727
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
728 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
729 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
730 TryCatchStatement *isTryCatchStatement() { return this; }
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
733 struct Catch : Object
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
734 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
735 Loc loc;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
736 Type *type;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
737 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
738 VarDeclaration *var;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
739 Statement *handler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
740
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
741 Catch(Loc loc, Type *t, Identifier *id, Statement *handler);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
742 Catch *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
743 void semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
744 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
745 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
748 struct TryFinallyStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
749 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
750 Statement *body;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
751 Statement *finalbody;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
752 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
753
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
754 TryFinallyStatement(Loc loc, Statement *body, Statement *finalbody);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
755 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
756 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
757 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
758 int hasBreak();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
759 int hasContinue();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
760 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
761 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
762
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
763 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
764
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
765 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
768 struct OnScopeStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
769 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
770 TOK tok;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
771 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
772
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
773 OnScopeStatement(Loc loc, TOK tok, Statement *statement);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
774 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
775 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
776 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
777 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
778 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
779 void scopeCode(Statement **sentry, Statement **sexit, Statement **sfinally);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
780
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
781 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
784 struct ThrowStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
785 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
786 Expression *exp;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
787
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
788 ThrowStatement(Loc loc, Expression *exp);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
789 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
790 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
791 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
792 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
793
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
794 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
795
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
796 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
799 struct VolatileStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
800 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
801 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
802 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
803
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
804 VolatileStatement(Loc loc, Statement *statement);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
805 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
806 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
807 Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
808 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
809 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
810
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
811 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
812
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
813 void toIR(IRState *irs);
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
816 struct GotoStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
817 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
818 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
819 LabelDsymbol *label;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
820 TryFinallyStatement *tf;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
821 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
822
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
823 GotoStatement(Loc loc, Identifier *ident);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
824 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
825 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
826 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
827 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
828
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
829 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
830 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
831 GotoStatement *isGotoStatement() { return this; }
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
834 struct LabelStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
835 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
836 Identifier *ident;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
837 Statement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
838 TryFinallyStatement *tf;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
839 EnclosingHandler* enclosinghandler;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
840 block *lblock; // back end
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
841 int isReturnLabel;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
842
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
843 LabelStatement(Loc loc, Identifier *ident, Statement *statement);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
844 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
845 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
846 Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
847 int usesEH();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
848 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
849 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
850 Expression *interpret(InterState *istate);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
851 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
852
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
853 Statement *inlineScan(InlineScanState *iss);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
854
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
855 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
856
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
857 // LDC
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
858 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
859 void toNakedIR(IRState *irs);
336
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
862 struct LabelDsymbol : Dsymbol
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
863 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
864 LabelStatement *statement;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
865
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
866 LabelDsymbol(Identifier *ident);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
867 LabelDsymbol *isLabel();
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
870 struct AsmStatement : Statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
871 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
872 Token *tokens;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
873 code *asmcode;
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
874 unsigned asmalign; // alignment of this statement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
875 unsigned refparam; // !=0 if function parameter is referenced
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
876 unsigned naked; // !=0 if function is to be naked
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
877
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
878 AsmStatement(Loc loc, Token *tokens);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
879 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
880 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
881 int blockExit();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
882 int comeFrom();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
883
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
884 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
885 virtual AsmStatement *isAsmStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
886
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
887 void toIR(IRState *irs);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
888
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 510
diff changeset
889 // LDC
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
890 // non-zero if this is a branch, contains the target labels identifier
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
891 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
892
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
893 void toNakedIR(IRState *irs);
336
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
896 struct AsmBlockStatement : CompoundStatement
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
897 {
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
898 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
899 TryFinallyStatement* tf;
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
900
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
901 AsmBlockStatement(Loc loc, Statements *s);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
902 Statements *flatten(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
903 Statement *syntaxCopy();
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
904 Statement *semantic(Scope *sc);
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
905
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
906 CompoundStatement *isCompoundStatement() { return NULL; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
907 AsmBlockStatement *isAsmBlockStatement() { return this; }
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
908
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
909 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
910 void toNakedIR(IRState *irs);
945
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
911 AsmBlockStatement* endsWithAsm();
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
912
03d7c4aac654 SWITCHED TO LLVM 2.5 !
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 920
diff changeset
913 llvm::Value* abiret;
336
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
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 309
diff changeset
916 #endif /* DMD_STATEMENT_H */