30 return (*GLOBAL__##name).flags & __IEC_FORCE_FLAG;\ |
30 return (*GLOBAL__##name).flags & __IEC_FORCE_FLAG;\ |
31 }\ |
31 }\ |
32 type* __GET_GLOBAL_##name(void) {\ |
32 type* __GET_GLOBAL_##name(void) {\ |
33 return (*GLOBAL__##name).value;\ |
33 return (*GLOBAL__##name).value;\ |
34 } |
34 } |
|
35 #define __DECLARE_GLOBAL_PROTOTYPE(type, name)\ |
|
36 extern type* __GET_GLOBAL_##name(); |
35 #define __DECLARE_EXTERNAL(type, name)\ |
37 #define __DECLARE_EXTERNAL(type, name)\ |
36 __IEC_##type##_p name; |
38 __IEC_##type##_p name; |
37 #define __DECLARE_LOCATED(type, name)\ |
39 #define __DECLARE_LOCATED(type, name)\ |
38 __IEC_##type##_p name; |
40 __IEC_##type##_p name; |
39 |
41 |
53 #define __INIT_GLOBAL_LOCATED(domain, name, location, retained)\ |
55 #define __INIT_GLOBAL_LOCATED(domain, name, location, retained)\ |
54 domain##__##name.value = location;\ |
56 domain##__##name.value = location;\ |
55 __INIT_RETAIN(domain##__##name, retained) |
57 __INIT_RETAIN(domain##__##name, retained) |
56 #define __INIT_EXTERNAL(type, global, name, retained)\ |
58 #define __INIT_EXTERNAL(type, global, name, retained)\ |
57 {\ |
59 {\ |
58 extern type* __GET_GLOBAL_##global();\ |
|
59 name.value = __GET_GLOBAL_##global();\ |
60 name.value = __GET_GLOBAL_##global();\ |
60 __INIT_RETAIN(name, retained)\ |
61 __INIT_RETAIN(name, retained)\ |
61 } |
62 } |
62 #define __INIT_LOCATED(type, location, name, retained)\ |
63 #define __INIT_LOCATED(type, location, name, retained)\ |
63 {\ |
64 {\ |
71 |
72 |
72 // variable getting macros |
73 // variable getting macros |
73 #define __GET_VAR(name, ...)\ |
74 #define __GET_VAR(name, ...)\ |
74 name.value __VA_ARGS__ |
75 name.value __VA_ARGS__ |
75 #define __GET_EXTERNAL(name, ...)\ |
76 #define __GET_EXTERNAL(name, ...)\ |
76 ((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : *(name.value) __VA_ARGS__) |
77 ((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__) |
77 #define __GET_LOCATED(name, ...)\ |
78 #define __GET_LOCATED(name, ...)\ |
78 ((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : *(name.value) __VA_ARGS__) |
79 ((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__) |
79 #define __GET_VAR_BY_REF(name, ...)\ |
80 #define __GET_VAR_BY_REF(name, ...)\ |
80 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &(name.value __VA_ARGS__)) |
81 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &(name.value __VA_ARGS__)) |
81 #define __GET_EXTERNAL_BY_REF(name, ...)\ |
82 #define __GET_EXTERNAL_BY_REF(name, ...)\ |
82 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &(*(name.value) __VA_ARGS__)) |
83 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__)) |
83 #define __GET_LOCATED_BY_REF(name, ...)\ |
84 #define __GET_LOCATED_BY_REF(name, ...)\ |
84 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &(*(name.value) __VA_ARGS__)) |
85 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__)) |
85 |
86 |
86 // variable setting macros |
87 // variable setting macros |
87 #define __SET_VAR(prefix, name, new_value, ...)\ |
88 #define __SET_VAR(prefix, name, new_value, ...)\ |
88 if (!(prefix name.flags & __IEC_FORCE_FLAG)) prefix name.value __VA_ARGS__ = new_value |
89 if (!(prefix name.flags & __IEC_FORCE_FLAG)) prefix name.value __VA_ARGS__ = new_value |
89 #define __SET_EXTERNAL(prefix, name, new_value, ...)\ |
90 #define __SET_EXTERNAL(prefix, name, new_value, ...)\ |