2022-10-10 08:46:54 +00:00
|
|
|
#include "NMWException.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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(void) {
|
|
|
|
DestructorChain* iter;
|
|
|
|
|
|
|
|
while ((iter=__global_destructor_chain) != 0) {
|
|
|
|
__global_destructor_chain = iter->next;
|
2022-10-10 18:19:04 +00:00
|
|
|
DTORCALL_COMPLETE(iter->destructor, iter->object);
|
2022-10-10 08:46:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
__declspec(section
|
|
|
|
".dtors") static void* const __destroy_global_chain_reference = __destroy_global_chain;
|