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);
         }