diff options
Diffstat (limited to 'src/Runtime/global_destructor_chain.c')
-rw-r--r-- | src/Runtime/global_destructor_chain.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/src/Runtime/global_destructor_chain.c b/src/Runtime/global_destructor_chain.c index 1f3790d..7c24b76 100644 --- a/src/Runtime/global_destructor_chain.c +++ b/src/Runtime/global_destructor_chain.c @@ -1,22 +1,26 @@ #include "NMWException.h" -dtor_chain *__global_destructor_chain; - -extern void *__register_global_object(void *object, dtor_func *destructor, dtor_chain *regmem) { - regmem->next = __global_destructor_chain; - regmem->destructor = destructor; - regmem->object = object; - __global_destructor_chain = regmem; - return object; + + +DestructorChain* __global_destructor_chain; + +extern void* __register_global_object(void* object, void* destructor, void* regmem) { + ((DestructorChain*)regmem)->next = __global_destructor_chain; + ((DestructorChain*)regmem)->destructor = destructor; + ((DestructorChain*)regmem)->object = object; + __global_destructor_chain = (DestructorChain*)regmem; + + return object; } -void __destroy_global_chain() { - dtor_chain *iter = __global_destructor_chain; - while (__global_destructor_chain != 0) { - iter = __global_destructor_chain; - __global_destructor_chain = __global_destructor_chain->next; - iter->destructor(iter->object, -1); - } +void __destroy_global_chain(void) { + DestructorChain* iter; + + while ((iter=__global_destructor_chain) != 0) { + __global_destructor_chain = iter->next; + DTORCALL_COMPLETE(iter->destructor, iter->object); + } } -__declspec(section ".dtors") static void* const __destroy_global_chain_reference = __destroy_global_chain; +__declspec(section + ".dtors") static void* const __destroy_global_chain_reference = __destroy_global_chain; |