Mercurial > projects > ldc
changeset 1282:680b4df0ea36
Commit workaround for TypeFunction comparing issue.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Thu, 30 Apr 2009 23:16:21 +0200 |
parents | 29d3861aa2da |
children | 450897f5aae9 |
files | dmd/func.c dmd/mtype.c |
diffstat | 2 files changed, 20 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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); }
--- 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