Mercurial > projects > ldc
changeset 321:571959608194 trunk
[svn r342] Fix DMD bug 2206.
Implement mixin declarations in LLVMDC.
author | ChristianK |
---|---|
date | Wed, 09 Jul 2008 17:01:08 +0200 |
parents | d772927ca496 |
children | 1aaf6ff7f685 |
files | dmd/mangle.c dmd/template.h gen/toir.cpp |
diffstat | 3 files changed, 36 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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() {
--- 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
--- 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 {