Fixed .funcptr property of delegates, no longer uses the infamous DMD rewrites to pointer arithmetic, instead a GEPExp has been introduced.

This commit is contained in:
Tomas Lindquist Olsen
2008-09-15 02:04:26 +02:00
parent 431bc19d2f
commit 4280a86bcf
8 changed files with 67 additions and 8 deletions

View File

@@ -3174,17 +3174,14 @@ Expression *TypeDelegate::dotExp(Scope *sc, Expression *e, Identifier *ident)
#endif
if (ident == Id::ptr)
{
e = new GEPExp(e->loc, e, ident, 0);
e->type = tvoidptr;
return e;
}
else if (ident == Id::funcptr)
{
e = e->addressOf(sc);
e->type = tvoidptr;
e = new AddExp(e->loc, e, new IntegerExp(PTRSIZE));
e->type = tvoidptr;
e = new PtrExp(e->loc, e);
e->type = next->pointerTo();
e = new GEPExp(e->loc, e, ident, 1);
e->type = tvoidptr;
return e;
}
else