[svn r391] Fix classes nested inside functions for real.

This commit is contained in:
Christian Kamm
2008-07-15 10:23:50 +02:00
parent e69f92b613
commit 1486f29abb
3 changed files with 42 additions and 2 deletions

View File

@@ -828,7 +828,8 @@ DValue* DtoNewClass(TypeClass* tc, NewExp* newexp)
Logger::println("Resolving nested context");
LOG_SCOPE;
LLValue* gep = DtoGEPi(mem,0,2,"tmp");
size_t idx = 2 + tc->sym->vthis->ir.irField->index;
LLValue* gep = DtoGEPi(mem,0,idx,"tmp");
// this value might be zero if it was not necessary to generate it ...
LLValue* nest = gIR->func()->nestedVar;

View File

@@ -382,7 +382,7 @@ static LLValue* get_frame_ptr_impl(FuncDeclaration* func, Dsymbol* sc, LLValue*
}
else if (ClassDeclaration* cd = fd->toParent2()->isClassDeclaration())
{
v = DtoGEPi(v,0,2,"tmp");
v = DtoGEPi(v,0,2+cd->vthis->ir.irField->index,"tmp");
v = DtoLoad(v);
}
else

39
tests/mini/nested6a.d Normal file
View File

@@ -0,0 +1,39 @@
module nested6a;
extern(C) int printf(char*, ...);
void main()
{
int i = 42;
printf("main() %d\n", i++);
class C
{
int j;
void func()
{
int k;
printf("C.func() %d\n", i++);
class C2
{
int l;
void func2()
{
printf("C2.func2() %d\n", i++);
}
int m;
}
{
scope c2 = new C2;
c2.func2();
}
int n;
}
int o;
}
scope c = new C;
c.func();
}