Mercurial > projects > ddmd
view dmd/NegExp.d @ 32:81796b717a39
A few bad cast fixed. TODO: either get rid of dyncast(), or derive all objects from intermediate supertype.
author | korDen |
---|---|
date | Tue, 18 May 2010 17:51:46 +0400 |
parents | 10317f0c89a5 |
children | cab4c37afb89 |
line wrap: on
line source
module dmd.NegExp; import dmd.Expression; import dmd.Identifier; import dmd.backend.elem; import dmd.UnaExp; import dmd.InterState; import dmd.OutBuffer; import dmd.Loc; import dmd.Scope; import dmd.IRState; import dmd.ArrayTypes; import dmd.TOK; import dmd.expression.Neg; import dmd.backend.Util; import dmd.backend.OPER; class NegExp : UnaExp { this(Loc loc, Expression e) { super(loc, TOKneg, NegExp.sizeof, e); } Expression semantic(Scope sc) { Expression e; version (LOGSEMANTIC) { printf("NegExp::semantic('%s')\n", toChars()); } if (!type) { UnaExp.semantic(sc); e1 = resolveProperties(sc, e1); e = op_overload(sc); if (e) return e; e1.checkNoBool(); if (e1.op != TOKslice) e1.checkArithmetic(); type = e1.type; } return this; } Expression optimize(int result) { Expression e; e1 = e1.optimize(result); if (e1.isConst() == 1) { e = Neg(type, e1); } else e = this; return e; } Expression interpret(InterState* istate) { assert(false); } void buildArrayIdent(OutBuffer buf, Expressions arguments) { assert(false); } Expression buildArrayLoop(Arguments fparams) { assert(false); } Identifier opId() { assert(false); } elem* toElem(IRState* irs) { elem *e = el_una(OPneg, type.totym(), e1.toElem(irs)); el_setLoc(e,loc); return e; } }