Make check_warn_object_type work without gcc ({}) extension
This commit is contained in:
parent
57c33695e6
commit
97219697a7
|
@ -551,17 +551,21 @@ void check_warn_object_type(const object &, object_type_t, const char *file, uns
|
|||
#define set_reactor_id(O,I) (check_warn_object_type(O, OBJ_CNTRLCEN, __FILE__, __LINE__), set_reactor_id(O, I))
|
||||
#define set_robot_id(O,I) (check_warn_object_type(O, OBJ_ROBOT, __FILE__, __LINE__), set_robot_id(O, I))
|
||||
#define set_weapon_id(O,I) (check_warn_object_type(O, OBJ_WEAPON, __FILE__, __LINE__), set_weapon_id(O, I))
|
||||
#ifdef DXX_HAVE_BUILTIN_CONSTANT_P
|
||||
#ifdef DXX_CONSTANT_TRUE
|
||||
#define check_warn_object_type(O,T,F,L) \
|
||||
({ \
|
||||
const object &dxx_check_warn_o = O; \
|
||||
/* If the type is always wrong, force a compile-time error. */ \
|
||||
if (__builtin_constant_p(dxx_check_warn_o.type != T) && dxx_check_warn_o.type != T) \
|
||||
DXX_ALWAYS_ERROR_FUNCTION(dxx_error_object_type_mismatch, "object type mismatch"); \
|
||||
( DXX_BEGIN_COMPOUND_STATEMENT { \
|
||||
const object &dxx_check_warn_o = (O); \
|
||||
const auto type = dxx_check_warn_o.type; \
|
||||
/* If the type is always right, omit the runtime check. */ \
|
||||
if (!(__builtin_constant_p(dxx_check_warn_o.type == T) && dxx_check_warn_o.type == T)) \
|
||||
(check_warn_object_type)(O,T,F,L); \
|
||||
})
|
||||
DXX_CONSTANT_TRUE(type == T) || ( \
|
||||
/* If the type is always wrong, force a compile-time error. */ \
|
||||
DXX_CONSTANT_TRUE(type != T) \
|
||||
? DXX_ALWAYS_ERROR_FUNCTION(dxx_error_object_type_mismatch, "object type mismatch") \
|
||||
: static_cast<void>( \
|
||||
check_warn_object_type(dxx_check_warn_o,T,F,L), 0 \
|
||||
) \
|
||||
, 0); \
|
||||
} DXX_END_COMPOUND_STATEMENT )
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue