# HG changeset patch # User Christian Kamm # Date 1241126181 -7200 # Node ID 680b4df0ea362dec0cb0cf9507eb6328e3e587d6 # Parent 29d3861aa2da3d82f43de41eaab28b334f2b6eb6 Commit workaround for TypeFunction comparing issue. diff -r 29d3861aa2da -r 680b4df0ea36 dmd/func.c --- a/dmd/func.c Thu Apr 30 12:25:04 2009 +0200 +++ b/dmd/func.c Thu Apr 30 23:16:21 2009 +0200 @@ -2084,7 +2084,7 @@ //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); } diff -r 29d3861aa2da -r 680b4df0ea36 dmd/mtype.c --- a/dmd/mtype.c Thu Apr 30 12:25:04 2009 +0200 +++ b/dmd/mtype.c Thu Apr 30 23:16:21 2009 +0200 @@ -2810,11 +2810,25 @@ // 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