summaryrefslogtreecommitdiff
path: root/src/Runtime/global_destructor_chain.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Runtime/global_destructor_chain.c')
-rw-r--r--src/Runtime/global_destructor_chain.c36
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;