Expand Up
@@ -99,6 +99,7 @@ bool hasSideEffect(Expression *e);
bool canThrow (Expression *e, bool mustNotThrow);
Expression *Expression_optimize (Expression *e, int result, bool keepLvalue);
dt_t **Expression_toDt (Expression *e, dt_t **pdt);
elem *toElem (Expression *e, IRState *irs);
MATCH implicitConvTo (Expression *e, Type *t);
Expression *implicitCastTo (Expression *e, Scope *sc, Type *t);
Expression *castTo (Expression *e, Scope *sc, Type *t);
Expand Down
Expand Up
@@ -220,9 +221,8 @@ class Expression : public RootObject
Expression *inlineCopy (Scope *sc);
// Back end
virtual elem *toElem (IRState *irs);
elem *toElemDtor (IRState *irs);
virtual dt_t **toDt (dt_t **pdt) { return ::Expression_toDt (this , pdt); }
elem *toElem (IRState *irs) { return ::toElem (this , irs); }
dt_t **toDt (dt_t **pdt) { return ::Expression_toDt (this , pdt); }
virtual void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -243,7 +243,6 @@ class IntegerExp : public Expression
int isBool (int result);
void toMangleBuffer (OutBuffer *buf);
Expression *toLvalue (Scope *sc, Expression *e);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand Down
Expand Up
@@ -272,7 +271,6 @@ class RealExp : public Expression
complex_t toComplex ();
int isBool (int result);
void toMangleBuffer (OutBuffer *buf);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -292,7 +290,6 @@ class ComplexExp : public Expression
complex_t toComplex ();
int isBool (int result);
void toMangleBuffer (OutBuffer *buf);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand Down
Expand Up
@@ -346,7 +343,6 @@ class ThisExp : public Expression
Expression *doInline (InlineDoState *ids);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -371,7 +367,6 @@ class NullExp : public Expression
int isBool (int result);
StringExp *toStringExp ();
void toMangleBuffer (OutBuffer *buf);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand Down
Expand Up
@@ -402,7 +397,6 @@ class StringExp : public Expression
Expression *modifiableLvalue (Scope *sc, Expression *e);
unsigned charAt (uinteger_t i);
void toMangleBuffer (OutBuffer *buf);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -428,7 +422,6 @@ class TupleExp : public Expression
bool equals (RootObject *o);
Expression *semantic (Scope *sc);
void checkEscape ();
elem *toElem (IRState *irs);
Expression *doInline (InlineDoState *ids);
void accept (Visitor *v) { v->visit (this ); }
Expand All
@@ -447,7 +440,6 @@ class ArrayLiteralExp : public Expression
bool equals (RootObject *o);
Expression *semantic (Scope *sc);
int isBool (int result);
elem *toElem (IRState *irs);
StringExp *toStringExp ();
void toMangleBuffer (OutBuffer *buf);
Expression *inferType (Type *t, int flag = 0 , Scope *sc = NULL , TemplateParameters *tparams = NULL );
Expand All
@@ -468,7 +460,6 @@ class AssocArrayLiteralExp : public Expression
Expression *syntaxCopy ();
Expression *semantic (Scope *sc);
int isBool (int result);
elem *toElem (IRState *irs);
void toMangleBuffer (OutBuffer *buf);
Expression *inferType (Type *t, int flag = 0 , Scope *sc = NULL , TemplateParameters *tparams = NULL );
Expand Down
Expand Up
@@ -525,7 +516,6 @@ class StructLiteralExp : public Expression
Expression *semantic (Scope *sc);
Expression *getField (Type *type, unsigned offset);
int getFieldIndex (Type *type, unsigned offset);
elem *toElem (IRState *irs);
void toMangleBuffer (OutBuffer *buf);
Expression *addDtorHook (Scope *sc);
Symbol *toSymbol ();
Expand All
@@ -544,7 +534,6 @@ class TypeExp : public Expression
Expression *syntaxCopy ();
Expression *semantic (Scope *sc);
int rvalue (bool allowVoid = false );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -556,7 +545,6 @@ class ScopeExp : public Expression
ScopeExp (Loc loc, ScopeDsymbol *sds);
Expression *syntaxCopy ();
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand Down
Expand Up
@@ -591,7 +579,6 @@ class NewExp : public Expression
Type *newtype, Expressions *arguments);
Expression *syntaxCopy ();
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
Expression *doInline (InlineDoState *ids);
void accept (Visitor *v) { v->visit (this ); }
Expand Down
Expand Up
@@ -622,7 +609,6 @@ class SymbolExp : public Expression
SymbolExp (Loc loc, TOK op, int size, Declaration *var, bool hasOverloads);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand Down
Expand Up
@@ -692,7 +678,6 @@ class FuncExp : public Expression
Expression *semantic (Scope *sc, Expressions *arguments);
Expression *inferType (Type *t, int flag = 0 , Scope *sc = NULL , TemplateParameters *tparams = NULL );
char *toChars ();
elem *toElem (IRState *irs);
// Expression *doInline(InlineDoState *ids);
void accept (Visitor *v) { v->visit (this ); }
Expand All
@@ -708,7 +693,6 @@ class DeclarationExp : public Expression
DeclarationExp (Loc loc, Dsymbol *declaration);
Expression *syntaxCopy ();
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
Expression *doInline (InlineDoState *ids);
void accept (Visitor *v) { v->visit (this ); }
Expand Down
Expand Up
@@ -746,7 +730,6 @@ class HaltExp : public Expression
HaltExp (Loc loc);
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand Down
Expand Up
@@ -817,7 +800,6 @@ class BinExp : public Expression
Expression *compare_overload (Scope *sc, Identifier *id);
Expression *reorderSettingAAElem (Scope *sc);
elem *toElemBin (IRState *irs, int op);
void accept (Visitor *v) { v->visit (this ); }
};
Expand Down
Expand Up
@@ -868,7 +850,6 @@ class AssertExp : public UnaExp
Expression *doInline (InlineDoState *ids);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand Down
Expand Up
@@ -906,7 +887,6 @@ class DotVarExp : public UnaExp
int isLvalue ();
Expression *toLvalue (Scope *sc, Expression *e);
Expression *modifiableLvalue (Scope *sc, Expression *e);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -932,7 +912,6 @@ class DelegateExp : public UnaExp
DelegateExp (Loc loc, Expression *e, FuncDeclaration *func, bool hasOverloads = false );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -943,7 +922,6 @@ class DotTypeExp : public UnaExp
DotTypeExp (Loc loc, Expression *e, Dsymbol *sym);
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -964,7 +942,6 @@ class CallExp : public UnaExp
Expression *syntaxCopy ();
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
int isLvalue ();
Expression *toLvalue (Scope *sc, Expression *e);
Expression *addDtorHook (Scope *sc);
Expand All
@@ -979,7 +956,6 @@ class AddrExp : public UnaExp
AddrExp (Loc loc, Expression *e);
Expression *semantic (Scope *sc);
void checkEscape ();
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -994,7 +970,6 @@ class PtrExp : public UnaExp
int isLvalue ();
Expression *toLvalue (Scope *sc, Expression *e);
Expression *modifiableLvalue (Scope *sc, Expression *e);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1005,7 +980,6 @@ class NegExp : public UnaExp
NegExp (Loc loc, Expression *e);
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1024,7 +998,6 @@ class ComExp : public UnaExp
ComExp (Loc loc, Expression *e);
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1033,7 +1006,6 @@ class NotExp : public UnaExp
public:
NotExp (Loc loc, Expression *e);
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1042,7 +1014,6 @@ class BoolExp : public UnaExp
public:
BoolExp (Loc loc, Expression *e, Type *type);
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1052,7 +1023,6 @@ class DeleteExp : public UnaExp
DeleteExp (Loc loc, Expression *e);
Expression *semantic (Scope *sc);
Expression *checkToBoolean (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1068,7 +1038,6 @@ class CastExp : public UnaExp
Expression *syntaxCopy ();
Expression *semantic (Scope *sc);
void checkEscape ();
elem *toElem (IRState *irs);
// For operator overloading
Expression *op_overload (Scope *sc);
Expand All
@@ -1084,7 +1053,6 @@ class VectorExp : public UnaExp
VectorExp (Loc loc, Expression *e, Type *t);
Expression *syntaxCopy ();
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1106,7 +1074,6 @@ class SliceExp : public UnaExp
Expression *modifiableLvalue (Scope *sc, Expression *e);
int isBool (int result);
Type *toStaticArrayType ();
elem *toElem (IRState *irs);
Expression *doInline (InlineDoState *ids);
void accept (Visitor *v) { v->visit (this ); }
Expand All
@@ -1117,7 +1084,6 @@ class ArrayLengthExp : public UnaExp
public:
ArrayLengthExp (Loc loc, Expression *e1 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
static Expression *rewriteOpAssign (BinExp *exp);
void accept (Visitor *v) { v->visit (this ); }
Expand Down
Expand Up
@@ -1168,7 +1134,6 @@ class CommaExp : public BinExp
Expression *modifiableLvalue (Scope *sc, Expression *e);
int isBool (int result);
Expression *addDtorHook (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1188,7 +1153,6 @@ class IndexExp : public BinExp
Expression *modifiableLvalue (Scope *sc, Expression *e);
Expression *doInline (InlineDoState *ids);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1199,7 +1163,6 @@ class PostExp : public BinExp
public:
PostExp (TOK op, Loc loc, Expression *e);
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1222,7 +1185,6 @@ class AssignExp : public BinExp
Expression *semantic (Scope *sc);
Expression *checkToBoolean (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1237,63 +1199,55 @@ class AddAssignExp : public BinAssignExp
{
public:
AddAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class MinAssignExp : public BinAssignExp
{
public:
MinAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class MulAssignExp : public BinAssignExp
{
public:
MulAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class DivAssignExp : public BinAssignExp
{
public:
DivAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class ModAssignExp : public BinAssignExp
{
public:
ModAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class AndAssignExp : public BinAssignExp
{
public:
AndAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class OrAssignExp : public BinAssignExp
{
public:
OrAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class XorAssignExp : public BinAssignExp
{
public:
XorAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1302,31 +1256,27 @@ class PowAssignExp : public BinAssignExp
public:
PowAssignExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class ShlAssignExp : public BinAssignExp
{
public:
ShlAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class ShrAssignExp : public BinAssignExp
{
public:
ShrAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class UshrAssignExp : public BinAssignExp
{
public:
UshrAssignExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1335,7 +1285,6 @@ class CatAssignExp : public BinAssignExp
public:
CatAssignExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1345,7 +1294,6 @@ class AddExp : public BinExp
AddExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1355,7 +1303,6 @@ class MinExp : public BinExp
MinExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1365,7 +1312,6 @@ class CatExp : public BinExp
CatExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1375,7 +1321,6 @@ class MulExp : public BinExp
MulExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1385,7 +1330,6 @@ class DivExp : public BinExp
DivExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1395,7 +1339,6 @@ class ModExp : public BinExp
ModExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1405,7 +1348,6 @@ class PowExp : public BinExp
PowExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1415,7 +1357,6 @@ class ShlExp : public BinExp
ShlExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1425,7 +1366,6 @@ class ShrExp : public BinExp
ShrExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1435,7 +1375,6 @@ class UshrExp : public BinExp
UshrExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1445,7 +1384,6 @@ class AndExp : public BinExp
AndExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1455,7 +1393,6 @@ class OrExp : public BinExp
OrExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1465,7 +1402,6 @@ class XorExp : public BinExp
XorExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1475,7 +1411,6 @@ class OrOrExp : public BinExp
OrOrExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
Expression *checkToBoolean (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1485,7 +1420,6 @@ class AndAndExp : public BinExp
AndAndExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
Expression *checkToBoolean (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1498,7 +1432,6 @@ class CmpExp : public BinExp
// For operator overloading
Expression *op_overload (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1508,15 +1441,13 @@ class InExp : public BinExp
InExp (Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
class RemoveExp : public BinExp
{
public:
RemoveExp (Loc loc, Expression *e1 , Expression *e2 );
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1531,7 +1462,6 @@ class EqualExp : public BinExp
// For operator overloading
Expression *op_overload (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1542,7 +1472,6 @@ class IdentityExp : public BinExp
public:
IdentityExp (TOK op, Loc loc, Expression *e1 , Expression *e2 );
Expression *semantic (Scope *sc);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand All
@@ -1567,7 +1496,6 @@ class CondExp : public BinExp
Expression *doInline (InlineDoState *ids);
elem *toElem (IRState *irs);
void accept (Visitor *v) { v->visit (this ); }
};
Expand Down