DMD issue 693 & 5946 - Allow using 'this' for alias template parameter

This commit is contained in:
Alexey Prokhin
2011-07-19 19:43:05 +04:00
parent f97fd92433
commit edd1ed5b09
3 changed files with 6 additions and 1 deletions

View File

@@ -2795,6 +2795,9 @@ Expression *ThisExp::semantic(Scope *sc)
#endif
if (type && var)
{ //assert(global.errors || var);
#if IN_LLVM
var->isVarDeclaration()->checkNestedReference(sc, loc);
#endif
return this;
}

View File

@@ -4245,6 +4245,7 @@ void TemplateInstance::semanticTiargs(Loc loc, Scope *sc, Objects *tiargs, int f
return;
for (size_t j = 0; j < tiargs->dim; j++)
{
Object *o = (Object *)tiargs->data[j];
Type *ta = isType(o);
Expression *ea = isExpression(o);

View File

@@ -1324,7 +1324,8 @@ DValue* ThisExp::toElem(IRState* p)
// regular this expr
if (VarDeclaration* vd = var->isVarDeclaration()) {
LLValue* v;
if (vd->toParent2() != p->func()->decl) {
Dsymbol* vdparent = vd->toParent2();
if (vdparent != p->func()->decl) {
Logger::println("nested this exp");
#if STRUCTTHISREF
return DtoNestedVariable(loc, type, vd, type->ty == Tstruct);