[phobos] phobos commit, revision 1776

Andrei Alexandrescu andrei at erdani.com
Fri Jul 23 10:19:13 PDT 2010


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 <maxsamukha at gmail.com> 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
>>>> phobos at puremagic.com
>>>> http://lists.puremagic.com/mailman/listinfo/phobos
>>> _______________________________________________
>>> phobos mailing list
>>> phobos at puremagic.com
>>> http://lists.puremagic.com/mailman/listinfo/phobos
>> _______________________________________________
>> phobos mailing list
>> phobos at puremagic.com
>> http://lists.puremagic.com/mailman/listinfo/phobos
> 
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos


More information about the phobos mailing list