Issue #262 - Attempt to prevent undefined behavior

This commit is contained in:
Justin Ethier 2018-06-14 17:33:56 -04:00
parent 5c54f45234
commit 0d40488d2e

View file

@ -493,12 +493,20 @@ typedef uint32_t char_type;
/** /**
* Convert from an object to an integer. * Convert from an object to an integer.
*/ */
#define obj_obj2int(x) ((long)(x)>>1) #ifdef __clang__
#define obj_obj2int(n) (((long)((ulong)(n) & ~1))/(long)(1uL<<1))
#else
#define obj_obj2int(x) ((long)(x)>>1)
#endif
/** /**
* Convert from an integer to an object. * Convert from an integer to an object.
*/ */
#define obj_int2obj(c) ((void *)((((long)c)<<1) | 1)) #ifdef __clang__
#define obj_int2obj(n) ((void *) ((((long)(n))*(long)(1uL<<1)) | 1))
#else
#define obj_int2obj(c) ((void *)((((long)c)<<1) | 1))
#endif
/** /**
* Determine if the object is a char. * Determine if the object is a char.