annotate dmd/expression.h @ 1083:c1e9f612e2e2

Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists previous code that allowed dual operand form of fstp but dissallowed the single operand form accidently
author Kelly Wilson <wilsonk cpsc.ucalgary.ca>
date Tue, 10 Mar 2009 06:23:26 -0600
parents 27a379f288bf
children b30fe7e1dbb9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
2 // Compiler implementation of the D programming language
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
3 // Copyright (c) 1999-2008 by Digital Mars
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
4 // All Rights Reserved
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
5 // written by Walter Bright
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
6 // http://www.digitalmars.com
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
7 // License for redistribution is by either the Artistic License
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
9 // See the included readme.txt for details.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
10
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
11 #ifndef DMD_EXPRESSION_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
12 #define DMD_EXPRESSION_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
13
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
14 #include "mars.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
15 #include "identifier.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
16 #include "lexer.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
17 #include "arraytypes.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
18
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
19 struct Type;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
20 struct Scope;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
21 struct TupleDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
22 struct VarDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
23 struct FuncDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
24 struct FuncLiteralDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
25 struct Declaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
26 struct CtorDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
27 struct NewDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
28 struct Dsymbol;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
29 struct Import;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
30 struct Module;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
31 struct ScopeDsymbol;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
32 struct InlineCostState;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
33 struct InlineDoState;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
34 struct InlineScanState;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
35 struct Expression;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
36 struct Declaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
37 struct AggregateDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
38 struct StructDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
39 struct TemplateInstance;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
40 struct TemplateDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
41 struct ClassDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
42 struct HdrGenState;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
43 struct BinExp;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
44 struct InterState;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
45 struct Symbol; // back end symbol
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
46 struct OverloadSet;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
47 namespace llvm
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
48 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
49 class Constant;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
50 class ConstantInt;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
51 }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
52
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
53 enum TOK;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
54
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
55 // Back end
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
56 struct IRState;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
57 struct dt_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
58
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
59 #if IN_LLVM
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
60 struct DValue;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
61 typedef DValue elem;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
62 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
63 #ifdef IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
64 union tree_node; typedef union tree_node elem;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
65 #else
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
66 struct elem;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
67 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
68 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
69
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
70 void initPrecedence();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
71
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
72 Expression *resolveProperties(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
73 void accessCheck(Loc loc, Scope *sc, Expression *e, Declaration *d);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
74 Dsymbol *search_function(AggregateDeclaration *ad, Identifier *funcid);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
75 void inferApplyArgTypes(enum TOK op, Arguments *arguments, Expression *aggr);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
76 void argExpTypesToCBuffer(OutBuffer *buf, Expressions *arguments, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
77 void argsToCBuffer(OutBuffer *buf, Expressions *arguments, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
78 void expandTuples(Expressions *exps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
79 FuncDeclaration *hasThis(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
80 Expression *fromConstInitializer(int result, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
81
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
82 struct Expression : Object
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
83 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
84 Loc loc; // file location
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
85 enum TOK op; // handy to minimize use of dynamic_cast
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
86 Type *type; // !=NULL means that semantic() has been run
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
87 int size; // # of bytes in Expression so we can copy() it
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
88
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
89 Expression(Loc loc, enum TOK op, int size);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
90 Expression *copy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
91 virtual Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
92 virtual Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
93
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
94 int dyncast() { return DYNCAST_EXPRESSION; } // kludge for template.isExpression()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
95
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
96 void print();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
97 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
98 virtual void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
99 void error(const char *format, ...);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
100 virtual void rvalue();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
101
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
102 static Expression *combine(Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
103 static Expressions *arraySyntaxCopy(Expressions *exps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
104
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
105 virtual integer_t toInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
106 virtual uinteger_t toUInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
107 virtual real_t toReal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
108 virtual real_t toImaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
109 virtual complex_t toComplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
110 virtual void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
111 virtual void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
112 virtual Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
113 virtual Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
114 Expression *implicitCastTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
115 virtual MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
116 virtual Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
117 virtual void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
118 void checkScalar();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
119 void checkNoBool();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
120 Expression *checkIntegral();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
121 Expression *checkArithmetic();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
122 void checkDeprecated(Scope *sc, Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
123 virtual Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
124 Expression *checkToPointer();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
125 Expression *addressOf(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
126 Expression *deref();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
127 Expression *integralPromotions(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
128
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
129 Expression *toDelegate(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
130 virtual void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
131
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
132 virtual Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
133 #define WANTflags 1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
134 #define WANTvalue 2
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
135 #define WANTinterpret 4
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
136
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
137 virtual Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
138
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
139 virtual int isConst();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
140 virtual int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
141 virtual int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
142 virtual int checkSideEffect(int flag);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
143 virtual int canThrow();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
144
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
145 virtual int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
146 virtual Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
147 virtual Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
148
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
149 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
150 virtual int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
151 virtual Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
152 virtual Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
153
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
154 // For array ops
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
155 virtual void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
156 virtual Expression *buildArrayLoop(Arguments *fparams);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
157
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
158 // Back end
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
159 virtual elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
160 virtual dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
161 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
162 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
163 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
164
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
165 struct IntegerExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
166 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
167 integer_t value;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
168
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
169 IntegerExp(Loc loc, integer_t value, Type *type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
170 IntegerExp(integer_t value);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
171 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
172 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
173 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
174 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
175 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
176 integer_t toInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
177 real_t toReal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
178 real_t toImaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
179 complex_t toComplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
180 int isConst();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
181 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
182 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
183 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
184 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
185 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
186 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
187 dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
188 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
189 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
190 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
191
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
192 struct RealExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
193 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
194 real_t value;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
195
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
196 RealExp(Loc loc, real_t value, Type *type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
197 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
198 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
199 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
200 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
201 integer_t toInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
202 uinteger_t toUInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
203 real_t toReal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
204 real_t toImaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
205 complex_t toComplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
206 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
207 int isConst();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
208 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
209 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
210 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
211 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
212 dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
213 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
214 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
215 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
216
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
217 struct ComplexExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
218 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
219 complex_t value;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
220
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
221 ComplexExp(Loc loc, complex_t value, Type *type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
222 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
223 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
224 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
225 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
226 integer_t toInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
227 uinteger_t toUInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
228 real_t toReal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
229 real_t toImaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
230 complex_t toComplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
231 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
232 int isConst();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
233 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
234 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
235 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
236 #ifdef _DH
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
237 OutBuffer hexp;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
238 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
239 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
240 dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
241 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
242 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
243 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
244
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
245 struct IdentifierExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
246 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
247 Identifier *ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
248 Declaration *var;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
249
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
250 IdentifierExp(Loc loc, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
251 IdentifierExp(Loc loc, Declaration *var);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
252 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
253 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
254 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
255 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
256 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
257 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
258
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
259 struct DollarExp : IdentifierExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
260 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
261 DollarExp(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
262 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
263
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
264 struct DsymbolExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
265 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
266 Dsymbol *s;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
267
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
268 DsymbolExp(Loc loc, Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
269 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
270 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
271 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
272 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
273 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
274 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
275
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
276 struct ThisExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
277 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
278 Declaration *var;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
279
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
280 ThisExp(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
281 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
282 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
283 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
284 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
285 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
286
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
287 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
288 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
289 //Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
290
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
291 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
292 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
293
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
294 struct SuperExp : ThisExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
295 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
296 SuperExp(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
297 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
298 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
299 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
300
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
301 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
302 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
303 //Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
304 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
305
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
306 struct NullExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
307 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
308 unsigned char committed; // !=0 if type is committed
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
309
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
310 NullExp(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
311 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
312 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
313 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
314 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
315 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
316 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
317 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
318 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
319 dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
320 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
321 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
322 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
323
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
324 struct StringExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
325 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
326 void *string; // char, wchar, or dchar data
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
327 size_t len; // number of chars, wchars, or dchars
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
328 unsigned char sz; // 1: char, 2: wchar, 4: dchar
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
329 unsigned char committed; // !=0 if type is committed
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
330 unsigned char postfix; // 'c', 'w', 'd'
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
331
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
332 StringExp(Loc loc, char *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
333 StringExp(Loc loc, void *s, size_t len);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
334 StringExp(Loc loc, void *s, size_t len, unsigned char postfix);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
335 //Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
336 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
337 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
338 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
339 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
340 StringExp *toUTF8(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
341 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
342 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
343 int compare(Object *obj);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
344 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
345 unsigned charAt(size_t i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
346 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
347 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
348 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
349 dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
350 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
351 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
352 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
353
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
354 // Tuple
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
355
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
356 struct TupleExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
357 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
358 Expressions *exps;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
359
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
360 TupleExp(Loc loc, Expressions *exps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
361 TupleExp(Loc loc, TupleDeclaration *tup);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
362 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
363 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
364 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
365 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
366 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
367 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
368 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
369 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
370 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
371 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
372 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
373
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
374 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
375 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
376 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
377 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
378
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
379 struct ArrayLiteralExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
380 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
381 Expressions *elements;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
382
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
383 ArrayLiteralExp(Loc loc, Expressions *elements);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
384 ArrayLiteralExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
385
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
386 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
387 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
388 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
389 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
390 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
391 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
392 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
393 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
394 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
395 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
396 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
397 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
398 dt_t **toDt(dt_t **pdt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
399
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
400 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
401 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
402 Expression *inlineScan(InlineScanState *iss);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
403 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
404 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
405 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
406
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
407 struct AssocArrayLiteralExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
408 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
409 Expressions *keys;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
410 Expressions *values;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
411
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
412 AssocArrayLiteralExp(Loc loc, Expressions *keys, Expressions *values);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
413
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
414 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
415 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
416 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
417 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
418 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
419 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
420 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
421 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
422 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
423 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
424 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
425 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
426
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
427 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
428 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
429 Expression *inlineScan(InlineScanState *iss);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
430 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
431 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
432 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
433
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
434 struct StructLiteralExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
435 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
436 StructDeclaration *sd; // which aggregate this is for
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
437 Expressions *elements; // parallels sd->fields[] with
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
438 // NULL entries for fields to skip
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
439
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
440 Symbol *sym; // back end symbol to initialize with literal
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
441 size_t soffset; // offset from start of s
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
442 int fillHoles; // fill alignment 'holes' with zero
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
443
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
444 StructLiteralExp(Loc loc, StructDeclaration *sd, Expressions *elements);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
445
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
446 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
447 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
448 Expression *getField(Type *type, unsigned offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
449 int getFieldIndex(Type *type, unsigned offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
450 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
451 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
452 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
453 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
454 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
455 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
456 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
457 dt_t **toDt(dt_t **pdt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
458 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
459
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
460 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
461 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
462 Expression *inlineScan(InlineScanState *iss);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
463 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
464 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
465 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
466
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
467 struct TypeDotIdExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
468 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
469 Identifier *ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
470
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
471 TypeDotIdExp(Loc loc, Type *type, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
472 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
473 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
474 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
475 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
476 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
477
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
478 struct TypeExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
479 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
480 TypeExp(Loc loc, Type *type);
876
27a379f288bf Merged DMD 1.039
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 875
diff changeset
481 Expression *syntaxCopy();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
482 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
483 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
484 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
485 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
486 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
487
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
488 struct ScopeExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
489 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
490 ScopeDsymbol *sds;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
491
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
492 ScopeExp(Loc loc, ScopeDsymbol *sds);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
493 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
494 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
495 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
496 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
497 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
498
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
499 struct TemplateExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
500 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
501 TemplateDeclaration *td;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
502
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
503 TemplateExp(Loc loc, TemplateDeclaration *td);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
504 void rvalue();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
505 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
506 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
507
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
508 struct NewExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
509 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
510 /* thisexp.new(newargs) newtype(arguments)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
511 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
512 Expression *thisexp; // if !NULL, 'this' for class being allocated
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
513 Expressions *newargs; // Array of Expression's to call new operator
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
514 Type *newtype;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
515 Expressions *arguments; // Array of Expression's
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
516
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
517 CtorDeclaration *member; // constructor function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
518 NewDeclaration *allocator; // allocator function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
519 int onstack; // allocate on stack
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
520
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
521 NewExp(Loc loc, Expression *thisexp, Expressions *newargs,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
522 Type *newtype, Expressions *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
523 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
524 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
525 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
526 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
527 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
528 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
529
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
530 //int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
531 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
532 //Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
533 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
534
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
535 struct NewAnonClassExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
536 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
537 /* thisexp.new(newargs) class baseclasses { } (arguments)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
538 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
539 Expression *thisexp; // if !NULL, 'this' for class being allocated
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
540 Expressions *newargs; // Array of Expression's to call new operator
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
541 ClassDeclaration *cd; // class being instantiated
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
542 Expressions *arguments; // Array of Expression's to call class constructor
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
543
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
544 NewAnonClassExp(Loc loc, Expression *thisexp, Expressions *newargs,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
545 ClassDeclaration *cd, Expressions *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
546 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
547 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
548 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
549 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
550 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
551
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
552 // Offset from symbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
553
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
554 struct SymOffExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
555 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
556 Declaration *var;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
557 unsigned offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
558
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
559 SymOffExp(Loc loc, Declaration *var, unsigned offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
560 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
561 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
562 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
563 int isConst();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
564 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
565 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
566 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
567 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
568 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
569
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
570 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
571 dt_t **toDt(dt_t **pdt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
572 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
573
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
574 // Variable
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
575
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
576 struct VarExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
577 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
578 Declaration *var;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
579
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
580 VarExp(Loc loc, Declaration *var);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
581 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
582 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
583 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
584 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
585 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
586 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
587 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
588 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
589 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
590 Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
591 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
592 dt_t **toDt(dt_t **pdt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
593 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
594
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
595 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
596 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
597 //Expression *inlineScan(InlineScanState *iss);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
598 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
599 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
600 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
601
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
602 #if DMDV2
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
603 // Overload Set
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
604
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
605 struct OverExp : Expression
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
606 {
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
607 OverloadSet *vars;
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
608
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
609 OverExp(OverloadSet *s);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
610 int isLvalue();
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
611 Expression *toLvalue(Scope *sc, Expression *e);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
612 };
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
613 #endif
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
614
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
615 // Function/Delegate literal
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
616
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
617 struct FuncExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
618 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
619 FuncLiteralDeclaration *fd;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
620
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
621 FuncExp(Loc loc, FuncLiteralDeclaration *fd);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
622 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
623 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
624 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
625 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
626 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
627 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
628
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
629 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
630 //Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
631 //Expression *inlineScan(InlineScanState *iss);
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
632
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
633 // LDC
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
634 virtual llvm::Constant *toConstElem(IRState *irs);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
635 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
636
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
637 // Declaration of a symbol
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
638
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
639 struct DeclarationExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
640 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
641 Dsymbol *declaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
642
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
643 DeclarationExp(Loc loc, Dsymbol *declaration);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
644 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
645 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
646 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
647 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
648 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
649 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
650 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
651
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
652 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
653 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
654 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
655 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
656
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
657 struct TypeidExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
658 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
659 Type *typeidType;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
660
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
661 TypeidExp(Loc loc, Type *typeidType);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
662 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
663 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
664 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
665 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
666
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
667 #if DMDV2
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
668 struct TraitsExp : Expression
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
669 {
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
670 Identifier *ident;
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
671 Objects *args;
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
672
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
673 TraitsExp(Loc loc, Identifier *ident, Objects *args);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
674 Expression *syntaxCopy();
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
675 Expression *semantic(Scope *sc);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
676 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
677 };
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
678 #endif
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
679
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
680 struct HaltExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
681 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
682 HaltExp(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
683 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
684 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
685 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
686
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
687 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
688 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
689
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
690 struct IsExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
691 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
692 /* is(targ id tok tspec)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
693 * is(targ id == tok2)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
694 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
695 Type *targ;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
696 Identifier *id; // can be NULL
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
697 enum TOK tok; // ':' or '=='
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
698 Type *tspec; // can be NULL
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
699 enum TOK tok2; // 'struct', 'union', 'typedef', etc.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
700
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
701 IsExp(Loc loc, Type *targ, Identifier *id, enum TOK tok, Type *tspec, enum TOK tok2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
702 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
703 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
704 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
705 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
706
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
707 /****************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
708
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
709 struct UnaExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
710 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
711 Expression *e1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
712
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
713 UnaExp(Loc loc, enum TOK op, int size, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
714 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
715 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
716 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
717 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
718 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
719 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
720 Expression *interpretCommon(InterState *istate, Expression *(*fp)(Type *, Expression *));
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
721
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
722 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
723 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
724 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
725
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
726 Expression *op_overload(Scope *sc); // doesn't need to be virtual
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
727 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
728
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
729 struct BinExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
730 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
731 Expression *e1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
732 Expression *e2;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
733
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
734 BinExp(Loc loc, enum TOK op, int size, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
735 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
736 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
737 Expression *semanticp(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
738 Expression *commonSemanticAssign(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
739 Expression *commonSemanticAssignIntegral(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
740 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
741 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
742 Expression *scaleFactor(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
743 Expression *typeCombine(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
744 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
745 int isunsigned();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
746 void incompatibleTypes();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
747 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
748 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
749 Expression *interpretCommon(InterState *istate, Expression *(*fp)(Type *, Expression *, Expression *));
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
750 Expression *interpretCommon2(InterState *istate, Expression *(*fp)(TOK, Type *, Expression *, Expression *));
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
751 Expression *interpretAssignCommon(InterState *istate, Expression *(*fp)(Type *, Expression *, Expression *), int post = 0);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
752 Expression *arrayOp(Scope *sc);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
753
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
754 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
755 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
756 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
757
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
758 Expression *op_overload(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
759
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
760 elem *toElemBin(IRState *irs, int op);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
761 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
762
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
763 struct BinAssignExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
764 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
765 BinAssignExp(Loc loc, enum TOK op, int size, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
766 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
767 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
768
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
769 /****************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
770
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
771 struct CompileExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
772 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
773 CompileExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
774 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
775 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
776 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
777
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
778 struct FileExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
779 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
780 FileExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
781 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
782 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
783 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
784
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
785 struct AssertExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
786 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
787 Expression *msg;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
788
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
789 AssertExp(Loc loc, Expression *e, Expression *msg = NULL);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
790 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
791 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
792 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
793 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
794 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
795
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
796 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
797 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
798 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
799
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
800 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
801 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
802
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
803 struct DotIdExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
804 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
805 Identifier *ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
806
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
807 DotIdExp(Loc loc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
808 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
809 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
810 void dump(int i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
811 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
812
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
813 struct DotTemplateExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
814 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
815 TemplateDeclaration *td;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
816
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
817 DotTemplateExp(Loc loc, Expression *e, TemplateDeclaration *td);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
818 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
819 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
820
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
821 struct DotVarExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
822 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
823 Declaration *var;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
824
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
825 DotVarExp(Loc loc, Expression *e, Declaration *var);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
826 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
827 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
828 Expression *modifiableLvalue(Scope *sc, Expression *e);
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 860
diff changeset
829 Expression *optimize(int result);
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 860
diff changeset
830 Expression *interpret(InterState *istate);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
831 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
832 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
833 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
834 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
835
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
836 struct DotTemplateInstanceExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
837 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
838 TemplateInstance *ti;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
839
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
840 DotTemplateInstanceExp(Loc loc, Expression *e, TemplateInstance *ti);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
841 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
842 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
843 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
844 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
845 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
846
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
847 struct DelegateExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
848 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
849 FuncDeclaration *func;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
850
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
851 DelegateExp(Loc loc, Expression *e, FuncDeclaration *func);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
852 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
853 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
854 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
855 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
856 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
857
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
858 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
859 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
860 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
861
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
862 struct DotTypeExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
863 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
864 Dsymbol *sym; // symbol that represents a type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
865
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
866 DotTypeExp(Loc loc, Expression *e, Dsymbol *sym);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
867 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
868 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
869 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
870 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
871
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
872 struct CallExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
873 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
874 Expressions *arguments; // function arguments
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
875
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
876 CallExp(Loc loc, Expression *e, Expressions *exps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
877 CallExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
878 CallExp(Loc loc, Expression *e, Expression *earg1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
879 CallExp(Loc loc, Expression *e, Expression *earg1, Expression *earg2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
880
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
881 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
882 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
883 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
884 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
885 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
886 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
887 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
888 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
889 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
890 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
891
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
892 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
893 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
894 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
895 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
896
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
897 struct AddrExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
898 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
899 AddrExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
900 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
901 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
902 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
903 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
904 Expression *optimize(int result);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
905 // LDC
459
9db9099583ca Implement a rough AddrExp::toConstElem()
Christian Kamm <kamm incasoftware de>
parents: 336
diff changeset
906 virtual llvm::Constant *toConstElem(IRState *irs);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
907 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
908
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
909 struct PtrExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
910 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
911 PtrExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
912 PtrExp(Loc loc, Expression *e, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
913 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
914 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
915 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
916 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
917 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
918 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
919 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
920
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
921 struct NegExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
922 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
923 NegExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
924 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
925 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
926 Expression *interpret(InterState *istate);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
927 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
928 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
929
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
930 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
931 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
932
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
933 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
934 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
935
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
936 struct UAddExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
937 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
938 UAddExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
939 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
940
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
941 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
942 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
943 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
944
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
945 struct ComExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
946 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
947 ComExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
948 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
949 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
950 Expression *interpret(InterState *istate);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
951 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
952 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
953
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
954 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
955 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
956
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
957 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
958 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
959
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
960 struct NotExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
961 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
962 NotExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
963 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
964 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
965 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
966 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
967 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
968 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
969
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
970 struct BoolExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
971 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
972 BoolExp(Loc loc, Expression *e, Type *type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
973 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
974 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
975 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
976 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
977 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
978 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
979
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
980 struct DeleteExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
981 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
982 DeleteExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
983 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
984 Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
985 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
986 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
987 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
988 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
989
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
990 struct CastExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
991 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
992 // Possible to cast to one type while painting to another type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
993 Type *to; // type to cast to
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
994
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
995 CastExp(Loc loc, Expression *e, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
996 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
997 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
998 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
999 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1000 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1001 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1002 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1003 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1004
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1005 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1006 Identifier *opId();
619
722630261d62 Implemented constant pointer casts (like casting function pointer to void* as a constant global initializer)
tomas@myhost
parents: 599
diff changeset
1007
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
1008 // LDC
619
722630261d62 Implemented constant pointer casts (like casting function pointer to void* as a constant global initializer)
tomas@myhost
parents: 599
diff changeset
1009 virtual llvm::Constant *toConstElem(IRState *irs);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1010 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1011
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1012
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1013 struct SliceExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1014 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1015 Expression *upr; // NULL if implicit 0
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1016 Expression *lwr; // NULL if implicit [length - 1]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1017 VarDeclaration *lengthVar;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1018
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1019 SliceExp(Loc loc, Expression *e1, Expression *lwr, Expression *upr);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1020 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1021 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1022 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1023 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1024 Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1025 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1026 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1027 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1028 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1029 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1030 void scanForNestedRef(Scope *sc);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1031 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1032 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1033
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1034 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1035 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1036 Expression *inlineScan(InlineScanState *iss);
860
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1037
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1038 // LDC
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1039 virtual llvm::Constant *toConstElem(IRState *irs);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1040 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1041
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1042 struct ArrayLengthExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1043 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1044 ArrayLengthExp(Loc loc, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1045 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1046 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1047 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1048 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1049 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1050 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1051
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1052 // e1[a0,a1,a2,a3,...]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1053
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1054 struct ArrayExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1055 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1056 Expressions *arguments; // Array of Expression's
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1057
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1058 ArrayExp(Loc loc, Expression *e1, Expressions *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1059 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1060 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1061 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1062 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1063 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1064
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1065 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1066 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1067
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1068 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1069 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1070 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1071 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1072
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1073 /****************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1074
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1075 struct DotExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1076 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1077 DotExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1078 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1079 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1080
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1081 struct CommaExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1082 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1083 CommaExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1084 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1085 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1086 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1087 Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1088 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1089 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1090 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1091 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1092 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1093 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1094
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1095 struct IndexExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1096 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1097 VarDeclaration *lengthVar;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1098 int modifiable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1099
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1100 IndexExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1101 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1102 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1103 Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1104 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1105 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1106 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1107 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1108 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1109
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1110 elem *toElem(IRState *irs);
860
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1111 // LDC
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1112 virtual llvm::Constant *toConstElem(IRState *irs);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1113 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1114
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1115 /* For both i++ and i--
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1116 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1117 struct PostExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1118 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1119 PostExp(enum TOK op, Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1120 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1121 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1122 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1123 Identifier *opId(); // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1124 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1125 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1126
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1127 struct AssignExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1128 { int ismemset; // !=0 if setting the contents of an array
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1129
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1130 AssignExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1131 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1132 Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1133 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1134 Identifier *opId(); // For operator overloading
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1135 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1136 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1137 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1138 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1139
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1140 #define ASSIGNEXP(op) \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1141 struct op##AssignExp : BinExp \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1142 { \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1143 op##AssignExp(Loc loc, Expression *e1, Expression *e2); \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1144 Expression *semantic(Scope *sc); \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1145 Expression *interpret(InterState *istate); \
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1146 X(void buildArrayIdent(OutBuffer *buf, Expressions *arguments);) \
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1147 X(Expression *buildArrayLoop(Arguments *fparams);) \
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1148 \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1149 Identifier *opId(); /* For operator overloading */ \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1150 \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1151 elem *toElem(IRState *irs); \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1152 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1153
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1154 #define X(a) a
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1155 ASSIGNEXP(Add)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1156 ASSIGNEXP(Min)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1157 ASSIGNEXP(Mul)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1158 ASSIGNEXP(Div)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1159 ASSIGNEXP(Mod)
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1160 ASSIGNEXP(And)
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1161 ASSIGNEXP(Or)
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1162 ASSIGNEXP(Xor)
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1163 #undef X
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1164
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1165 #define X(a)
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1166
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1167 ASSIGNEXP(Shl)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1168 ASSIGNEXP(Shr)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1169 ASSIGNEXP(Ushr)
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1170 ASSIGNEXP(Cat)
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1171
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1172 #undef X
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1173 #undef ASSIGNEXP
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1174
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1175 struct AddExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1176 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1177 AddExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1178 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1179 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1180 Expression *interpret(InterState *istate);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1181 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1182 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1183
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1184 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1185 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1186 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1187 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1188
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1189 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1190 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1191
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1192 struct MinExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1193 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1194 MinExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1195 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1196 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1197 Expression *interpret(InterState *istate);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1198 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1199 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1200
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1201 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1202 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1203 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1204
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1205 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1206 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1207
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1208 struct CatExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1209 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1210 CatExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1211 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1212 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1213 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1214
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1215 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1216 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1217 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1218
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1219 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1220 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1221
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1222 struct MulExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1223 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1224 MulExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1225 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1226 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1227 Expression *interpret(InterState *istate);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1228 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1229 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1230
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1231 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1232 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1233 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1234 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1235
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1236 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1237 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1238
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1239 struct DivExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1240 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1241 DivExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1242 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1243 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1244 Expression *interpret(InterState *istate);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1245 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1246 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1247
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1248 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1249 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1250 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1251
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1252 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1253 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1254
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1255 struct ModExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1256 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1257 ModExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1258 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1259 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1260 Expression *interpret(InterState *istate);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1261 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1262 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1263
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1264 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1265 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1266 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1267
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1268 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1269 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1270
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1271 struct ShlExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1272 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1273 ShlExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1274 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1275 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1276 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1277
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1278 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1279 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1280 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1281
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1282 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1283 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1284
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1285 struct ShrExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1286 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1287 ShrExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1288 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1289 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1290 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1291
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1292 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1293 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1294 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1295
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1296 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1297 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1298
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1299 struct UshrExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1300 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1301 UshrExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1302 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1303 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1304 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1305
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1306 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1307 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1308 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1309
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1310 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1311 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1312
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1313 struct AndExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1314 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1315 AndExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1316 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1317 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1318 Expression *interpret(InterState *istate);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1319 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1320 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1321
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1322 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1323 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1324 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1325 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1326
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1327 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1328 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1329
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1330 struct OrExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1331 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1332 OrExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1333 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1334 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1335 Expression *interpret(InterState *istate);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1336 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1337 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1338
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1339 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1340 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1341 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1342 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1343
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1344 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1345 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1346
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1347 struct XorExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1348 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1349 XorExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1350 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1351 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1352 Expression *interpret(InterState *istate);
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1353 void buildArrayIdent(OutBuffer *buf, Expressions *arguments);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1354 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1355
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1356 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1357 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1358 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1359 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1360
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1361 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1362 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1363
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1364 struct OrOrExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1365 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1366 OrOrExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1367 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1368 Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1369 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1370 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1371 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1372 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1373 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1374 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1375
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1376 struct AndAndExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1377 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1378 AndAndExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1379 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1380 Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1381 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1382 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1383 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1384 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1385 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1386 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1387
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1388 struct CmpExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1389 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1390 CmpExp(enum TOK op, Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1391 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1392 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1393 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1394 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1395
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1396 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1397 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1398 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1399
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1400 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1401 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1402
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1403 struct InExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1404 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1405 InExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1406 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1407 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1408
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1409 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1410 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1411 Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1412
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1413 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1414 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1415
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1416 struct RemoveExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1417 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1418 RemoveExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1419 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1420 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1421
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1422 // == and !=
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1423
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1424 struct EqualExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1425 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1426 EqualExp(enum TOK op, Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1427 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1428 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1429 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1430 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1431
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1432 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1433 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1434 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1435
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1436 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1437 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1438
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1439 // === and !===
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1440
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1441 struct IdentityExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1442 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1443 IdentityExp(enum TOK op, Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1444 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1445 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1446 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1447 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1448 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1449 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1450
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1451 /****************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1452
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1453 struct CondExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1454 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1455 Expression *econd;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1456
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1457 CondExp(Loc loc, Expression *econd, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1458 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1459 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1460 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1461 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1462 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1463 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1464 Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1465 Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1466 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1467 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1468 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1469 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1470 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1471
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1472 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1473 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1474 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1475
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1476 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1477 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1478
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1479 #if DMDV2
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1480 /****************************************************************/
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1481
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1482 struct DefaultInitExp : Expression
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1483 {
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1484 enum TOK subop; // which of the derived classes this is
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1485
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1486 DefaultInitExp(Loc loc, enum TOK subop, int size);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1487 virtual Expression *resolve(Loc loc, Scope *sc) = 0;
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1488 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1489 };
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1490
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1491 struct FileInitExp : DefaultInitExp
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1492 {
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1493 FileInitExp(Loc loc);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1494 Expression *semantic(Scope *sc);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1495 Expression *resolve(Loc loc, Scope *sc);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1496 };
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1497
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1498 struct LineInitExp : DefaultInitExp
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1499 {
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1500 LineInitExp(Loc loc);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1501 Expression *semantic(Scope *sc);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1502 Expression *resolve(Loc loc, Scope *sc);
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1503 };
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1504 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1505
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1506 /****************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1507
599
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1508 #if IN_LLVM
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1509
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
1510 // this stuff is strictly LDC
599
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1511
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1512 struct GEPExp : UnaExp
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1513 {
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1514 unsigned index;
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1515 Identifier* ident;
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1516
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1517 GEPExp(Loc loc, Expression* e, Identifier* id, unsigned idx);
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1518 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1519 Expression *toLvalue(Scope *sc, Expression *e);
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1520
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1521 elem *toElem(IRState *irs);
860
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1522 llvm::Constant *toConstElem(IRState *irs);
599
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1523 };
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1524
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1525 #endif
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1526
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1527 /****************************************************************/
4435f57956e7 Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 588
diff changeset
1528
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1529 /* Special values used by the interpreter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1530 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1531 #define EXP_CANT_INTERPRET ((Expression *)1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1532 #define EXP_CONTINUE_INTERPRET ((Expression *)2)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1533 #define EXP_BREAK_INTERPRET ((Expression *)3)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1534 #define EXP_GOTO_INTERPRET ((Expression *)4)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1535 #define EXP_VOID_INTERPRET ((Expression *)5)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1536
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1537 Expression *expType(Type *type, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1538
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1539 Expression *Neg(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1540 Expression *Com(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1541 Expression *Not(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1542 Expression *Bool(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1543 Expression *Cast(Type *type, Type *to, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1544 Expression *ArrayLength(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1545 Expression *Ptr(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1546
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1547 Expression *Add(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1548 Expression *Min(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1549 Expression *Mul(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1550 Expression *Div(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1551 Expression *Mod(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1552 Expression *Shl(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1553 Expression *Shr(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1554 Expression *Ushr(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1555 Expression *And(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1556 Expression *Or(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1557 Expression *Xor(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1558 Expression *Index(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1559 Expression *Cat(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1560
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1561 Expression *Equal(enum TOK op, Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1562 Expression *Cmp(enum TOK op, Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1563 Expression *Identity(enum TOK op, Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1564
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1565 Expression *Slice(Type *type, Expression *e1, Expression *lwr, Expression *upr);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1566
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1567 #endif /* DMD_EXPRESSION_H */