|
20 | 20 | #ifndef G_CONSTRUCTOR_H_
|
21 | 21 | #define G_CONSTRUCTOR_H_
|
22 | 22 |
|
| 23 | +#ifndef G_MODEL_PREFIX |
| 24 | +#ifdef MODEL_IDENTIFIER |
| 25 | +#define G_MODEL_PREFIX MODEL_IDENTIFIER |
| 26 | +#else |
| 27 | +#define G_MODEL_PREFIX |
| 28 | +#endif |
| 29 | +#endif |
| 30 | + |
| 31 | +#define G_CONCAT(a, b) a ## b |
| 32 | +#define G_CONCAT_(a, b) G_CONCAT(a, b) |
| 33 | +#define G_FUNCNAME(name) G_CONCAT_(G_MODEL_PREFIX, name) |
| 34 | + |
23 | 35 | #if defined(__cplusplus)
|
24 | 36 |
|
25 | 37 | #define G_HAS_CONSTRUCTORS 1
|
|
53 | 65 | #define G_MSVC_SYMBOL_PREFIX "_"
|
54 | 66 | #endif
|
55 | 67 |
|
56 |
| -#define G_DEFINE_CONSTRUCTOR(_func) G_MSVC_CTOR (_func, G_MSVC_SYMBOL_PREFIX) |
57 |
| -#define G_DEFINE_DESTRUCTOR(_func) G_MSVC_DTOR (_func, G_MSVC_SYMBOL_PREFIX) |
| 68 | +#define G_DEFINE_CONSTRUCTOR(_func) G_MSVC_CTOR(_func, G_MSVC_SYMBOL_PREFIX) |
| 69 | +#define G_DEFINE_DESTRUCTOR(_func) G_MSVC_DTOR(_func, G_MSVC_SYMBOL_PREFIX) |
58 | 70 |
|
59 |
| -#define G_MSVC_CTOR(_func,_sym_prefix) \ |
| 71 | +#define G_MSVC_CTOR(_func, _sym_prefix) \ |
60 | 72 | static void _func(void); \
|
61 | 73 | extern int (* _array ## _func)(void); \
|
62 | 74 | int _func ## _wrapper(void) { _func(); return _array ## _func == NULL; } \
|
63 | 75 | __pragma(comment(linker,"/include:" _sym_prefix # _func "_wrapper")) \
|
64 | 76 | __pragma(section(".CRT$XCU",read)) \
|
65 | 77 | __declspec(allocate(".CRT$XCU")) int (* _array ## _func)(void) = _func ## _wrapper;
|
66 | 78 |
|
67 |
| -#define G_MSVC_DTOR(_func,_sym_prefix) \ |
| 79 | +#define G_MSVC_DTOR(_func, _sym_prefix) \ |
68 | 80 | static void _func(void); \
|
69 | 81 | extern int (* _array ## _func)(void); \
|
70 | 82 | int _func ## _constructor(void) { atexit (_func); return _array ## _func == NULL; } \
|
|
0 commit comments