[svn r342] Fix DMD bug 2206.

Implement mixin declarations in LLVMDC.
This commit is contained in:
Christian Kamm
2008-07-09 17:01:08 +02:00
parent 8b1bcd5724
commit d16ddb524f
3 changed files with 36 additions and 0 deletions

View File

@@ -221,6 +221,31 @@ char *TemplateInstance::mangle()
}
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()
{

View File

@@ -309,6 +309,7 @@ struct TemplateMixin : TemplateInstance
int oneMember(Dsymbol **ps);
int hasPointers();
char *toChars();
char *mangle();
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
void toObjFile(); // compile to .obj file

View File

@@ -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 @@ DValue* DeclarationExp::toElem(IRState* p)
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
{