Add coments to places where STATIC_ASSERT is used.
Update issue 96 Status: FixedInGit
This commit is contained in:
@@ -822,16 +822,6 @@ def generate_source(headername, enums, messages, extensions, options):
|
|||||||
if worst > 255 or checks:
|
if worst > 255 or checks:
|
||||||
yield '\n/* Check that field information fits in pb_field_t */\n'
|
yield '\n/* Check that field information fits in pb_field_t */\n'
|
||||||
|
|
||||||
if worst < 65536:
|
|
||||||
yield '#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)\n'
|
|
||||||
if worst > 255:
|
|
||||||
yield '#error Field descriptor for %s is too large. Define PB_FIELD_16BIT to fix this.\n' % worst_field
|
|
||||||
else:
|
|
||||||
assertion = ' && '.join(str(c) + ' < 256' for c in checks)
|
|
||||||
msgs = '_'.join(str(n) for n in checks_msgnames)
|
|
||||||
yield 'STATIC_ASSERT((%s), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_%s)\n'%(assertion,msgs)
|
|
||||||
yield '#endif\n\n'
|
|
||||||
|
|
||||||
if worst > 65535 or checks:
|
if worst > 65535 or checks:
|
||||||
yield '#if !defined(PB_FIELD_32BIT)\n'
|
yield '#if !defined(PB_FIELD_32BIT)\n'
|
||||||
if worst > 65535:
|
if worst > 65535:
|
||||||
@@ -839,8 +829,32 @@ def generate_source(headername, enums, messages, extensions, options):
|
|||||||
else:
|
else:
|
||||||
assertion = ' && '.join(str(c) + ' < 65536' for c in checks)
|
assertion = ' && '.join(str(c) + ' < 65536' for c in checks)
|
||||||
msgs = '_'.join(str(n) for n in checks_msgnames)
|
msgs = '_'.join(str(n) for n in checks_msgnames)
|
||||||
|
yield '/* If you get an error here, it means that you need to define PB_FIELD_32BIT\n'
|
||||||
|
yield ' * compile-time option. You can do that in pb.h or on compiler command line.\n'
|
||||||
|
yield ' * \n'
|
||||||
|
yield ' * The reason you need to do this is that some of your messages contain tag\n'
|
||||||
|
yield ' * numbers or field sizes that are larger than what can fit in 8 or 16 bit\n'
|
||||||
|
yield ' * field descriptors.\n'
|
||||||
|
yield ' */\n'
|
||||||
yield 'STATIC_ASSERT((%s), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_%s)\n'%(assertion,msgs)
|
yield 'STATIC_ASSERT((%s), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_%s)\n'%(assertion,msgs)
|
||||||
yield '#endif\n'
|
yield '#endif\n\n'
|
||||||
|
|
||||||
|
if worst < 65536:
|
||||||
|
yield '#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)\n'
|
||||||
|
if worst > 255:
|
||||||
|
yield '#error Field descriptor for %s is too large. Define PB_FIELD_16BIT to fix this.\n' % worst_field
|
||||||
|
else:
|
||||||
|
assertion = ' && '.join(str(c) + ' < 256' for c in checks)
|
||||||
|
msgs = '_'.join(str(n) for n in checks_msgnames)
|
||||||
|
yield '/* If you get an error here, it means that you need to define PB_FIELD_16BIT\n'
|
||||||
|
yield ' * compile-time option. You can do that in pb.h or on compiler command line.\n'
|
||||||
|
yield ' * \n'
|
||||||
|
yield ' * The reason you need to do this is that some of your messages contain tag\n'
|
||||||
|
yield ' * numbers or field sizes that are larger than what can fit in the default\n'
|
||||||
|
yield ' * 8 bit descriptors.\n'
|
||||||
|
yield ' */\n'
|
||||||
|
yield 'STATIC_ASSERT((%s), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_%s)\n'%(assertion,msgs)
|
||||||
|
yield '#endif\n\n'
|
||||||
|
|
||||||
# Add check for sizeof(double)
|
# Add check for sizeof(double)
|
||||||
has_double = False
|
has_double = False
|
||||||
|
|||||||
16
pb.h
16
pb.h
@@ -96,8 +96,14 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Compile-time assertion, used for checking compatible compilation options.
|
/* Compile-time assertion, used for checking compatible compilation options.
|
||||||
* If this fails on your compiler for some reason, use #define STATIC_ASSERT
|
* If this does not work properly on your compiler, use #define STATIC_ASSERT
|
||||||
* to disable it. */
|
* to disable it.
|
||||||
|
*
|
||||||
|
* But before doing that, check carefully the error message / place where it
|
||||||
|
* comes from to see if the error has a real cause. Unfortunately the error
|
||||||
|
* message is not always very clear to read, but you can see the reason better
|
||||||
|
* in the place where the STATIC_ASSERT macro was called.
|
||||||
|
*/
|
||||||
#ifndef STATIC_ASSERT
|
#ifndef STATIC_ASSERT
|
||||||
#define STATIC_ASSERT(COND,MSG) typedef char STATIC_ASSERT_MSG(MSG, __LINE__, __COUNTER__)[(COND)?1:-1];
|
#define STATIC_ASSERT(COND,MSG) typedef char STATIC_ASSERT_MSG(MSG, __LINE__, __COUNTER__)[(COND)?1:-1];
|
||||||
#define STATIC_ASSERT_MSG(MSG, LINE, COUNTER) STATIC_ASSERT_MSG_(MSG, LINE, COUNTER)
|
#define STATIC_ASSERT_MSG(MSG, LINE, COUNTER) STATIC_ASSERT_MSG_(MSG, LINE, COUNTER)
|
||||||
@@ -210,7 +216,11 @@ struct _pb_field_t {
|
|||||||
PB_PACKED_STRUCT_END
|
PB_PACKED_STRUCT_END
|
||||||
|
|
||||||
/* Make sure that the standard integer types are of the expected sizes.
|
/* Make sure that the standard integer types are of the expected sizes.
|
||||||
* All kinds of things may break otherwise.. atleast all fixed* types. */
|
* All kinds of things may break otherwise.. atleast all fixed* types.
|
||||||
|
*
|
||||||
|
* If you get errors here, it probably means that your stdint.h is not
|
||||||
|
* correct for your platform.
|
||||||
|
*/
|
||||||
STATIC_ASSERT(sizeof(int8_t) == 1, INT8_T_WRONG_SIZE)
|
STATIC_ASSERT(sizeof(int8_t) == 1, INT8_T_WRONG_SIZE)
|
||||||
STATIC_ASSERT(sizeof(uint8_t) == 1, UINT8_T_WRONG_SIZE)
|
STATIC_ASSERT(sizeof(uint8_t) == 1, UINT8_T_WRONG_SIZE)
|
||||||
STATIC_ASSERT(sizeof(int16_t) == 2, INT16_T_WRONG_SIZE)
|
STATIC_ASSERT(sizeof(int16_t) == 2, INT16_T_WRONG_SIZE)
|
||||||
|
|||||||
Reference in New Issue
Block a user