Mercurial > projects > ddmd
view dmd/RemoveExp.d @ 114:e28b18c23469
added a module dmd.common for commonly used stuff
it currently holds code for consistency checking of predefined versions
also added a VisualD project file
author | Trass3r |
---|---|
date | Wed, 01 Sep 2010 18:21:58 +0200 |
parents | 6da99741178e |
children | e3afd1303184 |
line wrap: on
line source
module dmd.RemoveExp; import dmd.common; import dmd.Expression; import dmd.backend.elem; import dmd.Loc; import dmd.IRState; import dmd.BinExp; import dmd.TOK; import dmd.Type; import dmd.TypeAArray; import dmd.TY; import dmd.backend.Util; import dmd.backend.OPER; import dmd.backend.Symbol; import dmd.backend.TYM; import dmd.backend.mTY; /* This deletes the key e1 from the associative array e2 */ class RemoveExp : BinExp { this(Loc loc, Expression e1, Expression e2) { super(loc, TOKremove, RemoveExp.sizeof, e1, e2); type = Type.tvoid; } override elem* toElem(IRState* irs) { elem* e; Type tb = e1.type.toBasetype(); assert(tb.ty == Taarray); TypeAArray taa = cast(TypeAArray)tb; elem* ea = e1.toElem(irs); elem* ekey = e2.toElem(irs); elem* ep; elem* keyti; if (tybasic(ekey.Ety) == TYstruct || tybasic(ekey.Ety) == TYarray) { ekey = el_una(OPstrpar, TYstruct, ekey); ekey.Enumbytes = ekey.E1.Enumbytes; assert(ekey.Enumbytes); } Symbol* s = taa.aaGetSymbol("Del", 0); keyti = taa.index.getInternalTypeInfo(null).toElem(irs); ep = el_params(ekey, keyti, ea, null); e = el_bin(OPcall, TYnptr, el_var(s), ep); el_setLoc(e,loc); return e; } }