Mercurial > projects > ldc
diff gen/toir.cpp @ 210:1d6cfdbc97f0 trunk
[svn r226] Fixed: deleting interface.
Removed: unused util function for calling class destructors.
author | lindquist |
---|---|
date | Wed, 14 May 2008 02:00:23 +0200 |
parents | c4c9b4ac021b |
children | 4c2689d57ba4 |
line wrap: on
line diff
--- a/gen/toir.cpp Wed May 14 01:22:40 2008 +0200 +++ b/gen/toir.cpp Wed May 14 02:00:23 2008 +0200 @@ -2009,9 +2009,14 @@ else if (et->ty == Tclass) { bool onstack = false; - if (DVarValue* vv = dval->isVar()) { + TypeClass* tc = (TypeClass*)et; + if (tc->sym->isInterfaceDeclaration()) + { + DtoDeleteInterface(dval->getRVal()); + onstack = true; + } + else if (DVarValue* vv = dval->isVar()) { if (vv->var && vv->var->onstack) { - TypeClass* tc = (TypeClass*)et; if (tc->sym->dtors.dim > 0) { DtoFinalizeClass(dval->getRVal()); onstack = true; @@ -2022,7 +2027,7 @@ llvm::Value* rval = dval->getRVal(); DtoDeleteClass(rval); } - if (dval->isVar() && dval->isVar()->lval) { + if (!dval->isThis() && dval->isVar() && dval->isVar()->lval) { llvm::Value* lval = dval->getLVal(); DtoStore(llvm::Constant::getNullValue(lval->getType()->getContainedType(0)), lval); }