Mercurial > projects > ldc
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 |