mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-06-08 17:54:10 +02:00
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(-)
This commit is contained in:
@@ -863,7 +863,7 @@ Expression *Equal(enum TOK op, Type *type, Expression *e1, Expression *e2)
|
||||
}
|
||||
|
||||
Expression *Identity(enum TOK op, Type *type, Expression *e1, Expression *e2)
|
||||
{ Expression *e;
|
||||
{
|
||||
Loc loc = e1->loc;
|
||||
int cmp;
|
||||
|
||||
@@ -1055,12 +1055,12 @@ Expression *Cast(Type *type, Type *to, Expression *e1)
|
||||
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 @@ Expression *Cast(Type *type, Type *to, Expression *e1)
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user