diff dmd2/declaration.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/declaration.c	Tue Aug 25 21:35:43 2009 +0200
+++ b/dmd2/declaration.c	Tue Sep 08 10:07:56 2009 +0100
@@ -141,7 +141,7 @@
 	    if (isConst())
 		p = "const";
 	    else if (isInvariant())
-		p = "mutable";
+		p = "immutable";
 	    else if (storage_class & STCmanifest)
 		p = "enum";
 	    else if (!t->isAssignable())
@@ -639,6 +639,7 @@
     onstack = 0;
     canassign = 0;
     value = NULL;
+    rundtor = NULL;
 #if IN_LLVM
     aggrIndex = 0;
 
@@ -956,9 +957,7 @@
 	    Expression *e1;
 	    e1 = new VarExp(loc, this);
 	    e = new AssignExp(loc, e1, e);
-#if DMDV2
 	    e->op = TOKconstruct;
-#endif
 	    e->type = e1->type;		// don't type check this, it would fail
 	    init = new ExpInitializer(loc, e);
 	    return;
@@ -979,10 +978,8 @@
 	{
 	    init = getExpInitializer();
 	}
-#if DMDV2
 	// Default initializer is always a blit
 	op = TOKblit;
-#endif
     }
 
     if (init)
@@ -1039,7 +1036,7 @@
 		Expression *e1 = new VarExp(loc, this);
 
 		Type *t = type->toBasetype();
-		if (t->ty == Tsarray)
+		if (t->ty == Tsarray && !(storage_class & (STCref | STCout)))
 		{
 		    ei->exp = ei->exp->semantic(sc);
 		    if (!ei->exp->implicitConvTo(type))
@@ -1167,7 +1164,7 @@
 			e = e->optimize(WANTvalue | WANTinterpret);
 		    else
 			e = e->optimize(WANTvalue);
-		    if (e->op == TOKint64 || e->op == TOKstring)
+		    if (e->op == TOKint64 || e->op == TOKstring || e->op == TOKfloat64)
 		    {
 			ei->exp = e;		// no errors, keep result
 		    }