Mercurial > projects > ddmd
diff dmd/InExp.d @ 67:f708f0452e81
some of the backend/codegen stuff implemented
author | korDen |
---|---|
date | Mon, 23 Aug 2010 21:21:05 +0400 |
parents | 6557375aff35 |
children | 2e2a5c3f943a |
line wrap: on
line diff
--- a/dmd/InExp.d Mon Aug 23 20:38:30 2010 +0400 +++ b/dmd/InExp.d Mon Aug 23 21:21:05 2010 +0400 @@ -15,6 +15,11 @@ import dmd.expression.util.arrayTypeCompatible; import dmd.backend.elem; +import dmd.backend.TYM; +import dmd.backend.mTY; +import dmd.backend.OPER; +import dmd.backend.Symbol; +import dmd.backend.Util; class InExp : BinExp { @@ -75,7 +80,31 @@ elem* toElem(IRState* irs) { - assert(false); + elem* e; + elem* key = e1.toElem(irs); + elem* aa = e2.toElem(irs); + elem* ep; + elem* keyti; + TypeAArray taa = cast(TypeAArray)e2.type.toBasetype(); + + + // set to: + // aaIn(aa, keyti, key); + + if (tybasic(key.Ety) == TYstruct) + { + key = el_una(OPstrpar, TYstruct, key); + key.Enumbytes = key.E1.Enumbytes; + assert(key.Enumbytes); + } + + Symbol* s = taa.aaGetSymbol("In", 0); + keyti = taa.index.getInternalTypeInfo(null).toElem(irs); + ep = el_params(key, keyti, aa, null); + e = el_bin(OPcall, type.totym(), el_var(s), ep); + + el_setLoc(e,loc); + return e; } }