diff dmd2/init.c @ 1577:e4f7b5d9c68a

DMD 2.032 Merge.
author Robert Clipsham <robert@octarineparrot.com>
date Tue, 08 Sep 2009 10:07:56 +0100
parents 54b3c1394d62
children
line wrap: on
line diff
--- a/dmd2/init.c	Tue Aug 25 21:35:43 2009 +0200
+++ b/dmd2/init.c	Tue Sep 08 10:07:56 2009 +0100
@@ -412,15 +412,24 @@
 
 	   case Tpointer:
 	   case Tarray:
-	       edim = dim;
-	       break;
+		edim = dim;
+		break;
 
 	   default:
 	       assert(0);
 	}
     }
     else
+    {
 	edim = value.dim;
+	for (size_t i = 0, j = 0; i < value.dim; i++, j++)
+	{
+	    if (index.data[i])
+		j = ((Expression *)index.data[i])->toInteger();
+	    if (j >= edim)
+		edim = j + 1;
+	}
+    }
 
     elements = new Expressions();
     elements->setDim(edim);
@@ -464,7 +473,7 @@
 Lno:
     delete elements;
     error(loc, "array initializers as expressions are not allowed");
-    return NULL;
+    return new ErrorExp();
 }