diff dmd/inline.c @ 92:70d6113eeb8c trunk

[svn r96] Updated to DMD 1.023. Regular bugfixes.
author lindquist
date Thu, 08 Nov 2007 19:13:28 +0100
parents c53b6e3fe49a
children aaade6ded589
line wrap: on
line diff
--- a/dmd/inline.c	Wed Nov 07 04:52:56 2007 +0100
+++ b/dmd/inline.c	Thu Nov 08 19:13:28 2007 +0100
@@ -546,8 +546,6 @@
 	    ;
 	else
 	{
-	    ExpInitializer *ie;
-	    ExpInitializer *ieto;
 	    VarDeclaration *vto;
 
 	    vto = new VarDeclaration(vd->loc, vd->type, vd->ident, vd->init);
@@ -559,16 +557,18 @@
 	    ids->from.push(vd);
 	    ids->to.push(vto);
 
-	    if (vd->init->isVoidInitializer())
+	    if (vd->init)
 	    {
-		vto->init = new VoidInitializer(vd->init->loc);
-	    }
-	    else
-	    {
-		ie = vd->init->isExpInitializer();
-		assert(ie);
-		ieto = new ExpInitializer(ie->loc, ie->exp->doInline(ids));
-		vto->init = ieto;
+		if (vd->init->isVoidInitializer())
+		{
+		    vto->init = new VoidInitializer(vd->init->loc);
+		}
+		else
+		{
+		    ExpInitializer *ie = vd->init->isExpInitializer();
+		    assert(ie);
+		    vto->init = new ExpInitializer(ie->loc, ie->exp->doInline(ids));
+		}
 	    }
 	    de->declaration = (Dsymbol *) (void *)vto;
 	}
@@ -854,7 +854,8 @@
 Statement *ForeachStatement::inlineScan(InlineScanState *iss)
 {
     aggr = aggr->inlineScan(iss);
-    body = body->inlineScan(iss);
+    if (body)
+	body = body->inlineScan(iss);
     return this;
 }
 
@@ -864,7 +865,8 @@
 {
     lwr = lwr->inlineScan(iss);
     upr = upr->inlineScan(iss);
-    body = body->inlineScan(iss);
+    if (body)
+	body = body->inlineScan(iss);
     return this;
 }
 #endif
@@ -1288,7 +1290,11 @@
 #endif
 	isSynchronized() ||
 	isImportedSymbol() ||
+#if V2
+	closureVars.dim ||	// no nested references to this frame
+#else
 	nestedFrameRef ||	// no nested references to this frame
+#endif
 	(isVirtual() && !isFinal())
        ))
     {