annotate dmd/expression.h @ 1138:4c8bb03e4fbc

Update DtoConstFP() to be correct after LLVM r67562, which changed the way the APFloat constructor expects its i80 APInts to be formatted. (They're now actually consistent with the x87 format)
author Frits van Bommel <fvbommel wxs.nl>
date Tue, 24 Mar 2009 15:24:59 +0100
parents b30fe7e1dbb9
children 1860414bf3b7
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);
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 876
diff changeset
81 int arrayExpressionCanThrow(Expressions *exps);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
82
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
83 struct Expression : Object
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
84 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
85 Loc loc; // file location
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
86 enum TOK op; // handy to minimize use of dynamic_cast
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
87 Type *type; // !=NULL means that semantic() has been run
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
88 int size; // # of bytes in Expression so we can copy() it
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
89
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
90 Expression(Loc loc, enum TOK op, int size);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
91 Expression *copy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
92 virtual Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
93 virtual Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
94
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
95 int dyncast() { return DYNCAST_EXPRESSION; } // kludge for template.isExpression()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
96
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
97 void print();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
98 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
99 virtual void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
100 void error(const char *format, ...);
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 876
diff changeset
101 void warning(const char *format, ...);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
102 virtual void rvalue();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
103
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
104 static Expression *combine(Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
105 static Expressions *arraySyntaxCopy(Expressions *exps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
106
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
107 virtual integer_t toInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
108 virtual uinteger_t toUInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
109 virtual real_t toReal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
110 virtual real_t toImaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
111 virtual complex_t toComplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
112 virtual void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
113 virtual void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
114 virtual Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
115 virtual Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
116 Expression *implicitCastTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
117 virtual MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
118 virtual Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
119 virtual void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
120 void checkScalar();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
121 void checkNoBool();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
122 Expression *checkIntegral();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
123 Expression *checkArithmetic();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
124 void checkDeprecated(Scope *sc, Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
125 virtual Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
126 Expression *checkToPointer();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
127 Expression *addressOf(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
128 Expression *deref();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
129 Expression *integralPromotions(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
130
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
131 Expression *toDelegate(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
132 virtual void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
133
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
134 virtual Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
135 #define WANTflags 1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
136 #define WANTvalue 2
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
137 #define WANTinterpret 4
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 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
140
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
141 virtual int isConst();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
142 virtual int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
143 virtual int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
144 virtual int checkSideEffect(int flag);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 159
diff changeset
145 virtual int canThrow();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
146
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
147 virtual int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
148 virtual Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
149 virtual Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
150
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
151 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
152 virtual int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
153 virtual Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
154 virtual Identifier *opId_r();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
155
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
156 // 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
157 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
158 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
159
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
160 // Back end
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
161 virtual elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
162 virtual dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
163 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
164 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
165 };
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 struct IntegerExp : Expression
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 integer_t value;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
170
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
171 IntegerExp(Loc loc, integer_t value, Type *type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
172 IntegerExp(integer_t value);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
173 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
174 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
175 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
176 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
177 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
178 integer_t toInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
179 real_t toReal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
180 real_t toImaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
181 complex_t toComplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
182 int isConst();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
183 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
184 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
185 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
186 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
187 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
188 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
189 dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
190 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
191 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
192 };
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 struct RealExp : Expression
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 real_t value;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
197
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
198 RealExp(Loc loc, real_t value, Type *type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
199 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
200 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
201 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
202 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
203 integer_t toInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
204 uinteger_t toUInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
205 real_t toReal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
206 real_t toImaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
207 complex_t toComplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
208 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
209 int isConst();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
210 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
211 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
212 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
213 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
214 dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
215 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
216 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
217 };
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 struct ComplexExp : Expression
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 complex_t value;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
222
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
223 ComplexExp(Loc loc, complex_t value, Type *type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
224 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
225 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
226 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
227 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
228 integer_t toInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
229 uinteger_t toUInteger();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
230 real_t toReal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
231 real_t toImaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
232 complex_t toComplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
233 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
234 int isConst();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
235 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
236 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
237 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
238 #ifdef _DH
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
239 OutBuffer hexp;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
240 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
241 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
242 dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
243 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
244 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
245 };
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 struct IdentifierExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
248 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
249 Identifier *ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
250 Declaration *var;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
251
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
252 IdentifierExp(Loc loc, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
253 IdentifierExp(Loc loc, Declaration *var);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
254 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
255 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
256 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
257 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
258 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
259 };
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 struct DollarExp : IdentifierExp
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 DollarExp(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
264 };
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 struct DsymbolExp : Expression
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 Dsymbol *s;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
269
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
270 DsymbolExp(Loc loc, Dsymbol *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
271 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
272 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
273 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
274 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
275 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
276 };
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 struct ThisExp : Expression
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 Declaration *var;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
281
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
282 ThisExp(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
283 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
284 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
285 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
286 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
287 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
288
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
289 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
290 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
291 //Expression *inlineScan(InlineScanState *iss);
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
294 };
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 struct SuperExp : ThisExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
297 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
298 SuperExp(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
299 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
300 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
301 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
302
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
303 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
304 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
305 //Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
306 };
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 struct NullExp : Expression
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 unsigned char committed; // !=0 if type is committed
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
311
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
312 NullExp(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
313 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
314 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
315 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
316 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
317 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
318 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
319 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
320 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
321 dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
322 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
323 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
324 };
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 struct StringExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
327 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
328 void *string; // char, wchar, or dchar data
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
329 size_t len; // number of chars, wchars, or dchars
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
330 unsigned char sz; // 1: char, 2: wchar, 4: dchar
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
331 unsigned char committed; // !=0 if type is committed
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
332 unsigned char postfix; // 'c', 'w', 'd'
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
333
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
334 StringExp(Loc loc, char *s);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
335 StringExp(Loc loc, void *s, size_t len);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
336 StringExp(Loc loc, void *s, size_t len, unsigned char postfix);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
337 //Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
338 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
339 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
340 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
341 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
342 StringExp *toUTF8(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
343 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
344 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
345 int compare(Object *obj);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
346 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
347 unsigned charAt(size_t i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
348 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
349 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
350 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
351 dt_t **toDt(dt_t **pdt);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
352 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
353 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
354 };
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 // Tuple
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 struct TupleExp : Expression
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 Expressions *exps;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
361
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
362 TupleExp(Loc loc, Expressions *exps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
363 TupleExp(Loc loc, TupleDeclaration *tup);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
364 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
365 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
366 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
367 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
368 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
369 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
370 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
371 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
372 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
373 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
374 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
375
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
376 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
377 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
378 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
379 };
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 struct ArrayLiteralExp : Expression
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 Expressions *elements;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
384
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
385 ArrayLiteralExp(Loc loc, Expressions *elements);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
386 ArrayLiteralExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
387
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
388 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
389 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
390 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
391 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
392 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
393 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
394 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
395 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
396 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
397 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
398 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
399 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
400 dt_t **toDt(dt_t **pdt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
401
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
402 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
403 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
404 Expression *inlineScan(InlineScanState *iss);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
405 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
406 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
407 };
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 struct AssocArrayLiteralExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
410 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
411 Expressions *keys;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
412 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 AssocArrayLiteralExp(Loc loc, Expressions *keys, Expressions *values);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
415
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
416 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
417 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
418 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
419 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
420 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
421 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
422 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
423 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
424 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
425 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
426 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
427 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
428
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
429 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
430 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
431 Expression *inlineScan(InlineScanState *iss);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
432 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
433 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
434 };
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 struct StructLiteralExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
437 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
438 StructDeclaration *sd; // which aggregate this is for
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
439 Expressions *elements; // parallels sd->fields[] with
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
440 // NULL entries for fields to skip
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
441
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
442 Symbol *sym; // back end symbol to initialize with literal
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
443 size_t soffset; // offset from start of s
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
444 int fillHoles; // fill alignment 'holes' with zero
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 StructLiteralExp(Loc loc, StructDeclaration *sd, Expressions *elements);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
447
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
448 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
449 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
450 Expression *getField(Type *type, unsigned offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
451 int getFieldIndex(Type *type, unsigned offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
452 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
453 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
454 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
455 void toMangleBuffer(OutBuffer *buf);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
456 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
457 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
458 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
459 dt_t **toDt(dt_t **pdt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
460 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
461
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
462 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
463 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
464 Expression *inlineScan(InlineScanState *iss);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
465 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
466 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
467 };
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 struct TypeDotIdExp : Expression
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 Identifier *ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
472
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
473 TypeDotIdExp(Loc loc, Type *type, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
474 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
475 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
476 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
477 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
478 };
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 struct TypeExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
481 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
482 TypeExp(Loc loc, Type *type);
876
27a379f288bf Merged DMD 1.039
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 875
diff changeset
483 Expression *syntaxCopy();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
484 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
485 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
486 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
487 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
488 };
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 struct ScopeExp : Expression
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 ScopeDsymbol *sds;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
493
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
494 ScopeExp(Loc loc, ScopeDsymbol *sds);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
495 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
496 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
497 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
498 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
499 };
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 struct TemplateExp : Expression
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 TemplateDeclaration *td;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
504
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
505 TemplateExp(Loc loc, TemplateDeclaration *td);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
506 void rvalue();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
507 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
508 };
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 struct NewExp : Expression
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 /* thisexp.new(newargs) newtype(arguments)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
513 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
514 Expression *thisexp; // if !NULL, 'this' for class being allocated
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
515 Expressions *newargs; // Array of Expression's to call new operator
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
516 Type *newtype;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
517 Expressions *arguments; // Array of Expression's
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
518
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
519 CtorDeclaration *member; // constructor function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
520 NewDeclaration *allocator; // allocator function
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
521 int onstack; // allocate on stack
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
522
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
523 NewExp(Loc loc, Expression *thisexp, Expressions *newargs,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
524 Type *newtype, Expressions *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
525 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
526 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
527 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
528 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
529 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
530 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
531
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
532 //int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
533 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
534 //Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
535 };
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 struct NewAnonClassExp : Expression
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 /* thisexp.new(newargs) class baseclasses { } (arguments)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
540 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
541 Expression *thisexp; // if !NULL, 'this' for class being allocated
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
542 Expressions *newargs; // Array of Expression's to call new operator
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
543 ClassDeclaration *cd; // class being instantiated
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
544 Expressions *arguments; // Array of Expression's to call class constructor
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
545
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
546 NewAnonClassExp(Loc loc, Expression *thisexp, Expressions *newargs,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
547 ClassDeclaration *cd, Expressions *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
548 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
549 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
550 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
551 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
552 };
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 // Offset from symbol
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 struct SymOffExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
557 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
558 Declaration *var;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
559 unsigned offset;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
560
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
561 SymOffExp(Loc loc, Declaration *var, unsigned offset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
562 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
563 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
564 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
565 int isConst();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
566 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
567 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
568 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
569 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
570 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
571
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
572 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
573 dt_t **toDt(dt_t **pdt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
574 };
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 // Variable
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 struct VarExp : Expression
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 Declaration *var;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
581
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
582 VarExp(Loc loc, Declaration *var);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
583 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
584 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
585 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
586 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
587 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
588 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
589 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
590 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
591 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
592 Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
593 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
594 dt_t **toDt(dt_t **pdt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
595 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
596
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
597 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
598 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
599 //Expression *inlineScan(InlineScanState *iss);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
600 // LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
601 virtual llvm::Constant *toConstElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
602 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
603
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
604 #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
605 // 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
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 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
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 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
610
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
611 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
612 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
613 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
614 };
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
615 #endif
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
616
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
617 // Function/Delegate literal
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 struct FuncExp : Expression
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 FuncLiteralDeclaration *fd;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
622
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
623 FuncExp(Loc loc, FuncLiteralDeclaration *fd);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
624 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
625 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
626 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
627 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
628 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
629 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
630
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
631 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
632 //Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
633 //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
634
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
635 // LDC
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
636 virtual llvm::Constant *toConstElem(IRState *irs);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
637 };
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 // Declaration of a symbol
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 struct DeclarationExp : Expression
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 Dsymbol *declaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
644
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
645 DeclarationExp(Loc loc, Dsymbol *declaration);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
646 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
647 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
648 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
649 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
650 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
651 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
652 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
653
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
654 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
655 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
656 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
657 };
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 struct TypeidExp : Expression
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 Type *typeidType;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
662
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
663 TypeidExp(Loc loc, Type *typeidType);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
664 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
665 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
666 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
667 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
668
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
669 #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
670 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
671 {
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
672 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
673 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
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
675 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
676 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
677 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
678 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
679 };
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
680 #endif
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
681
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
682 struct HaltExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
683 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
684 HaltExp(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
685 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
686 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
687 int checkSideEffect(int flag);
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
690 };
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 struct IsExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
693 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
694 /* is(targ id tok tspec)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
695 * is(targ id == tok2)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
696 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
697 Type *targ;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
698 Identifier *id; // can be NULL
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
699 enum TOK tok; // ':' or '=='
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
700 Type *tspec; // can be NULL
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
701 enum TOK tok2; // 'struct', 'union', 'typedef', etc.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
702
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
703 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
704 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
705 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
706 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
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 /****************************************************************/
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 struct UnaExp : Expression
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 Expression *e1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
714
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
715 UnaExp(Loc loc, enum TOK op, int size, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
716 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
717 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
718 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
719 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
720 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
721 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
722 Expression *interpretCommon(InterState *istate, Expression *(*fp)(Type *, Expression *));
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
723
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
724 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
725 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
726 Expression *inlineScan(InlineScanState *iss);
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 Expression *op_overload(Scope *sc); // doesn't need to be virtual
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
729 };
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 struct BinExp : Expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
732 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
733 Expression *e1;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
734 Expression *e2;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
735
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
736 BinExp(Loc loc, enum TOK op, int size, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
737 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
738 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
739 Expression *semanticp(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
740 Expression *commonSemanticAssign(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
741 Expression *commonSemanticAssignIntegral(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
742 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
743 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
744 Expression *scaleFactor(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
745 Expression *typeCombine(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
746 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
747 int isunsigned();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
748 void incompatibleTypes();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
749 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
750 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
751 Expression *interpretCommon(InterState *istate, Expression *(*fp)(Type *, Expression *, Expression *));
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
752 Expression *interpretCommon2(InterState *istate, Expression *(*fp)(TOK, Type *, Expression *, Expression *));
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
753 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
754 Expression *arrayOp(Scope *sc);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
755
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
756 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
757 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
758 Expression *inlineScan(InlineScanState *iss);
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 Expression *op_overload(Scope *sc);
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 elem *toElemBin(IRState *irs, int op);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
763 };
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 struct BinAssignExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
766 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
767 BinAssignExp(Loc loc, enum TOK op, int size, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
768 int checkSideEffect(int flag);
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 /****************************************************************/
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 struct CompileExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
774 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
775 CompileExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
776 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
777 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
778 };
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 struct FileExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
781 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
782 FileExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
783 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
784 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
785 };
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 struct AssertExp : UnaExp
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 Expression *msg;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
790
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
791 AssertExp(Loc loc, Expression *e, Expression *msg = NULL);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
792 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
793 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
794 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
795 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
796 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
797
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
798 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
799 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
800 Expression *inlineScan(InlineScanState *iss);
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
803 };
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 struct DotIdExp : UnaExp
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 Identifier *ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
808
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
809 DotIdExp(Loc loc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
810 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
811 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
812 void dump(int i);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
813 };
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 struct DotTemplateExp : UnaExp
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 TemplateDeclaration *td;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
818
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
819 DotTemplateExp(Loc loc, Expression *e, TemplateDeclaration *td);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
820 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
821 };
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 struct DotVarExp : UnaExp
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 Declaration *var;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
826
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
827 DotVarExp(Loc loc, Expression *e, Declaration *var);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
828 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
829 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
830 Expression *modifiableLvalue(Scope *sc, Expression *e);
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 860
diff changeset
831 Expression *optimize(int result);
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 860
diff changeset
832 Expression *interpret(InterState *istate);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
833 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
834 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
835 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
836 };
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 struct DotTemplateInstanceExp : UnaExp
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 TemplateInstance *ti;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
841
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
842 DotTemplateInstanceExp(Loc loc, Expression *e, TemplateInstance *ti);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
843 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
844 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
845 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
846 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
847 };
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 struct DelegateExp : UnaExp
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 FuncDeclaration *func;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
852
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
853 DelegateExp(Loc loc, Expression *e, FuncDeclaration *func);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
854 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
855 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
856 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
857 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
858 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
859
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
860 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
861 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
862 };
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 struct DotTypeExp : UnaExp
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 Dsymbol *sym; // symbol that represents a type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
867
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
868 DotTypeExp(Loc loc, Expression *e, Dsymbol *sym);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
869 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
870 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
871 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
872 };
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 struct CallExp : UnaExp
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 Expressions *arguments; // function arguments
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
877
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
878 CallExp(Loc loc, Expression *e, Expressions *exps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
879 CallExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
880 CallExp(Loc loc, Expression *e, Expression *earg1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
881 CallExp(Loc loc, Expression *e, Expression *earg1, Expression *earg2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
882
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
883 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
884 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
885 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
886 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
887 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
888 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
889 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
890 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
891 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
892 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
893
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
894 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
895 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
896 Expression *inlineScan(InlineScanState *iss);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
897 };
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 struct AddrExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
900 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
901 AddrExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
902 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
903 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
904 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
905 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
906 Expression *optimize(int result);
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
907 // LDC
459
9db9099583ca Implement a rough AddrExp::toConstElem()
Christian Kamm <kamm incasoftware de>
parents: 336
diff changeset
908 virtual llvm::Constant *toConstElem(IRState *irs);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
909 };
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 struct PtrExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
912 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
913 PtrExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
914 PtrExp(Loc loc, Expression *e, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
915 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
916 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
917 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
918 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
919 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
920 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
921 };
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 struct NegExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
924 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
925 NegExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
926 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
927 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
928 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
929 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
930 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
931
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
932 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
933 Identifier *opId();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
936 };
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 struct UAddExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
939 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
940 UAddExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
941 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
942
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
943 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
944 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
945 };
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 struct ComExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
948 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
949 ComExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
950 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
951 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
952 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
953 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
954 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
955
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
956 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
957 Identifier *opId();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
960 };
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 struct NotExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
963 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
964 NotExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
965 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
966 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
967 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
968 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
969 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
970 };
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 struct BoolExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
973 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
974 BoolExp(Loc loc, Expression *e, Type *type);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
975 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
976 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
977 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
978 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
979 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
980 };
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 struct DeleteExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
983 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
984 DeleteExp(Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
985 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
986 Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
987 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
988 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
989 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
990 };
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 struct CastExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
993 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
994 // Possible to cast to one type while painting to another type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
995 Type *to; // type to cast to
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
996
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
997 CastExp(Loc loc, Expression *e, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
998 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
999 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1000 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1001 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1002 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1003 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1004 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1005 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1006
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1007 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1008 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
1009
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
1010 // LDC
619
722630261d62 Implemented constant pointer casts (like casting function pointer to void* as a constant global initializer)
tomas@myhost
parents: 599
diff changeset
1011 virtual llvm::Constant *toConstElem(IRState *irs);
159
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
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 struct SliceExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1016 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1017 Expression *upr; // NULL if implicit 0
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1018 Expression *lwr; // NULL if implicit [length - 1]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1019 VarDeclaration *lengthVar;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1020
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1021 SliceExp(Loc loc, Expression *e1, Expression *lwr, Expression *upr);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1022 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1023 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1024 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1025 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1026 Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1027 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1028 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1029 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1030 void dump(int indent);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1031 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1032 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
1033 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
1034 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1035
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1036 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1037 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1038 Expression *inlineScan(InlineScanState *iss);
860
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1039
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1040 // LDC
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1041 virtual llvm::Constant *toConstElem(IRState *irs);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1042 };
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 struct ArrayLengthExp : UnaExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1045 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1046 ArrayLengthExp(Loc loc, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1047 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1048 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1049 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1050 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1051 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1052 };
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 // e1[a0,a1,a2,a3,...]
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 struct ArrayExp : UnaExp
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 Expressions *arguments; // Array of Expression's
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1059
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1060 ArrayExp(Loc loc, Expression *e1, Expressions *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1061 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1062 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1063 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1064 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1065 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1066
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1067 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1068 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1069
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1070 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1071 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1072 Expression *inlineScan(InlineScanState *iss);
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 /****************************************************************/
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 struct DotExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1078 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1079 DotExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1080 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1081 };
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 struct CommaExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1084 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1085 CommaExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1086 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1087 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1088 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1089 Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1090 int isBool(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1091 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1092 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1093 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1094 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1095 };
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 struct IndexExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1098 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1099 VarDeclaration *lengthVar;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1100 int modifiable;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1101
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1102 IndexExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1103 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1104 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1105 Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1106 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1107 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1108 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1109 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1110 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1111
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1112 elem *toElem(IRState *irs);
860
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1113 // LDC
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1114 virtual llvm::Constant *toConstElem(IRState *irs);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1115 };
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 /* For both i++ and i--
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 struct PostExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1120 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1121 PostExp(enum TOK op, Loc loc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1122 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1123 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1124 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1125 Identifier *opId(); // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1126 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1127 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1128
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1129 struct AssignExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1130 { int ismemset; // !=0 if setting the contents of an array
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1131
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1132 AssignExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1133 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1134 Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1135 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1136 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
1137 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
1138 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1139 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1140 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1141
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1142 #define ASSIGNEXP(op) \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1143 struct op##AssignExp : BinExp \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1144 { \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1145 op##AssignExp(Loc loc, Expression *e1, Expression *e2); \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1146 Expression *semantic(Scope *sc); \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1147 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
1148 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
1149 X(Expression *buildArrayLoop(Arguments *fparams);) \
159
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 Identifier *opId(); /* For operator overloading */ \
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 elem *toElem(IRState *irs); \
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1154 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1155
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1156 #define X(a) a
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1157 ASSIGNEXP(Add)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1158 ASSIGNEXP(Min)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1159 ASSIGNEXP(Mul)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1160 ASSIGNEXP(Div)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1161 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
1162 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
1163 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
1164 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
1165 #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
1166
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1167 #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
1168
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1169 ASSIGNEXP(Shl)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1170 ASSIGNEXP(Shr)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1171 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
1172 ASSIGNEXP(Cat)
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1173
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1174 #undef X
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1175 #undef ASSIGNEXP
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 struct AddExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1178 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1179 AddExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1180 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1181 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1182 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
1183 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
1184 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1185
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1186 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1187 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1188 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1189 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1192 };
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 struct MinExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1195 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1196 MinExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1197 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1198 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1199 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
1200 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
1201 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1202
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1203 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1204 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1205 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1208 };
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 struct CatExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1211 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1212 CatExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1213 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1214 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1215 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1216
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1217 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1218 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1219 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1222 };
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 struct MulExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1225 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1226 MulExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1227 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1228 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1229 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
1230 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
1231 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1232
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1233 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1234 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1235 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1236 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1239 };
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 struct DivExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1242 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1243 DivExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1244 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1245 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1246 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
1247 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
1248 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1249
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1250 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1251 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1252 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1255 };
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 struct ModExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1258 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1259 ModExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1260 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1261 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1262 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
1263 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
1264 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1265
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1266 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1267 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1268 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1271 };
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 struct ShlExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1274 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1275 ShlExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1276 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1277 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1278 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1279
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1280 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1281 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1282 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1285 };
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 struct ShrExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1288 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1289 ShrExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1290 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1291 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1292 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1293
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1294 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1295 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1296 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1299 };
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 struct UshrExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1302 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1303 UshrExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1304 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1305 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1306 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1307
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1308 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1309 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1310 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1313 };
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 struct AndExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1316 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1317 AndExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1318 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1319 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1320 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
1321 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
1322 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1323
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1324 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1325 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1326 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1327 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1330 };
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 struct OrExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1333 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1334 OrExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1335 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1336 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1337 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
1338 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
1339 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1340
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1341 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1342 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1343 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1344 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1347 };
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 struct XorExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1350 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1351 XorExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1352 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1353 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1354 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
1355 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
1356 Expression *buildArrayLoop(Arguments *fparams);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1357
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1358 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1359 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1360 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1361 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1364 };
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 struct OrOrExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1367 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1368 OrOrExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1369 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1370 Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1371 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1372 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1373 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1374 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1375 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1376 };
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 struct AndAndExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1379 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1380 AndAndExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1381 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1382 Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1383 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1384 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1385 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1386 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1387 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1388 };
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 struct CmpExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1391 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1392 CmpExp(enum TOK op, Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1393 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1394 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1395 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1396 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1397
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1398 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1399 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1400 Identifier *opId();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1403 };
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 struct InExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1406 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1407 InExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1408 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1409 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1410
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1411 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1412 Identifier *opId();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1413 Identifier *opId_r();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1416 };
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 struct RemoveExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1419 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1420 RemoveExp(Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1421 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1422 };
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 // == and !=
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 struct EqualExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1427 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1428 EqualExp(enum TOK op, Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1429 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1430 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1431 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1432 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1433
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1434 // For operator overloading
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1435 int isCommutative();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1436 Identifier *opId();
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1439 };
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 // === and !===
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 struct IdentityExp : BinExp
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1444 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1445 IdentityExp(enum TOK op, Loc loc, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1446 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1447 int isBit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1448 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1449 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1450 elem *toElem(IRState *irs);
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 /****************************************************************/
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 struct CondExp : BinExp
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 Expression *econd;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1458
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1459 CondExp(Loc loc, Expression *econd, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1460 Expression *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1461 Expression *semantic(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1462 Expression *optimize(int result);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1463 Expression *interpret(InterState *istate);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1464 void checkEscape();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1465 Expression *toLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1466 Expression *modifiableLvalue(Scope *sc, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1467 Expression *checkToBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1468 int checkSideEffect(int flag);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1469 void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1470 MATCH implicitConvTo(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1471 Expression *castTo(Scope *sc, Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1472 void scanForNestedRef(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1473
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1474 int inlineCost(InlineCostState *ics);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1475 Expression *doInline(InlineDoState *ids);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1476 Expression *inlineScan(InlineScanState *iss);
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 elem *toElem(IRState *irs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1479 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1480
510
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1481 #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
1482 /****************************************************************/
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 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
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 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
1487
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1488 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
1489 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
1490 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
1491 };
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 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
1494 {
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1495 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
1496 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
1497 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
1498 };
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 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
1501 {
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1502 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
1503 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
1504 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
1505 };
6aee82889553 Merged DMD 1.034, array operations are not yet implemented ;)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 459
diff changeset
1506 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1507
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1508 /****************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1509
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
1510 #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
1511
664
eef8ac26c66c Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents: 619
diff changeset
1512 // 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
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 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
1515 {
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 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
1517 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
1518
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 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
1520 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
1521 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
1522
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 elem *toElem(IRState *irs);
860
7edce7e58ab1 Add more toConstElem stubs to get better error messages.
Christian Kamm <kamm incasoftware de>
parents: 797
diff changeset
1524 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
1525 };
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 #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
1528
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
1529 /****************************************************************/
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
1530
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1531 /* Special values used by the interpreter
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1532 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1533 #define EXP_CANT_INTERPRET ((Expression *)1)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1534 #define EXP_CONTINUE_INTERPRET ((Expression *)2)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1535 #define EXP_BREAK_INTERPRET ((Expression *)3)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1536 #define EXP_GOTO_INTERPRET ((Expression *)4)
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1537 #define EXP_VOID_INTERPRET ((Expression *)5)
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 *expType(Type *type, Expression *e);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1540
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1541 Expression *Neg(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1542 Expression *Com(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1543 Expression *Not(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1544 Expression *Bool(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1545 Expression *Cast(Type *type, Type *to, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1546 Expression *ArrayLength(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1547 Expression *Ptr(Type *type, Expression *e1);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1548
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1549 Expression *Add(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1550 Expression *Min(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1551 Expression *Mul(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1552 Expression *Div(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1553 Expression *Mod(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1554 Expression *Shl(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1555 Expression *Shr(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1556 Expression *Ushr(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1557 Expression *And(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1558 Expression *Or(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1559 Expression *Xor(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1560 Expression *Index(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1561 Expression *Cat(Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1562
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1563 Expression *Equal(enum TOK op, Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1564 Expression *Cmp(enum TOK op, Type *type, Expression *e1, Expression *e2);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1565 Expression *Identity(enum TOK op, Type *type, Expression *e1, Expression *e2);
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 Expression *Slice(Type *type, Expression *e1, Expression *lwr, Expression *upr);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1568
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 108
diff changeset
1569 #endif /* DMD_EXPRESSION_H */