diff dmd/constfold.c @ 1621:fb2e6707ad17

Merge DMD r314+r315: bugzilla 2029 Typesafe variadic functions don't... Both DMD revisions are for fixing bugzilla 2029 (Typesafe variadic functions don't work in CTFE). The DMD r314 commit message is: bugzilla 2029 (Typesafe variadic functions don't work in CTFE The DMD r315 commit message is: bugzilla 2029 - try again --- dmd/constfold.c | 11 ++++- dmd/declaration.c | 21 +++++++++- dmd/declaration.h | 10 ++++- dmd/expression.c | 1 + dmd/interpret.c | 111 +++++++++++++++++++++++++++++++++++++++++++++-------- dmd/mars.h | 2 +- dmd/mtype.c | 2 +- 7 files changed, 135 insertions(+), 23 deletions(-)
author Leandro Lucarella <llucax@gmail.com>
date Wed, 06 Jan 2010 15:18:22 -0300
parents def7a1d494fd
children
line wrap: on
line diff
--- a/dmd/constfold.c	Wed Jan 06 15:18:22 2010 -0300
+++ b/dmd/constfold.c	Wed Jan 06 15:18:22 2010 -0300
@@ -863,7 +863,7 @@
 }
 
 Expression *Identity(enum TOK op, Type *type, Expression *e1, Expression *e2)
-{   Expression *e;
+{
     Loc loc = e1->loc;
     int cmp;
 
@@ -1055,12 +1055,12 @@
 	return e1;
 
     Type *tb = to->toBasetype();
+    Type *typeb = type->toBasetype();
 
     /* Allow casting from one string type to another
      */
     if (e1->op == TOKstring)
     {
-	Type *typeb = type->toBasetype();
 	if (tb->ty == Tarray && typeb->ty == Tarray &&
 	    tb->nextOf()->size() == typeb->nextOf()->size())
 	{
@@ -1068,8 +1068,15 @@
 	}
     }
 
+    if (e1->op == TOKarrayliteral && typeb == tb)
+    {
+        return e1;
+    }
+
     if (e1->isConst() != 1)
+    {
 	return EXP_CANT_INTERPRET;
+    }
 
     if (tb->ty == Tbool)
 	e = new IntegerExp(loc, e1->toInteger() != 0, type);