mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-08-02 04:20:05 +02:00
Implement stripModifiers using castMod(0).
Reduces the potentail for bugs in the fragile code; castMod(0) is used like this in DMD code.
This commit is contained in:
@@ -1763,85 +1763,7 @@ Type * stripModifiers( Type * type )
|
|||||||
#if DMDV2
|
#if DMDV2
|
||||||
if (type->ty == Tfunction)
|
if (type->ty == Tfunction)
|
||||||
return type;
|
return type;
|
||||||
Type *t = type;
|
return type->castMod(0);
|
||||||
while (t->mod)
|
|
||||||
{
|
|
||||||
switch (t->mod)
|
|
||||||
{
|
|
||||||
case MODconst:
|
|
||||||
t = type->cto;
|
|
||||||
break;
|
|
||||||
case MODshared:
|
|
||||||
t = type->sto;
|
|
||||||
break;
|
|
||||||
case MODimmutable:
|
|
||||||
t = type->ito;
|
|
||||||
break;
|
|
||||||
case MODshared | MODconst:
|
|
||||||
t = type->scto;
|
|
||||||
break;
|
|
||||||
case MODwild:
|
|
||||||
t = type->wto;
|
|
||||||
break;
|
|
||||||
case MODshared | MODwild:
|
|
||||||
t = type->swto;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
assert(0 && "Unhandled type modifier");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!t)
|
|
||||||
{
|
|
||||||
unsigned sz = type->sizeTy[type->ty];
|
|
||||||
t = static_cast<Type *>(malloc(sz));
|
|
||||||
memcpy(t, type, sz);
|
|
||||||
t->mod = 0;
|
|
||||||
t->deco = NULL;
|
|
||||||
t->arrayof = NULL;
|
|
||||||
t->pto = NULL;
|
|
||||||
t->rto = NULL;
|
|
||||||
t->cto = NULL;
|
|
||||||
t->ito = NULL;
|
|
||||||
t->sto = NULL;
|
|
||||||
t->scto = NULL;
|
|
||||||
t->wto = NULL;
|
|
||||||
t->swto = NULL;
|
|
||||||
t->vtinfo = NULL;
|
|
||||||
t = t->merge();
|
|
||||||
|
|
||||||
t->fixTo(type);
|
|
||||||
switch (type->mod)
|
|
||||||
{
|
|
||||||
case MODconst:
|
|
||||||
t->cto = type;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MODimmutable:
|
|
||||||
t->ito = type;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MODshared:
|
|
||||||
t->sto = type;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MODshared | MODconst:
|
|
||||||
t->scto = type;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MODwild:
|
|
||||||
t->wto = type;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MODshared | MODwild:
|
|
||||||
t->swto = type;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return t;
|
|
||||||
#else
|
#else
|
||||||
return type;
|
return type;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user