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;
 	}
 }