Yup, found that and stole all I could from it. The nice thing about scoped() is that it knows exactly the type it needs to destroy (the dynamic type == the static type) so it doesn't need to access the ClassInfo etc. It statically walks up the inheritance tree and destroys everything in sight. Then it destroys that mutex thing.

Thanks,

Andrei

Sean Kelly wrote:
Here's the signature:

extern (C) void rt_finalize(void* p, bool det = true)

"det" is true if it's a deterministic finalization (ie. not during a GC 
collection).  The function basically just calls __dtor and frees the monitor (and stomps 
on the memory with T.classinfo.init, as you requested).

If you look in src/rt/lifetime.d, _d_delclass() does a bit more by calling the 
custom deallocator, etc, though I think that's all destined for removal?

On Jul 23, 2010, at 7:33 AM, Andrei Alexandrescu wrote:

I thought __dtor() does everything needed. Seems like I was mistaken? Sean, how 
do I call rt_finalize?

Andrei

Sean Kelly wrote:
Why not just call rt_finalize?  How an object is finalized may vary by 
compiler. Sent from my iPhone
On Jul 23, 2010, at 2:17 AM, Max Samukha <[email protected]> wrote:
The implementation is still incomplete. It doesn't call base class dtors. This 
unittest should pass:

unittest
{
   class A { static bool dead; ~this() { dead = true; } }
   class B : A { static bool dead; ~this() { dead = true; } }
   {
       auto b = scoped!B;
   }
   assert(B.dead);
   assert(A.dead);
}

A less severe problem is that it doesn't delete the object's monitor if one was 
allocated.

Please refer to rt_finalize for correct destruction sequence. Essentially, 
Scoped dtor should do what rt_finalize does except there is no need to catch 
destructor exceptions and I'm not sure about collectHandler. Sean, please 
comment?
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to