mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-02-04 14:03:14 +01:00
[svn r342] Fix DMD bug 2206.
Implement mixin declarations in LLVMDC.
This commit is contained in:
25
dmd/mangle.c
25
dmd/mangle.c
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
10
gen/toir.cpp
10
gen/toir.cpp
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user