diff options
author | Joshua Haberman <jhaberman@gmail.com> | 2018-12-15 16:17:48 -0800 |
---|---|---|
committer | Joshua Haberman <jhaberman@gmail.com> | 2018-12-15 16:17:48 -0800 |
commit | 380558922b661499f4eb43b0463b5a73e5fe87b7 (patch) | |
tree | a4784816965ae37e72bde3983c68738d7b0d41a4 /upbc | |
parent | 2681a17513be312d1da924a1644f040eb8c1372a (diff) |
test_encoder passes! Other tests still need to be fixed.
Diffstat (limited to 'upbc')
-rw-r--r-- | upbc/generator.cc | 2 | ||||
-rw-r--r-- | upbc/message_layout.cc | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/upbc/generator.cc b/upbc/generator.cc index bb29041..68996a9 100644 --- a/upbc/generator.cc +++ b/upbc/generator.cc @@ -521,7 +521,7 @@ void WriteSource(const protobuf::FileDescriptor* file, Output& output) { } if (MessageLayout::HasHasbit(field)) { - presence = absl::StrCat(layout.GetHasbitIndex(field) + 1); + presence = absl::StrCat(layout.GetHasbitIndex(field)); } else if (field->containing_oneof()) { MessageLayout::Size case_offset = layout.GetOneofCaseOffset(field->containing_oneof()); diff --git a/upbc/message_layout.cc b/upbc/message_layout.cc index 5956424..f0a6872 100644 --- a/upbc/message_layout.cc +++ b/upbc/message_layout.cc @@ -130,7 +130,9 @@ void MessageLayout::PlaceNonOneofFields( int hasbit_count = 0; for (auto field : field_order) { if (HasHasbit(field)) { - hasbit_indexes_[field] = hasbit_count++; + // We don't use hasbit 0, so that 0 can indicate "no presence" in the + // table. This wastes one hasbit, but we don't worry about it for now. + hasbit_indexes_[field] = ++hasbit_count; } } |