diff dmd/ArrayLengthExp.d @ 162:438eaa11eed4

updated build script to use dmd2.039 some missing methods implemented
author korDen
date Tue, 21 Sep 2010 14:59:56 +0400
parents 60bb0fe4563e
children d237b38b5858
line wrap: on
line diff
--- a/dmd/ArrayLengthExp.d	Mon Sep 20 01:19:36 2010 +0400
+++ b/dmd/ArrayLengthExp.d	Tue Sep 21 14:59:56 2010 +0400
@@ -2,6 +2,8 @@
 
 import dmd.common;
 import dmd.Expression;
+import dmd.GlobalExpressions;
+import dmd.IntegerExp;
 import dmd.BinExp;
 import dmd.backend.elem;
 import dmd.UnaExp;
@@ -95,7 +97,29 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		Expression e;
+		Expression e1;
+
+version (LOG) {
+		printf("ArrayLengthExp.interpret() %s\n", toChars());
+}
+		e1 = this.e1.interpret(istate);
+		if (e1 is EXP_CANT_INTERPRET)
+			goto Lcant;
+		if (e1.op == TOKstring || e1.op == TOKarrayliteral || e1.op == TOKassocarrayliteral)
+		{
+			e = ArrayLength(type, e1);
+		}
+		else if (e1.op == TOKnull)
+		{
+			e = new IntegerExp(loc, 0, type);
+		}
+		else
+			goto Lcant;
+		return e;
+
+	Lcant:
+		return EXP_CANT_INTERPRET;
 	}
 
 	override void toCBuffer(OutBuffer buf, HdrGenState* hgs)