Commit workaround for TypeFunction comparing issue.

This commit is contained in:
Christian Kamm
2009-04-30 23:16:21 +02:00
parent da4450d2f5
commit 9812a8c8ae
2 changed files with 20 additions and 6 deletions

View File

@@ -2084,7 +2084,7 @@ int FuncDeclaration::isNested()
//if (!toParent())
//printf("FuncDeclaration::isNested('%s') parent=%p\n", toChars(), parent);
//printf("\ttoParent() = '%s'\n", toParent()->toChars());
return ((storage_class & STCstatic) == 0) &&
return ((storage_class & STCstatic) == 0) && toParent2() &&
(toParent2()->isFuncDeclaration() != NULL);
}

View File

@@ -2810,11 +2810,25 @@ void TypeFunction::toDecoBuffer(OutBuffer *buf, bool mangle)
// type to prevent merging different member function
if (!mangle && funcdecl)
{
if (AggregateDeclaration* ad = funcdecl->isMember())
{
buf->writeByte('M');
ad->type->toDecoBuffer(buf, false);
}
if (funcdecl->needThis())
{
AggregateDeclaration* ad = funcdecl->isMember2();
buf->writeByte('M');
ad->type->toDecoBuffer(buf, false);
}
/* BUG This causes problems with delegate types
On the other hand, the llvm type for nested functions *is* different
so not doing anything here may be lead to bugs!
A sane solution would be DtoType(Dsymbol)...
if (funcdecl->isNested())
{
buf->writeByte('M');
if (funcdecl->toParent2() && funcdecl->toParent2()->isFuncDeclaration())
{
FuncDeclaration* fd = funcdecl->toParent2()->isFuncDeclaration();
fd->type->toDecoBuffer(buf, false);
}
}*/
}
// Write argument types