comparison 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
comparison
equal deleted inserted replaced
209:c4c9b4ac021b 210:1d6cfdbc97f0
2007 } 2007 }
2008 // class 2008 // class
2009 else if (et->ty == Tclass) 2009 else if (et->ty == Tclass)
2010 { 2010 {
2011 bool onstack = false; 2011 bool onstack = false;
2012 if (DVarValue* vv = dval->isVar()) { 2012 TypeClass* tc = (TypeClass*)et;
2013 if (tc->sym->isInterfaceDeclaration())
2014 {
2015 DtoDeleteInterface(dval->getRVal());
2016 onstack = true;
2017 }
2018 else if (DVarValue* vv = dval->isVar()) {
2013 if (vv->var && vv->var->onstack) { 2019 if (vv->var && vv->var->onstack) {
2014 TypeClass* tc = (TypeClass*)et;
2015 if (tc->sym->dtors.dim > 0) { 2020 if (tc->sym->dtors.dim > 0) {
2016 DtoFinalizeClass(dval->getRVal()); 2021 DtoFinalizeClass(dval->getRVal());
2017 onstack = true; 2022 onstack = true;
2018 } 2023 }
2019 } 2024 }
2020 } 2025 }
2021 if (!onstack) { 2026 if (!onstack) {
2022 llvm::Value* rval = dval->getRVal(); 2027 llvm::Value* rval = dval->getRVal();
2023 DtoDeleteClass(rval); 2028 DtoDeleteClass(rval);
2024 } 2029 }
2025 if (dval->isVar() && dval->isVar()->lval) { 2030 if (!dval->isThis() && dval->isVar() && dval->isVar()->lval) {
2026 llvm::Value* lval = dval->getLVal(); 2031 llvm::Value* lval = dval->getLVal();
2027 DtoStore(llvm::Constant::getNullValue(lval->getType()->getContainedType(0)), lval); 2032 DtoStore(llvm::Constant::getNullValue(lval->getType()->getContainedType(0)), lval);
2028 } 2033 }
2029 } 2034 }
2030 // dyn array 2035 // dyn array