diff options
author | Joshua Haberman <joshua@reverberate.org> | 2010-06-10 09:14:31 -0700 |
---|---|---|
committer | Joshua Haberman <joshua@reverberate.org> | 2010-06-10 09:14:31 -0700 |
commit | 563325435753fae01d2b45cceba8b9d14c8a7aad (patch) | |
tree | f4ce7aab922308d0f2f6a2d7cb742e76b3b791d3 /src/upb.c | |
parent | 5743636ad19eafb11eddeefd29f2803052dadff2 (diff) |
Implement proper type checking again.
Diffstat (limited to 'src/upb.c')
-rw-r--r-- | src/upb.c | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -11,6 +11,34 @@ #include "upb.h" +#define alignof(t) offsetof(struct { char c; t x; }, x) +#define TYPE_INFO(wire_type, ctype, allows_delimited) \ + {alignof(ctype), sizeof(ctype), wire_type, \ + (1 << wire_type) | (allows_delimited << UPB_WIRE_TYPE_DELIMITED), \ + #ctype}, + +upb_type_info upb_types[] = { + {0, 0, 0, ""} // There is no type 0. + TYPE_INFO(UPB_WIRE_TYPE_64BIT, double, 1), // DOUBLE + TYPE_INFO(UPB_WIRE_TYPE_32BIT, float, 1), // FLOAT + TYPE_INFO(UPB_WIRE_TYPE_VARINT, int64_t, 1), // INT64 + TYPE_INFO(UPB_WIRE_TYPE_VARINT, uint64_t, 1), // UINT64 + TYPE_INFO(UPB_WIRE_TYPE_VARINT, int32_t, 1), // INT32 + TYPE_INFO(UPB_WIRE_TYPE_64BIT, uint64_t, 1), // FIXED64 + TYPE_INFO(UPB_WIRE_TYPE_32BIT, uint32_t, 1), // FIXED32 + TYPE_INFO(UPB_WIRE_TYPE_VARINT, bool, 1), // BOOL + TYPE_INFO(UPB_WIRE_TYPE_DELIMITED, void*, 1), // STRING + TYPE_INFO(UPB_WIRE_TYPE_START_GROUP, void*, 0), // GROUP + TYPE_INFO(UPB_WIRE_TYPE_DELIMITED, void*, 1), // MESSAGE + TYPE_INFO(UPB_WIRE_TYPE_DELIMITED, void*, 1), // BYTES + TYPE_INFO(UPB_WIRE_TYPE_VARINT, uint32_t, 1), // UINT32 + TYPE_INFO(UPB_WIRE_TYPE_VARINT, uint32_t, 1), // ENUM + TYPE_INFO(UPB_WIRE_TYPE_32BIT, int32_t, 1), // SFIXED32 + TYPE_INFO(UPB_WIRE_TYPE_64BIT, int64_t, 1), // SFIXED64 + TYPE_INFO(UPB_WIRE_TYPE_VARINT, int32_t, 1), // SINT32 + TYPE_INFO(UPB_WIRE_TYPE_VARINT, int64_t, 1), // SINT64 +}; + void upb_seterr(upb_status *status, enum upb_status_code code, const char *msg, ...) { |