Move check for access of context for nested class from backend into frontend.

This commit is contained in:
Christian Kamm
2008-10-02 23:12:19 +02:00
parent e2a1394ae8
commit b3d4bc83f8
4 changed files with 27 additions and 7 deletions

View File

@@ -842,12 +842,6 @@ DValue* DtoNewClass(Loc loc, TypeClass* tc, NewExp* newexp)
Logger::println("Resolving nested context");
LOG_SCOPE;
if (gIR->func()->decl->isStatic())
{
newexp->error("function %s is static and cannot access nested class %s", gIR->func()->decl->toPrettyChars(), tc->sym->toPrettyChars());
fatal();
}
// get context
LLValue* nest = DtoNestedContext(loc, tc->sym);

View File

@@ -390,11 +390,15 @@ LLValue* DtoNestedContext(Loc loc, Dsymbol* sym)
LOG_SCOPE;
IrFunction* irfunc = gIR->func();
// if this func has its own vars that are accessed by nested funcs
// use its own context
if (irfunc->nestedVar)
return irfunc->nestedVar;
// otherwise, it may have gotten a context from the caller
else if (irfunc->nestArg)
return irfunc->nestArg;
// or just have a this argument
else if (irfunc->thisArg)
{
ClassDeclaration* cd = irfunc->decl->isMember2()->isClassDeclaration();