summaryrefslogtreecommitdiff
path: root/src/upb.c
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2010-06-03 19:55:39 -0700
committerJoshua Haberman <joshua@reverberate.org>2010-06-03 19:55:39 -0700
commitd29f80d6f320143363fb101a9e94f89c17788468 (patch)
tree73e555e6712f46f103d4a6c93c762631f09484fa /src/upb.c
parenta484ea0275f4d451d881b4edb1e1e4ae93be42a7 (diff)
More incremental work.
Diffstat (limited to 'src/upb.c')
-rw-r--r--src/upb.c38
1 files changed, 20 insertions, 18 deletions
diff --git a/src/upb.c b/src/upb.c
index 146a9a5..5d145e5 100644
--- a/src/upb.c
+++ b/src/upb.c
@@ -15,25 +15,27 @@
[GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_ ## proto_type] = \
{alignof(ctype), sizeof(ctype), wire_type, #ctype},
+// With packed fields, any type expecting 32-bit, 64-bit or varint can instead
+// receive delimited.
upb_type_info upb_types[] = {
- TYPE_INFO(DOUBLE, UPB_WIRE_TYPE_64BIT, double)
- TYPE_INFO(FLOAT, UPB_WIRE_TYPE_32BIT, float)
- TYPE_INFO(INT64, UPB_WIRE_TYPE_VARINT, int64_t)
- TYPE_INFO(UINT64, UPB_WIRE_TYPE_VARINT, uint64_t)
- TYPE_INFO(INT32, UPB_WIRE_TYPE_VARINT, int32_t)
- TYPE_INFO(FIXED64, UPB_WIRE_TYPE_64BIT, uint64_t)
- TYPE_INFO(FIXED32, UPB_WIRE_TYPE_32BIT, uint32_t)
- TYPE_INFO(BOOL, UPB_WIRE_TYPE_VARINT, bool)
- TYPE_INFO(MESSAGE, UPB_WIRE_TYPE_DELIMITED, void*)
- TYPE_INFO(GROUP, UPB_WIRE_TYPE_START_GROUP, void*)
- TYPE_INFO(UINT32, UPB_WIRE_TYPE_VARINT, uint32_t)
- TYPE_INFO(ENUM, UPB_WIRE_TYPE_VARINT, uint32_t)
- TYPE_INFO(SFIXED32, UPB_WIRE_TYPE_32BIT, int32_t)
- TYPE_INFO(SFIXED64, UPB_WIRE_TYPE_64BIT, int64_t)
- TYPE_INFO(SINT32, UPB_WIRE_TYPE_VARINT, int32_t)
- TYPE_INFO(SINT64, UPB_WIRE_TYPE_VARINT, int64_t)
- TYPE_INFO(STRING, UPB_WIRE_TYPE_DELIMITED, upb_strptr)
- TYPE_INFO(BYTES, UPB_WIRE_TYPE_DELIMITED, upb_strptr)
+ TYPE_INFO(DOUBLE, (1<<UPB_WIRE_TYPE_64BIT)|(1<<UPB_WIRE_TYPE_DELIMITED), double)
+ TYPE_INFO(FLOAT, (1<<UPB_WIRE_TYPE_32BIT|(1<<UPB_WIRE_TYPE_DELIMITED), float)
+ TYPE_INFO(INT64, (1<<UPB_WIRE_TYPE_VARINT|(1<<UPB_WIRE_TYPE_DELIMITED), int64_t)
+ TYPE_INFO(UINT64, (1<<UPB_WIRE_TYPE_VARINT|(1<<UPB_WIRE_TYPE_DELIMITED), uint64_t)
+ TYPE_INFO(INT32, (1<<UPB_WIRE_TYPE_VARINT|(1<<UPB_WIRE_TYPE_DELIMITED), int32_t)
+ TYPE_INFO(FIXED64, (1<<UPB_WIRE_TYPE_64BIT|(1<<UPB_WIRE_TYPE_DELIMITED), uint64_t)
+ TYPE_INFO(FIXED32, (1<<UPB_WIRE_TYPE_32BIT|(1<<UPB_WIRE_TYPE_DELIMITED), uint32_t)
+ TYPE_INFO(BOOL, (1<<UPB_WIRE_TYPE_VARINT|(1<<UPB_WIRE_TYPE_DELIMITED), bool)
+ TYPE_INFO(MESSAGE, (1<<UPB_WIRE_TYPE_DELIMITED, void*)
+ TYPE_INFO(GROUP, (1<<UPB_WIRE_TYPE_START_GROUP, void*)
+ TYPE_INFO(UINT32, (1<<UPB_WIRE_TYPE_VARINT)|(1<<UPB_WIRE_TYPE_DELIMITED), uint32_t)
+ TYPE_INFO(ENUM, (1<<UPB_WIRE_TYPE_VARINT)|(1<<UPB_WIRE_TYPE_DELIMITED), uint32_t)
+ TYPE_INFO(SFIXED32, (1<<UPB_WIRE_TYPE_32BIT)|(1<<UPB_WIRE_TYPE_DELIMITED), int32_t)
+ TYPE_INFO(SFIXED64, (1<<UPB_WIRE_TYPE_64BIT)|(1<<UPB_WIRE_TYPE_DELIMITED), int64_t)
+ TYPE_INFO(SINT32, (1<<UPB_WIRE_TYPE_VARINT)|(1<<UPB_WIRE_TYPE_DELIMITED), int32_t)
+ TYPE_INFO(SINT64, (1<<UPB_WIRE_TYPE_VARINT)|(1<<UPB_WIRE_TYPE_DELIMITED), int64_t)
+ TYPE_INFO(STRING, (1<<UPB_WIRE_TYPE_DELIMITED), upb_strptr)
+ TYPE_INFO(BYTES, (1<<UPB_WIRE_TYPE_DELIMITED), upb_strptr)
};
void upb_seterr(upb_status *status, enum upb_status_code code,
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback