summaryrefslogtreecommitdiff
path: root/src/upb.c
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2010-06-10 09:14:31 -0700
committerJoshua Haberman <joshua@reverberate.org>2010-06-10 09:14:31 -0700
commit563325435753fae01d2b45cceba8b9d14c8a7aad (patch)
treef4ce7aab922308d0f2f6a2d7cb742e76b3b791d3 /src/upb.c
parent5743636ad19eafb11eddeefd29f2803052dadff2 (diff)
Implement proper type checking again.
Diffstat (limited to 'src/upb.c')
-rw-r--r--src/upb.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/upb.c b/src/upb.c
index bd41613..189dfe4 100644
--- a/src/upb.c
+++ b/src/upb.c
@@ -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, ...)
{
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback