# HG changeset patch # User ChristianK # Date 1215615668 -7200 # Node ID 571959608194673bcd7f5102a11c4b0ac1be5ada # Parent d772927ca49642c982b8897e466644fa3e34d812 [svn r342] Fix DMD bug 2206. Implement mixin declarations in LLVMDC. diff -r d772927ca496 -r 571959608194 dmd/mangle.c --- a/dmd/mangle.c Sat Jul 05 13:05:29 2008 +0200 +++ b/dmd/mangle.c Wed Jul 09 17:01:08 2008 +0200 @@ -221,6 +221,31 @@ } +char *TemplateMixin::mangle() +{ + OutBuffer buf; + char *id; + +#if 0 + printf("TemplateMixin::mangle() %s", toChars()); + if (parent) + printf(" parent = %s %s", parent->kind(), parent->toChars()); + printf("\n"); +#endif + id = ident ? ident->toChars() : toChars(); + if (parent) + { + char *p = parent->mangle(); + if (p[0] == '_' && p[1] == 'D') + p += 2; + buf.writestring(p); + } + buf.printf("%"PRIuSIZE"%s", strlen(id), id); + id = buf.toChars(); + buf.data = NULL; + //printf("TemplateMixin::mangle() %s = %s\n", toChars(), id); + return id; +} char *Dsymbol::mangle() { diff -r d772927ca496 -r 571959608194 dmd/template.h --- a/dmd/template.h Sat Jul 05 13:05:29 2008 +0200 +++ b/dmd/template.h Wed Jul 09 17:01:08 2008 +0200 @@ -309,6 +309,7 @@ int oneMember(Dsymbol **ps); int hasPointers(); char *toChars(); + char *mangle(); void toCBuffer(OutBuffer *buf, HdrGenState *hgs); void toObjFile(); // compile to .obj file diff -r d772927ca496 -r 571959608194 gen/toir.cpp --- a/gen/toir.cpp Sat Jul 05 13:05:29 2008 +0200 +++ b/gen/toir.cpp Wed Jul 09 17:01:08 2008 +0200 @@ -18,6 +18,7 @@ #include "total.h" #include "init.h" #include "mtype.h" +#include "template.h" #include "hdrgen.h" #include "port.h" @@ -140,6 +141,15 @@ DtoForceDeclareDsymbol((Dsymbol*)a->decl->data[i]); } } + // mixin declaration + else if (TemplateMixin* m = declaration->isTemplateMixin()) + { + Logger::println("TemplateMixin"); + for (int i=0; i < m->members->dim; ++i) + { + DtoForceDeclareDsymbol((Dsymbol*)m->members->data[i]); + } + } // unsupported declaration else {