diff --git a/bench/PERF_LOG.md b/bench/PERF_LOG.md index 08eb50f08fa09ccca28fb5c18a591da0d4d34074..3f9de725a486655d4e9281a604ac696279c105c1 100644 --- a/bench/PERF_LOG.md +++ b/bench/PERF_LOG.md @@ -84,6 +84,59 @@ --- +## 2026-05-18 — cch: local counter for repeated-field append + +**Task:** [tarantool-protobuf-cch] Decoder: use local counter instead of +`#list` at repeated-field append. Profile attributed 6.2% of Person 1KB +decode time to `list[#list + 1] = val` re-traversing the list per +append (26 emails per Person → 26 re-scans). + +**Change:** In `cmd/protoc-gen-tarantool/internal/gen/inline.go`, the +generated `M.X_decode` now declares one counter local per repeated +non-map field at function entry: + +```lua +local _n_emails = 0 +local _n_lucky_numbers = 0 +-- ... +``` + +Each `list[#list + 1] = val` emit becomes +`_n_emails = _n_emails + 1; list[_n_emails] = val`. Counters survive +across loop iterations, so out-of-order wire entries for the same field +keep appending past the existing length without re-scanning. + +Map fields are skipped (hash-keyed, no array index). + +**Tests:** 745/745. JIT: 37/37, 0 bridges. + +**Bench (Person full, msgs/s, median-of-3 vs post-4kj baseline):** + +| size | dir | post-4kj | cch | Δ | +|-------|-----|-----------|-----------|----------| +| 1KB | dec | 109,792 | 115,310 | **+5.0%** | +| 10KB | dec | 15,084 | 15,831 | **+5.0%** | +| 100KB | dec | 1,512 | 1,620 | **+7.1%** | +| 10B | dec | 2,579,347 | 2,495,633 | -3.2% | +| 100B | dec | 2,122,601 | 2,131,196 | +0.4% | +| 1KB | enc | 293,367 | 294,691 | +0.5% | +| 10KB | enc | 59,390 | 58,684 | -1.2% | +| 100KB | enc | 6,570 | 6,666 | +1.5% | + +Decode wins land at 1KB+ where the repeated-field pattern dominates +(Person has 26 emails). At 10B no repeats fire, so the small -3.2% is +noise. Encode unchanged path, flat. Profile's "6% of decode time" +target translated cleanly into +5–7% on sizes that exercise repeated +fields. + +**Runtime mode:** flat. cch only touches mode=full repeated emit; +runtime dispatches through `pb.codec` which already uses a different +append shape. + +**Commit:** see git history for SHA. + +--- + ## 2026-05-18 — 4kj: inline 1-byte tag fast path at decode call sites **Task:** [tarantool-protobuf-4kj] Decoder: generated tag/length fast path diff --git a/cmd/protoc-gen-tarantool/internal/gen/inline.go b/cmd/protoc-gen-tarantool/internal/gen/inline.go index 6f4814714e8f835060b3fa96b9f796fbbc0f28ee..7d55041d0539a0a6ed31e457ee119df1855a77e4 100644 --- a/cmd/protoc-gen-tarantool/internal/gen/inline.go +++ b/cmd/protoc-gen-tarantool/internal/gen/inline.go @@ -370,6 +370,17 @@ w.line(" end") w.line(" local result = {}") w.line(" local pos, len = 1, #buf") w.line(" local _uf") + // Per-repeated-field counters. Replace `#list + 1` (re-traverses + // the list every append) with `_n_ = _n_ + 1`. The + // counter survives across loop iterations, so out-of-order wire + // entries for the same field continue counting from the existing + // position without re-scanning. Map fields don't need a counter + // (hash keys, not array indices). + for _, f := range m.Fields { + if f.Desc.IsList() && !f.Desc.IsMap() { + w.line(" local _n_%s = 0", string(f.Desc.Name())) + } + } w.line(" while pos <= len do") w.line(" local _tag_start = pos") w.line(" local id, wt") @@ -496,6 +507,7 @@ } func emitInlineDecodeRepeated(w *writer, f *protogen.Field, fname string, file *protogen.File, selfPath string, imports map[string]string, prefix string) { dst := luaFieldAccess("result", fname) + cnt := "_n_" + string(f.Desc.Name()) w.line(" local list = %s", dst) w.line(" if list == nil then list = {}; %s = list end", dst) @@ -507,11 +519,11 @@ descRef := typeRef(file, f.Message.Desc, selfPath, imports, "_descriptor", prefix) w.line(" local payload") w.line(" payload, pos = pb.codec.decode_group(%s, buf, pos, %d)", descRef, f.Desc.Number()) - w.line(" list[#list + 1] = payload") + w.line(" %s = %s + 1; list[%s] = payload", cnt, cnt, cnt) } else { w.line(" local payload") w.line(" payload, pos = wire.decode_len(buf, pos)") - w.line(" list[#list + 1] = %s(payload)", ref) + w.line(" %s = %s + 1; list[%s] = %s(payload)", cnt, cnt, cnt, ref) } case f.Enum != nil: // Enums are packable (proto3 default). Accept both packed and per-element. @@ -522,12 +534,12 @@ w.line(" local p2, lim = 1, #payload") w.line(" while p2 <= lim do") w.line(" local u") w.line(" u, p2 = wire.decode_varint(payload, p2)") - w.line(" list[#list + 1] = wire.varint_to_int32(u)") + w.line(" %s = %s + 1; list[%s] = wire.varint_to_int32(u)", cnt, cnt, cnt) w.line(" end") w.line(" else") w.line(" local u") w.line(" u, pos = wire.decode_varint(buf, pos)") - w.line(" list[#list + 1] = wire.varint_to_int32(u)") + w.line(" %s = %s + 1; list[%s] = wire.varint_to_int32(u)", cnt, cnt, cnt) w.line(" end") default: st := scalarName(f.Desc.Kind()) @@ -540,17 +552,17 @@ w.line(" local p2, lim = 1, #payload") w.line(" while p2 <= lim do") w.line(" local val") w.line(" val, p2 = wire.decode_%s(payload, p2)", st) - w.line(" list[#list + 1] = val") + w.line(" %s = %s + 1; list[%s] = val", cnt, cnt, cnt) w.line(" end") w.line(" else") w.line(" local val") w.line(" val, pos = wire.decode_%s(buf, pos)", st) - w.line(" list[#list + 1] = val") + w.line(" %s = %s + 1; list[%s] = val", cnt, cnt, cnt) w.line(" end") } else { w.line(" local val") w.line(" val, pos = wire.decode_%s(buf, pos)", st) - w.line(" list[#list + 1] = val") + w.line(" %s = %s + 1; list[%s] = val", cnt, cnt, cnt) } } } diff --git a/examples/expected/full/conformance/conformance_pb.lua b/examples/expected/full/conformance/conformance_pb.lua index 2351e38b3f36a06fea998160a902170928debba7..c08e09dec9c99a2b2fce858558210367de7eab99 100644 --- a/examples/expected/full/conformance/conformance_pb.lua +++ b/examples/expected/full/conformance/conformance_pb.lua @@ -376,6 +376,7 @@ end local result = {} local pos, len = 1, #buf local _uf + local _n_test = 0 while pos <= len do local _tag_start = pos local id, wt @@ -394,7 +395,7 @@ local list = result.test if list == nil then list = {}; result.test = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = M.TestStatus_decode(payload) + _n_test = _n_test + 1; list[_n_test] = M.TestStatus_decode(payload) else local _ebid = M.FailureSet_descriptor.extensions_by_id local _ext = _ebid and _ebid[id] or nil diff --git a/examples/expected/full/hello/hello_pb.lua b/examples/expected/full/hello/hello_pb.lua index 061ad258bf84218245c2d0b378cea539e5b10d6f..8163623c67d5468c6e16c9c58557fef06f9e43c3 100644 --- a/examples/expected/full/hello/hello_pb.lua +++ b/examples/expected/full/hello/hello_pb.lua @@ -1195,6 +1195,9 @@ end local result = {} local pos, len = 1, #buf local _uf + local _n_emails = 0 + local _n_friends = 0 + local _n_lucky_numbers = 0 while pos <= len do local _tag_start = pos local id, wt @@ -1221,7 +1224,7 @@ local list = result.emails if list == nil then list = {}; result.emails = list end local val val, pos = wire.decode_string(buf, pos) - list[#list + 1] = val + _n_emails = _n_emails + 1; list[_n_emails] = val elseif id == 4 then local u u, pos = wire.decode_varint(buf, pos) @@ -1240,7 +1243,7 @@ local list = result.friends if list == nil then list = {}; result.friends = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = M.Person_decode(payload) + _n_friends = _n_friends + 1; list[_n_friends] = M.Person_decode(payload) elseif id == 7 then local list = result.lucky_numbers if list == nil then list = {}; result.lucky_numbers = list end @@ -1251,12 +1254,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_lucky_numbers = _n_lucky_numbers + 1; list[_n_lucky_numbers] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_lucky_numbers = _n_lucky_numbers + 1; list[_n_lucky_numbers] = val end elseif id == 8 then local val diff --git a/examples/expected/full/proto2_basic/proto2_basic_pb.lua b/examples/expected/full/proto2_basic/proto2_basic_pb.lua index b1f907a88d95c19aceb62108aa0bf9272b2ab8e6..c55a29ef23f64f1000bdcfdc98b439beedfae887 100644 --- a/examples/expected/full/proto2_basic/proto2_basic_pb.lua +++ b/examples/expected/full/proto2_basic/proto2_basic_pb.lua @@ -550,6 +550,9 @@ end local result = {} local pos, len = 1, #buf local _uf + local _n_packed_default = 0 + local _n_explicitly_packed = 0 + local _n_explicitly_unpacked = 0 while pos <= len do local _tag_start = pos local id, wt @@ -581,12 +584,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_packed_default = _n_packed_default + 1; list[_n_packed_default] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_packed_default = _n_packed_default + 1; list[_n_packed_default] = val end elseif id == 4 then local list = result.explicitly_packed @@ -598,12 +601,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_explicitly_packed = _n_explicitly_packed + 1; list[_n_explicitly_packed] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_explicitly_packed = _n_explicitly_packed + 1; list[_n_explicitly_packed] = val end elseif id == 5 then local list = result.explicitly_unpacked @@ -615,12 +618,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_explicitly_unpacked = _n_explicitly_unpacked + 1; list[_n_explicitly_unpacked] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_explicitly_unpacked = _n_explicitly_unpacked + 1; list[_n_explicitly_unpacked] = val end else local _ebid = M.Cardinality_descriptor.extensions_by_id @@ -924,6 +927,7 @@ end local result = {} local pos, len = 1, #buf local _uf + local _n_repgroup = 0 while pos <= len do local _tag_start = pos local id, wt @@ -951,7 +955,7 @@ local list = result.repgroup if list == nil then list = {}; result.repgroup = list end local payload payload, pos = pb.codec.decode_group(M.WithGroup_RepGroup_descriptor, buf, pos, 4) - list[#list + 1] = payload + _n_repgroup = _n_repgroup + 1; list[_n_repgroup] = payload else local _ebid = M.WithGroup_descriptor.extensions_by_id local _ext = _ebid and _ebid[id] or nil @@ -1304,6 +1308,8 @@ end local result = {} local pos, len = 1, #buf local _uf + local _n_lucky_numbers = 0 + local _n_tags = 0 while pos <= len do local _tag_start = pos local id, wt @@ -1339,19 +1345,19 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_lucky_numbers = _n_lucky_numbers + 1; list[_n_lucky_numbers] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_lucky_numbers = _n_lucky_numbers + 1; list[_n_lucky_numbers] = val end elseif id == 5 then local list = result.tags if list == nil then list = {}; result.tags = list end local val val, pos = wire.decode_string(buf, pos) - list[#list + 1] = val + _n_tags = _n_tags + 1; list[_n_tags] = val elseif id == 6 then local payload payload, pos = wire.decode_len(buf, pos) diff --git a/examples/expected/full/protobuf_test_messages/proto2/test_messages_proto2_pb.lua b/examples/expected/full/protobuf_test_messages/proto2/test_messages_proto2_pb.lua index 6a7397b104244b915a404e92bf87c46600bccefd..220abe09c068b2d6b25bcdb46f899717d9a366ed 100644 --- a/examples/expected/full/protobuf_test_messages/proto2/test_messages_proto2_pb.lua +++ b/examples/expected/full/protobuf_test_messages/proto2/test_messages_proto2_pb.lua @@ -2612,6 +2612,55 @@ end local result = {} local pos, len = 1, #buf local _uf + local _n_repeated_int32 = 0 + local _n_repeated_int64 = 0 + local _n_repeated_uint32 = 0 + local _n_repeated_uint64 = 0 + local _n_repeated_sint32 = 0 + local _n_repeated_sint64 = 0 + local _n_repeated_fixed32 = 0 + local _n_repeated_fixed64 = 0 + local _n_repeated_sfixed32 = 0 + local _n_repeated_sfixed64 = 0 + local _n_repeated_float = 0 + local _n_repeated_double = 0 + local _n_repeated_bool = 0 + local _n_repeated_string = 0 + local _n_repeated_bytes = 0 + local _n_repeated_nested_message = 0 + local _n_repeated_foreign_message = 0 + local _n_repeated_nested_enum = 0 + local _n_repeated_foreign_enum = 0 + local _n_repeated_string_piece = 0 + local _n_repeated_cord = 0 + local _n_packed_int32 = 0 + local _n_packed_int64 = 0 + local _n_packed_uint32 = 0 + local _n_packed_uint64 = 0 + local _n_packed_sint32 = 0 + local _n_packed_sint64 = 0 + local _n_packed_fixed32 = 0 + local _n_packed_fixed64 = 0 + local _n_packed_sfixed32 = 0 + local _n_packed_sfixed64 = 0 + local _n_packed_float = 0 + local _n_packed_double = 0 + local _n_packed_bool = 0 + local _n_packed_nested_enum = 0 + local _n_unpacked_int32 = 0 + local _n_unpacked_int64 = 0 + local _n_unpacked_uint32 = 0 + local _n_unpacked_uint64 = 0 + local _n_unpacked_sint32 = 0 + local _n_unpacked_sint64 = 0 + local _n_unpacked_fixed32 = 0 + local _n_unpacked_fixed64 = 0 + local _n_unpacked_sfixed32 = 0 + local _n_unpacked_sfixed64 = 0 + local _n_unpacked_float = 0 + local _n_unpacked_double = 0 + local _n_unpacked_bool = 0 + local _n_unpacked_nested_enum = 0 while pos <= len do local _tag_start = pos local id, wt @@ -2738,12 +2787,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_repeated_int32 = _n_repeated_int32 + 1; list[_n_repeated_int32] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_repeated_int32 = _n_repeated_int32 + 1; list[_n_repeated_int32] = val end elseif id == 32 then local list = result.repeated_int64 @@ -2755,12 +2804,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int64(payload, p2) - list[#list + 1] = val + _n_repeated_int64 = _n_repeated_int64 + 1; list[_n_repeated_int64] = val end else local val val, pos = wire.decode_int64(buf, pos) - list[#list + 1] = val + _n_repeated_int64 = _n_repeated_int64 + 1; list[_n_repeated_int64] = val end elseif id == 33 then local list = result.repeated_uint32 @@ -2772,12 +2821,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint32(payload, p2) - list[#list + 1] = val + _n_repeated_uint32 = _n_repeated_uint32 + 1; list[_n_repeated_uint32] = val end else local val val, pos = wire.decode_uint32(buf, pos) - list[#list + 1] = val + _n_repeated_uint32 = _n_repeated_uint32 + 1; list[_n_repeated_uint32] = val end elseif id == 34 then local list = result.repeated_uint64 @@ -2789,12 +2838,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint64(payload, p2) - list[#list + 1] = val + _n_repeated_uint64 = _n_repeated_uint64 + 1; list[_n_repeated_uint64] = val end else local val val, pos = wire.decode_uint64(buf, pos) - list[#list + 1] = val + _n_repeated_uint64 = _n_repeated_uint64 + 1; list[_n_repeated_uint64] = val end elseif id == 35 then local list = result.repeated_sint32 @@ -2806,12 +2855,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint32(payload, p2) - list[#list + 1] = val + _n_repeated_sint32 = _n_repeated_sint32 + 1; list[_n_repeated_sint32] = val end else local val val, pos = wire.decode_sint32(buf, pos) - list[#list + 1] = val + _n_repeated_sint32 = _n_repeated_sint32 + 1; list[_n_repeated_sint32] = val end elseif id == 36 then local list = result.repeated_sint64 @@ -2823,12 +2872,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint64(payload, p2) - list[#list + 1] = val + _n_repeated_sint64 = _n_repeated_sint64 + 1; list[_n_repeated_sint64] = val end else local val val, pos = wire.decode_sint64(buf, pos) - list[#list + 1] = val + _n_repeated_sint64 = _n_repeated_sint64 + 1; list[_n_repeated_sint64] = val end elseif id == 37 then local list = result.repeated_fixed32 @@ -2840,12 +2889,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed32(payload, p2) - list[#list + 1] = val + _n_repeated_fixed32 = _n_repeated_fixed32 + 1; list[_n_repeated_fixed32] = val end else local val val, pos = wire.decode_fixed32(buf, pos) - list[#list + 1] = val + _n_repeated_fixed32 = _n_repeated_fixed32 + 1; list[_n_repeated_fixed32] = val end elseif id == 38 then local list = result.repeated_fixed64 @@ -2857,12 +2906,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed64(payload, p2) - list[#list + 1] = val + _n_repeated_fixed64 = _n_repeated_fixed64 + 1; list[_n_repeated_fixed64] = val end else local val val, pos = wire.decode_fixed64(buf, pos) - list[#list + 1] = val + _n_repeated_fixed64 = _n_repeated_fixed64 + 1; list[_n_repeated_fixed64] = val end elseif id == 39 then local list = result.repeated_sfixed32 @@ -2874,12 +2923,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed32(payload, p2) - list[#list + 1] = val + _n_repeated_sfixed32 = _n_repeated_sfixed32 + 1; list[_n_repeated_sfixed32] = val end else local val val, pos = wire.decode_sfixed32(buf, pos) - list[#list + 1] = val + _n_repeated_sfixed32 = _n_repeated_sfixed32 + 1; list[_n_repeated_sfixed32] = val end elseif id == 40 then local list = result.repeated_sfixed64 @@ -2891,12 +2940,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed64(payload, p2) - list[#list + 1] = val + _n_repeated_sfixed64 = _n_repeated_sfixed64 + 1; list[_n_repeated_sfixed64] = val end else local val val, pos = wire.decode_sfixed64(buf, pos) - list[#list + 1] = val + _n_repeated_sfixed64 = _n_repeated_sfixed64 + 1; list[_n_repeated_sfixed64] = val end elseif id == 41 then local list = result.repeated_float @@ -2908,12 +2957,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_float(payload, p2) - list[#list + 1] = val + _n_repeated_float = _n_repeated_float + 1; list[_n_repeated_float] = val end else local val val, pos = wire.decode_float(buf, pos) - list[#list + 1] = val + _n_repeated_float = _n_repeated_float + 1; list[_n_repeated_float] = val end elseif id == 42 then local list = result.repeated_double @@ -2925,12 +2974,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_double(payload, p2) - list[#list + 1] = val + _n_repeated_double = _n_repeated_double + 1; list[_n_repeated_double] = val end else local val val, pos = wire.decode_double(buf, pos) - list[#list + 1] = val + _n_repeated_double = _n_repeated_double + 1; list[_n_repeated_double] = val end elseif id == 43 then local list = result.repeated_bool @@ -2942,37 +2991,37 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_bool(payload, p2) - list[#list + 1] = val + _n_repeated_bool = _n_repeated_bool + 1; list[_n_repeated_bool] = val end else local val val, pos = wire.decode_bool(buf, pos) - list[#list + 1] = val + _n_repeated_bool = _n_repeated_bool + 1; list[_n_repeated_bool] = val end elseif id == 44 then local list = result.repeated_string if list == nil then list = {}; result.repeated_string = list end local val val, pos = wire.decode_string(buf, pos) - list[#list + 1] = val + _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = val elseif id == 45 then local list = result.repeated_bytes if list == nil then list = {}; result.repeated_bytes = list end local val val, pos = wire.decode_bytes(buf, pos) - list[#list + 1] = val + _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = val elseif id == 48 then local list = result.repeated_nested_message if list == nil then list = {}; result.repeated_nested_message = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = M.TestAllTypesProto2_NestedMessage_decode(payload) + _n_repeated_nested_message = _n_repeated_nested_message + 1; list[_n_repeated_nested_message] = M.TestAllTypesProto2_NestedMessage_decode(payload) elseif id == 49 then local list = result.repeated_foreign_message if list == nil then list = {}; result.repeated_foreign_message = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = M.ForeignMessageProto2_decode(payload) + _n_repeated_foreign_message = _n_repeated_foreign_message + 1; list[_n_repeated_foreign_message] = M.ForeignMessageProto2_decode(payload) elseif id == 51 then local list = result.repeated_nested_enum if list == nil then list = {}; result.repeated_nested_enum = list end @@ -2983,12 +3032,12 @@ local p2, lim = 1, #payload while p2 <= lim do local u u, p2 = wire.decode_varint(payload, p2) - list[#list + 1] = wire.varint_to_int32(u) + _n_repeated_nested_enum = _n_repeated_nested_enum + 1; list[_n_repeated_nested_enum] = wire.varint_to_int32(u) end else local u u, pos = wire.decode_varint(buf, pos) - list[#list + 1] = wire.varint_to_int32(u) + _n_repeated_nested_enum = _n_repeated_nested_enum + 1; list[_n_repeated_nested_enum] = wire.varint_to_int32(u) end elseif id == 52 then local list = result.repeated_foreign_enum @@ -3000,25 +3049,25 @@ local p2, lim = 1, #payload while p2 <= lim do local u u, p2 = wire.decode_varint(payload, p2) - list[#list + 1] = wire.varint_to_int32(u) + _n_repeated_foreign_enum = _n_repeated_foreign_enum + 1; list[_n_repeated_foreign_enum] = wire.varint_to_int32(u) end else local u u, pos = wire.decode_varint(buf, pos) - list[#list + 1] = wire.varint_to_int32(u) + _n_repeated_foreign_enum = _n_repeated_foreign_enum + 1; list[_n_repeated_foreign_enum] = wire.varint_to_int32(u) end elseif id == 54 then local list = result.repeated_string_piece if list == nil then list = {}; result.repeated_string_piece = list end local val val, pos = wire.decode_string(buf, pos) - list[#list + 1] = val + _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = val elseif id == 55 then local list = result.repeated_cord if list == nil then list = {}; result.repeated_cord = list end local val val, pos = wire.decode_string(buf, pos) - list[#list + 1] = val + _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = val elseif id == 75 then local list = result.packed_int32 if list == nil then list = {}; result.packed_int32 = list end @@ -3029,12 +3078,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_packed_int32 = _n_packed_int32 + 1; list[_n_packed_int32] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_packed_int32 = _n_packed_int32 + 1; list[_n_packed_int32] = val end elseif id == 76 then local list = result.packed_int64 @@ -3046,12 +3095,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int64(payload, p2) - list[#list + 1] = val + _n_packed_int64 = _n_packed_int64 + 1; list[_n_packed_int64] = val end else local val val, pos = wire.decode_int64(buf, pos) - list[#list + 1] = val + _n_packed_int64 = _n_packed_int64 + 1; list[_n_packed_int64] = val end elseif id == 77 then local list = result.packed_uint32 @@ -3063,12 +3112,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint32(payload, p2) - list[#list + 1] = val + _n_packed_uint32 = _n_packed_uint32 + 1; list[_n_packed_uint32] = val end else local val val, pos = wire.decode_uint32(buf, pos) - list[#list + 1] = val + _n_packed_uint32 = _n_packed_uint32 + 1; list[_n_packed_uint32] = val end elseif id == 78 then local list = result.packed_uint64 @@ -3080,12 +3129,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint64(payload, p2) - list[#list + 1] = val + _n_packed_uint64 = _n_packed_uint64 + 1; list[_n_packed_uint64] = val end else local val val, pos = wire.decode_uint64(buf, pos) - list[#list + 1] = val + _n_packed_uint64 = _n_packed_uint64 + 1; list[_n_packed_uint64] = val end elseif id == 79 then local list = result.packed_sint32 @@ -3097,12 +3146,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint32(payload, p2) - list[#list + 1] = val + _n_packed_sint32 = _n_packed_sint32 + 1; list[_n_packed_sint32] = val end else local val val, pos = wire.decode_sint32(buf, pos) - list[#list + 1] = val + _n_packed_sint32 = _n_packed_sint32 + 1; list[_n_packed_sint32] = val end elseif id == 80 then local list = result.packed_sint64 @@ -3114,12 +3163,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint64(payload, p2) - list[#list + 1] = val + _n_packed_sint64 = _n_packed_sint64 + 1; list[_n_packed_sint64] = val end else local val val, pos = wire.decode_sint64(buf, pos) - list[#list + 1] = val + _n_packed_sint64 = _n_packed_sint64 + 1; list[_n_packed_sint64] = val end elseif id == 81 then local list = result.packed_fixed32 @@ -3131,12 +3180,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed32(payload, p2) - list[#list + 1] = val + _n_packed_fixed32 = _n_packed_fixed32 + 1; list[_n_packed_fixed32] = val end else local val val, pos = wire.decode_fixed32(buf, pos) - list[#list + 1] = val + _n_packed_fixed32 = _n_packed_fixed32 + 1; list[_n_packed_fixed32] = val end elseif id == 82 then local list = result.packed_fixed64 @@ -3148,12 +3197,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed64(payload, p2) - list[#list + 1] = val + _n_packed_fixed64 = _n_packed_fixed64 + 1; list[_n_packed_fixed64] = val end else local val val, pos = wire.decode_fixed64(buf, pos) - list[#list + 1] = val + _n_packed_fixed64 = _n_packed_fixed64 + 1; list[_n_packed_fixed64] = val end elseif id == 83 then local list = result.packed_sfixed32 @@ -3165,12 +3214,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed32(payload, p2) - list[#list + 1] = val + _n_packed_sfixed32 = _n_packed_sfixed32 + 1; list[_n_packed_sfixed32] = val end else local val val, pos = wire.decode_sfixed32(buf, pos) - list[#list + 1] = val + _n_packed_sfixed32 = _n_packed_sfixed32 + 1; list[_n_packed_sfixed32] = val end elseif id == 84 then local list = result.packed_sfixed64 @@ -3182,12 +3231,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed64(payload, p2) - list[#list + 1] = val + _n_packed_sfixed64 = _n_packed_sfixed64 + 1; list[_n_packed_sfixed64] = val end else local val val, pos = wire.decode_sfixed64(buf, pos) - list[#list + 1] = val + _n_packed_sfixed64 = _n_packed_sfixed64 + 1; list[_n_packed_sfixed64] = val end elseif id == 85 then local list = result.packed_float @@ -3199,12 +3248,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_float(payload, p2) - list[#list + 1] = val + _n_packed_float = _n_packed_float + 1; list[_n_packed_float] = val end else local val val, pos = wire.decode_float(buf, pos) - list[#list + 1] = val + _n_packed_float = _n_packed_float + 1; list[_n_packed_float] = val end elseif id == 86 then local list = result.packed_double @@ -3216,12 +3265,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_double(payload, p2) - list[#list + 1] = val + _n_packed_double = _n_packed_double + 1; list[_n_packed_double] = val end else local val val, pos = wire.decode_double(buf, pos) - list[#list + 1] = val + _n_packed_double = _n_packed_double + 1; list[_n_packed_double] = val end elseif id == 87 then local list = result.packed_bool @@ -3233,12 +3282,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_bool(payload, p2) - list[#list + 1] = val + _n_packed_bool = _n_packed_bool + 1; list[_n_packed_bool] = val end else local val val, pos = wire.decode_bool(buf, pos) - list[#list + 1] = val + _n_packed_bool = _n_packed_bool + 1; list[_n_packed_bool] = val end elseif id == 88 then local list = result.packed_nested_enum @@ -3250,12 +3299,12 @@ local p2, lim = 1, #payload while p2 <= lim do local u u, p2 = wire.decode_varint(payload, p2) - list[#list + 1] = wire.varint_to_int32(u) + _n_packed_nested_enum = _n_packed_nested_enum + 1; list[_n_packed_nested_enum] = wire.varint_to_int32(u) end else local u u, pos = wire.decode_varint(buf, pos) - list[#list + 1] = wire.varint_to_int32(u) + _n_packed_nested_enum = _n_packed_nested_enum + 1; list[_n_packed_nested_enum] = wire.varint_to_int32(u) end elseif id == 89 then local list = result.unpacked_int32 @@ -3267,12 +3316,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_unpacked_int32 = _n_unpacked_int32 + 1; list[_n_unpacked_int32] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_unpacked_int32 = _n_unpacked_int32 + 1; list[_n_unpacked_int32] = val end elseif id == 90 then local list = result.unpacked_int64 @@ -3284,12 +3333,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int64(payload, p2) - list[#list + 1] = val + _n_unpacked_int64 = _n_unpacked_int64 + 1; list[_n_unpacked_int64] = val end else local val val, pos = wire.decode_int64(buf, pos) - list[#list + 1] = val + _n_unpacked_int64 = _n_unpacked_int64 + 1; list[_n_unpacked_int64] = val end elseif id == 91 then local list = result.unpacked_uint32 @@ -3301,12 +3350,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint32(payload, p2) - list[#list + 1] = val + _n_unpacked_uint32 = _n_unpacked_uint32 + 1; list[_n_unpacked_uint32] = val end else local val val, pos = wire.decode_uint32(buf, pos) - list[#list + 1] = val + _n_unpacked_uint32 = _n_unpacked_uint32 + 1; list[_n_unpacked_uint32] = val end elseif id == 92 then local list = result.unpacked_uint64 @@ -3318,12 +3367,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint64(payload, p2) - list[#list + 1] = val + _n_unpacked_uint64 = _n_unpacked_uint64 + 1; list[_n_unpacked_uint64] = val end else local val val, pos = wire.decode_uint64(buf, pos) - list[#list + 1] = val + _n_unpacked_uint64 = _n_unpacked_uint64 + 1; list[_n_unpacked_uint64] = val end elseif id == 93 then local list = result.unpacked_sint32 @@ -3335,12 +3384,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint32(payload, p2) - list[#list + 1] = val + _n_unpacked_sint32 = _n_unpacked_sint32 + 1; list[_n_unpacked_sint32] = val end else local val val, pos = wire.decode_sint32(buf, pos) - list[#list + 1] = val + _n_unpacked_sint32 = _n_unpacked_sint32 + 1; list[_n_unpacked_sint32] = val end elseif id == 94 then local list = result.unpacked_sint64 @@ -3352,12 +3401,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint64(payload, p2) - list[#list + 1] = val + _n_unpacked_sint64 = _n_unpacked_sint64 + 1; list[_n_unpacked_sint64] = val end else local val val, pos = wire.decode_sint64(buf, pos) - list[#list + 1] = val + _n_unpacked_sint64 = _n_unpacked_sint64 + 1; list[_n_unpacked_sint64] = val end elseif id == 95 then local list = result.unpacked_fixed32 @@ -3369,12 +3418,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed32(payload, p2) - list[#list + 1] = val + _n_unpacked_fixed32 = _n_unpacked_fixed32 + 1; list[_n_unpacked_fixed32] = val end else local val val, pos = wire.decode_fixed32(buf, pos) - list[#list + 1] = val + _n_unpacked_fixed32 = _n_unpacked_fixed32 + 1; list[_n_unpacked_fixed32] = val end elseif id == 96 then local list = result.unpacked_fixed64 @@ -3386,12 +3435,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed64(payload, p2) - list[#list + 1] = val + _n_unpacked_fixed64 = _n_unpacked_fixed64 + 1; list[_n_unpacked_fixed64] = val end else local val val, pos = wire.decode_fixed64(buf, pos) - list[#list + 1] = val + _n_unpacked_fixed64 = _n_unpacked_fixed64 + 1; list[_n_unpacked_fixed64] = val end elseif id == 97 then local list = result.unpacked_sfixed32 @@ -3403,12 +3452,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed32(payload, p2) - list[#list + 1] = val + _n_unpacked_sfixed32 = _n_unpacked_sfixed32 + 1; list[_n_unpacked_sfixed32] = val end else local val val, pos = wire.decode_sfixed32(buf, pos) - list[#list + 1] = val + _n_unpacked_sfixed32 = _n_unpacked_sfixed32 + 1; list[_n_unpacked_sfixed32] = val end elseif id == 98 then local list = result.unpacked_sfixed64 @@ -3420,12 +3469,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed64(payload, p2) - list[#list + 1] = val + _n_unpacked_sfixed64 = _n_unpacked_sfixed64 + 1; list[_n_unpacked_sfixed64] = val end else local val val, pos = wire.decode_sfixed64(buf, pos) - list[#list + 1] = val + _n_unpacked_sfixed64 = _n_unpacked_sfixed64 + 1; list[_n_unpacked_sfixed64] = val end elseif id == 99 then local list = result.unpacked_float @@ -3437,12 +3486,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_float(payload, p2) - list[#list + 1] = val + _n_unpacked_float = _n_unpacked_float + 1; list[_n_unpacked_float] = val end else local val val, pos = wire.decode_float(buf, pos) - list[#list + 1] = val + _n_unpacked_float = _n_unpacked_float + 1; list[_n_unpacked_float] = val end elseif id == 100 then local list = result.unpacked_double @@ -3454,12 +3503,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_double(payload, p2) - list[#list + 1] = val + _n_unpacked_double = _n_unpacked_double + 1; list[_n_unpacked_double] = val end else local val val, pos = wire.decode_double(buf, pos) - list[#list + 1] = val + _n_unpacked_double = _n_unpacked_double + 1; list[_n_unpacked_double] = val end elseif id == 101 then local list = result.unpacked_bool @@ -3471,12 +3520,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_bool(payload, p2) - list[#list + 1] = val + _n_unpacked_bool = _n_unpacked_bool + 1; list[_n_unpacked_bool] = val end else local val val, pos = wire.decode_bool(buf, pos) - list[#list + 1] = val + _n_unpacked_bool = _n_unpacked_bool + 1; list[_n_unpacked_bool] = val end elseif id == 102 then local list = result.unpacked_nested_enum @@ -3488,12 +3537,12 @@ local p2, lim = 1, #payload while p2 <= lim do local u u, p2 = wire.decode_varint(payload, p2) - list[#list + 1] = wire.varint_to_int32(u) + _n_unpacked_nested_enum = _n_unpacked_nested_enum + 1; list[_n_unpacked_nested_enum] = wire.varint_to_int32(u) end else local u u, pos = wire.decode_varint(buf, pos) - list[#list + 1] = wire.varint_to_int32(u) + _n_unpacked_nested_enum = _n_unpacked_nested_enum + 1; list[_n_unpacked_nested_enum] = wire.varint_to_int32(u) end elseif id == 56 then local map = result.map_int32_int32 @@ -5116,6 +5165,7 @@ end local result = {} local pos, len = 1, #buf local _uf + local _n_repeated_int32 = 0 while pos <= len do local _tag_start = pos local id, wt @@ -5169,12 +5219,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_repeated_int32 = _n_repeated_int32 + 1; list[_n_repeated_int32] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_repeated_int32 = _n_repeated_int32 + 1; list[_n_repeated_int32] = val end else local _ebid = M.UnknownToTestAllTypes_descriptor.extensions_by_id @@ -5645,6 +5695,7 @@ end local result = {} local pos, len = 1, #buf local _uf + local _n_requires = 0 while pos <= len do local _tag_start = pos local id, wt @@ -5671,7 +5722,7 @@ local list = result.requires if list == nil then list = {}; result.requires = list end local val val, pos = wire.decode_string(buf, pos) - list[#list + 1] = val + _n_requires = _n_requires + 1; list[_n_requires] = val else local _ebid = M.ProtoWithKeywords_descriptor.extensions_by_id local _ext = _ebid and _ebid[id] or nil diff --git a/examples/expected/full/protobuf_test_messages/proto3/test_messages_proto3_pb.lua b/examples/expected/full/protobuf_test_messages/proto3/test_messages_proto3_pb.lua index 28179f786ffbf02b6dda311a768d1e6be316d91a..baca8363f14dfbf8f6273d534f919bb2fcffa9c8 100644 --- a/examples/expected/full/protobuf_test_messages/proto3/test_messages_proto3_pb.lua +++ b/examples/expected/full/protobuf_test_messages/proto3/test_messages_proto3_pb.lua @@ -2766,6 +2766,72 @@ end local result = {} local pos, len = 1, #buf local _uf + local _n_repeated_int32 = 0 + local _n_repeated_int64 = 0 + local _n_repeated_uint32 = 0 + local _n_repeated_uint64 = 0 + local _n_repeated_sint32 = 0 + local _n_repeated_sint64 = 0 + local _n_repeated_fixed32 = 0 + local _n_repeated_fixed64 = 0 + local _n_repeated_sfixed32 = 0 + local _n_repeated_sfixed64 = 0 + local _n_repeated_float = 0 + local _n_repeated_double = 0 + local _n_repeated_bool = 0 + local _n_repeated_string = 0 + local _n_repeated_bytes = 0 + local _n_repeated_nested_message = 0 + local _n_repeated_foreign_message = 0 + local _n_repeated_nested_enum = 0 + local _n_repeated_foreign_enum = 0 + local _n_repeated_string_piece = 0 + local _n_repeated_cord = 0 + local _n_packed_int32 = 0 + local _n_packed_int64 = 0 + local _n_packed_uint32 = 0 + local _n_packed_uint64 = 0 + local _n_packed_sint32 = 0 + local _n_packed_sint64 = 0 + local _n_packed_fixed32 = 0 + local _n_packed_fixed64 = 0 + local _n_packed_sfixed32 = 0 + local _n_packed_sfixed64 = 0 + local _n_packed_float = 0 + local _n_packed_double = 0 + local _n_packed_bool = 0 + local _n_packed_nested_enum = 0 + local _n_unpacked_int32 = 0 + local _n_unpacked_int64 = 0 + local _n_unpacked_uint32 = 0 + local _n_unpacked_uint64 = 0 + local _n_unpacked_sint32 = 0 + local _n_unpacked_sint64 = 0 + local _n_unpacked_fixed32 = 0 + local _n_unpacked_fixed64 = 0 + local _n_unpacked_sfixed32 = 0 + local _n_unpacked_sfixed64 = 0 + local _n_unpacked_float = 0 + local _n_unpacked_double = 0 + local _n_unpacked_bool = 0 + local _n_unpacked_nested_enum = 0 + local _n_repeated_bool_wrapper = 0 + local _n_repeated_int32_wrapper = 0 + local _n_repeated_int64_wrapper = 0 + local _n_repeated_uint32_wrapper = 0 + local _n_repeated_uint64_wrapper = 0 + local _n_repeated_float_wrapper = 0 + local _n_repeated_double_wrapper = 0 + local _n_repeated_string_wrapper = 0 + local _n_repeated_bytes_wrapper = 0 + local _n_repeated_duration = 0 + local _n_repeated_timestamp = 0 + local _n_repeated_fieldmask = 0 + local _n_repeated_struct = 0 + local _n_repeated_any = 0 + local _n_repeated_value = 0 + local _n_repeated_list_value = 0 + local _n_repeated_empty = 0 while pos <= len do local _tag_start = pos local id, wt @@ -2896,12 +2962,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_repeated_int32 = _n_repeated_int32 + 1; list[_n_repeated_int32] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_repeated_int32 = _n_repeated_int32 + 1; list[_n_repeated_int32] = val end elseif id == 32 then local list = result.repeated_int64 @@ -2913,12 +2979,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int64(payload, p2) - list[#list + 1] = val + _n_repeated_int64 = _n_repeated_int64 + 1; list[_n_repeated_int64] = val end else local val val, pos = wire.decode_int64(buf, pos) - list[#list + 1] = val + _n_repeated_int64 = _n_repeated_int64 + 1; list[_n_repeated_int64] = val end elseif id == 33 then local list = result.repeated_uint32 @@ -2930,12 +2996,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint32(payload, p2) - list[#list + 1] = val + _n_repeated_uint32 = _n_repeated_uint32 + 1; list[_n_repeated_uint32] = val end else local val val, pos = wire.decode_uint32(buf, pos) - list[#list + 1] = val + _n_repeated_uint32 = _n_repeated_uint32 + 1; list[_n_repeated_uint32] = val end elseif id == 34 then local list = result.repeated_uint64 @@ -2947,12 +3013,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint64(payload, p2) - list[#list + 1] = val + _n_repeated_uint64 = _n_repeated_uint64 + 1; list[_n_repeated_uint64] = val end else local val val, pos = wire.decode_uint64(buf, pos) - list[#list + 1] = val + _n_repeated_uint64 = _n_repeated_uint64 + 1; list[_n_repeated_uint64] = val end elseif id == 35 then local list = result.repeated_sint32 @@ -2964,12 +3030,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint32(payload, p2) - list[#list + 1] = val + _n_repeated_sint32 = _n_repeated_sint32 + 1; list[_n_repeated_sint32] = val end else local val val, pos = wire.decode_sint32(buf, pos) - list[#list + 1] = val + _n_repeated_sint32 = _n_repeated_sint32 + 1; list[_n_repeated_sint32] = val end elseif id == 36 then local list = result.repeated_sint64 @@ -2981,12 +3047,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint64(payload, p2) - list[#list + 1] = val + _n_repeated_sint64 = _n_repeated_sint64 + 1; list[_n_repeated_sint64] = val end else local val val, pos = wire.decode_sint64(buf, pos) - list[#list + 1] = val + _n_repeated_sint64 = _n_repeated_sint64 + 1; list[_n_repeated_sint64] = val end elseif id == 37 then local list = result.repeated_fixed32 @@ -2998,12 +3064,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed32(payload, p2) - list[#list + 1] = val + _n_repeated_fixed32 = _n_repeated_fixed32 + 1; list[_n_repeated_fixed32] = val end else local val val, pos = wire.decode_fixed32(buf, pos) - list[#list + 1] = val + _n_repeated_fixed32 = _n_repeated_fixed32 + 1; list[_n_repeated_fixed32] = val end elseif id == 38 then local list = result.repeated_fixed64 @@ -3015,12 +3081,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed64(payload, p2) - list[#list + 1] = val + _n_repeated_fixed64 = _n_repeated_fixed64 + 1; list[_n_repeated_fixed64] = val end else local val val, pos = wire.decode_fixed64(buf, pos) - list[#list + 1] = val + _n_repeated_fixed64 = _n_repeated_fixed64 + 1; list[_n_repeated_fixed64] = val end elseif id == 39 then local list = result.repeated_sfixed32 @@ -3032,12 +3098,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed32(payload, p2) - list[#list + 1] = val + _n_repeated_sfixed32 = _n_repeated_sfixed32 + 1; list[_n_repeated_sfixed32] = val end else local val val, pos = wire.decode_sfixed32(buf, pos) - list[#list + 1] = val + _n_repeated_sfixed32 = _n_repeated_sfixed32 + 1; list[_n_repeated_sfixed32] = val end elseif id == 40 then local list = result.repeated_sfixed64 @@ -3049,12 +3115,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed64(payload, p2) - list[#list + 1] = val + _n_repeated_sfixed64 = _n_repeated_sfixed64 + 1; list[_n_repeated_sfixed64] = val end else local val val, pos = wire.decode_sfixed64(buf, pos) - list[#list + 1] = val + _n_repeated_sfixed64 = _n_repeated_sfixed64 + 1; list[_n_repeated_sfixed64] = val end elseif id == 41 then local list = result.repeated_float @@ -3066,12 +3132,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_float(payload, p2) - list[#list + 1] = val + _n_repeated_float = _n_repeated_float + 1; list[_n_repeated_float] = val end else local val val, pos = wire.decode_float(buf, pos) - list[#list + 1] = val + _n_repeated_float = _n_repeated_float + 1; list[_n_repeated_float] = val end elseif id == 42 then local list = result.repeated_double @@ -3083,12 +3149,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_double(payload, p2) - list[#list + 1] = val + _n_repeated_double = _n_repeated_double + 1; list[_n_repeated_double] = val end else local val val, pos = wire.decode_double(buf, pos) - list[#list + 1] = val + _n_repeated_double = _n_repeated_double + 1; list[_n_repeated_double] = val end elseif id == 43 then local list = result.repeated_bool @@ -3100,37 +3166,37 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_bool(payload, p2) - list[#list + 1] = val + _n_repeated_bool = _n_repeated_bool + 1; list[_n_repeated_bool] = val end else local val val, pos = wire.decode_bool(buf, pos) - list[#list + 1] = val + _n_repeated_bool = _n_repeated_bool + 1; list[_n_repeated_bool] = val end elseif id == 44 then local list = result.repeated_string if list == nil then list = {}; result.repeated_string = list end local val val, pos = wire.decode_string(buf, pos) - list[#list + 1] = val + _n_repeated_string = _n_repeated_string + 1; list[_n_repeated_string] = val elseif id == 45 then local list = result.repeated_bytes if list == nil then list = {}; result.repeated_bytes = list end local val val, pos = wire.decode_bytes(buf, pos) - list[#list + 1] = val + _n_repeated_bytes = _n_repeated_bytes + 1; list[_n_repeated_bytes] = val elseif id == 48 then local list = result.repeated_nested_message if list == nil then list = {}; result.repeated_nested_message = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = M.TestAllTypesProto3_NestedMessage_decode(payload) + _n_repeated_nested_message = _n_repeated_nested_message + 1; list[_n_repeated_nested_message] = M.TestAllTypesProto3_NestedMessage_decode(payload) elseif id == 49 then local list = result.repeated_foreign_message if list == nil then list = {}; result.repeated_foreign_message = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = M.ForeignMessage_decode(payload) + _n_repeated_foreign_message = _n_repeated_foreign_message + 1; list[_n_repeated_foreign_message] = M.ForeignMessage_decode(payload) elseif id == 51 then local list = result.repeated_nested_enum if list == nil then list = {}; result.repeated_nested_enum = list end @@ -3141,12 +3207,12 @@ local p2, lim = 1, #payload while p2 <= lim do local u u, p2 = wire.decode_varint(payload, p2) - list[#list + 1] = wire.varint_to_int32(u) + _n_repeated_nested_enum = _n_repeated_nested_enum + 1; list[_n_repeated_nested_enum] = wire.varint_to_int32(u) end else local u u, pos = wire.decode_varint(buf, pos) - list[#list + 1] = wire.varint_to_int32(u) + _n_repeated_nested_enum = _n_repeated_nested_enum + 1; list[_n_repeated_nested_enum] = wire.varint_to_int32(u) end elseif id == 52 then local list = result.repeated_foreign_enum @@ -3158,25 +3224,25 @@ local p2, lim = 1, #payload while p2 <= lim do local u u, p2 = wire.decode_varint(payload, p2) - list[#list + 1] = wire.varint_to_int32(u) + _n_repeated_foreign_enum = _n_repeated_foreign_enum + 1; list[_n_repeated_foreign_enum] = wire.varint_to_int32(u) end else local u u, pos = wire.decode_varint(buf, pos) - list[#list + 1] = wire.varint_to_int32(u) + _n_repeated_foreign_enum = _n_repeated_foreign_enum + 1; list[_n_repeated_foreign_enum] = wire.varint_to_int32(u) end elseif id == 54 then local list = result.repeated_string_piece if list == nil then list = {}; result.repeated_string_piece = list end local val val, pos = wire.decode_string(buf, pos) - list[#list + 1] = val + _n_repeated_string_piece = _n_repeated_string_piece + 1; list[_n_repeated_string_piece] = val elseif id == 55 then local list = result.repeated_cord if list == nil then list = {}; result.repeated_cord = list end local val val, pos = wire.decode_string(buf, pos) - list[#list + 1] = val + _n_repeated_cord = _n_repeated_cord + 1; list[_n_repeated_cord] = val elseif id == 75 then local list = result.packed_int32 if list == nil then list = {}; result.packed_int32 = list end @@ -3187,12 +3253,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_packed_int32 = _n_packed_int32 + 1; list[_n_packed_int32] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_packed_int32 = _n_packed_int32 + 1; list[_n_packed_int32] = val end elseif id == 76 then local list = result.packed_int64 @@ -3204,12 +3270,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int64(payload, p2) - list[#list + 1] = val + _n_packed_int64 = _n_packed_int64 + 1; list[_n_packed_int64] = val end else local val val, pos = wire.decode_int64(buf, pos) - list[#list + 1] = val + _n_packed_int64 = _n_packed_int64 + 1; list[_n_packed_int64] = val end elseif id == 77 then local list = result.packed_uint32 @@ -3221,12 +3287,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint32(payload, p2) - list[#list + 1] = val + _n_packed_uint32 = _n_packed_uint32 + 1; list[_n_packed_uint32] = val end else local val val, pos = wire.decode_uint32(buf, pos) - list[#list + 1] = val + _n_packed_uint32 = _n_packed_uint32 + 1; list[_n_packed_uint32] = val end elseif id == 78 then local list = result.packed_uint64 @@ -3238,12 +3304,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint64(payload, p2) - list[#list + 1] = val + _n_packed_uint64 = _n_packed_uint64 + 1; list[_n_packed_uint64] = val end else local val val, pos = wire.decode_uint64(buf, pos) - list[#list + 1] = val + _n_packed_uint64 = _n_packed_uint64 + 1; list[_n_packed_uint64] = val end elseif id == 79 then local list = result.packed_sint32 @@ -3255,12 +3321,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint32(payload, p2) - list[#list + 1] = val + _n_packed_sint32 = _n_packed_sint32 + 1; list[_n_packed_sint32] = val end else local val val, pos = wire.decode_sint32(buf, pos) - list[#list + 1] = val + _n_packed_sint32 = _n_packed_sint32 + 1; list[_n_packed_sint32] = val end elseif id == 80 then local list = result.packed_sint64 @@ -3272,12 +3338,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint64(payload, p2) - list[#list + 1] = val + _n_packed_sint64 = _n_packed_sint64 + 1; list[_n_packed_sint64] = val end else local val val, pos = wire.decode_sint64(buf, pos) - list[#list + 1] = val + _n_packed_sint64 = _n_packed_sint64 + 1; list[_n_packed_sint64] = val end elseif id == 81 then local list = result.packed_fixed32 @@ -3289,12 +3355,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed32(payload, p2) - list[#list + 1] = val + _n_packed_fixed32 = _n_packed_fixed32 + 1; list[_n_packed_fixed32] = val end else local val val, pos = wire.decode_fixed32(buf, pos) - list[#list + 1] = val + _n_packed_fixed32 = _n_packed_fixed32 + 1; list[_n_packed_fixed32] = val end elseif id == 82 then local list = result.packed_fixed64 @@ -3306,12 +3372,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed64(payload, p2) - list[#list + 1] = val + _n_packed_fixed64 = _n_packed_fixed64 + 1; list[_n_packed_fixed64] = val end else local val val, pos = wire.decode_fixed64(buf, pos) - list[#list + 1] = val + _n_packed_fixed64 = _n_packed_fixed64 + 1; list[_n_packed_fixed64] = val end elseif id == 83 then local list = result.packed_sfixed32 @@ -3323,12 +3389,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed32(payload, p2) - list[#list + 1] = val + _n_packed_sfixed32 = _n_packed_sfixed32 + 1; list[_n_packed_sfixed32] = val end else local val val, pos = wire.decode_sfixed32(buf, pos) - list[#list + 1] = val + _n_packed_sfixed32 = _n_packed_sfixed32 + 1; list[_n_packed_sfixed32] = val end elseif id == 84 then local list = result.packed_sfixed64 @@ -3340,12 +3406,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed64(payload, p2) - list[#list + 1] = val + _n_packed_sfixed64 = _n_packed_sfixed64 + 1; list[_n_packed_sfixed64] = val end else local val val, pos = wire.decode_sfixed64(buf, pos) - list[#list + 1] = val + _n_packed_sfixed64 = _n_packed_sfixed64 + 1; list[_n_packed_sfixed64] = val end elseif id == 85 then local list = result.packed_float @@ -3357,12 +3423,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_float(payload, p2) - list[#list + 1] = val + _n_packed_float = _n_packed_float + 1; list[_n_packed_float] = val end else local val val, pos = wire.decode_float(buf, pos) - list[#list + 1] = val + _n_packed_float = _n_packed_float + 1; list[_n_packed_float] = val end elseif id == 86 then local list = result.packed_double @@ -3374,12 +3440,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_double(payload, p2) - list[#list + 1] = val + _n_packed_double = _n_packed_double + 1; list[_n_packed_double] = val end else local val val, pos = wire.decode_double(buf, pos) - list[#list + 1] = val + _n_packed_double = _n_packed_double + 1; list[_n_packed_double] = val end elseif id == 87 then local list = result.packed_bool @@ -3391,12 +3457,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_bool(payload, p2) - list[#list + 1] = val + _n_packed_bool = _n_packed_bool + 1; list[_n_packed_bool] = val end else local val val, pos = wire.decode_bool(buf, pos) - list[#list + 1] = val + _n_packed_bool = _n_packed_bool + 1; list[_n_packed_bool] = val end elseif id == 88 then local list = result.packed_nested_enum @@ -3408,12 +3474,12 @@ local p2, lim = 1, #payload while p2 <= lim do local u u, p2 = wire.decode_varint(payload, p2) - list[#list + 1] = wire.varint_to_int32(u) + _n_packed_nested_enum = _n_packed_nested_enum + 1; list[_n_packed_nested_enum] = wire.varint_to_int32(u) end else local u u, pos = wire.decode_varint(buf, pos) - list[#list + 1] = wire.varint_to_int32(u) + _n_packed_nested_enum = _n_packed_nested_enum + 1; list[_n_packed_nested_enum] = wire.varint_to_int32(u) end elseif id == 89 then local list = result.unpacked_int32 @@ -3425,12 +3491,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int32(payload, p2) - list[#list + 1] = val + _n_unpacked_int32 = _n_unpacked_int32 + 1; list[_n_unpacked_int32] = val end else local val val, pos = wire.decode_int32(buf, pos) - list[#list + 1] = val + _n_unpacked_int32 = _n_unpacked_int32 + 1; list[_n_unpacked_int32] = val end elseif id == 90 then local list = result.unpacked_int64 @@ -3442,12 +3508,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_int64(payload, p2) - list[#list + 1] = val + _n_unpacked_int64 = _n_unpacked_int64 + 1; list[_n_unpacked_int64] = val end else local val val, pos = wire.decode_int64(buf, pos) - list[#list + 1] = val + _n_unpacked_int64 = _n_unpacked_int64 + 1; list[_n_unpacked_int64] = val end elseif id == 91 then local list = result.unpacked_uint32 @@ -3459,12 +3525,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint32(payload, p2) - list[#list + 1] = val + _n_unpacked_uint32 = _n_unpacked_uint32 + 1; list[_n_unpacked_uint32] = val end else local val val, pos = wire.decode_uint32(buf, pos) - list[#list + 1] = val + _n_unpacked_uint32 = _n_unpacked_uint32 + 1; list[_n_unpacked_uint32] = val end elseif id == 92 then local list = result.unpacked_uint64 @@ -3476,12 +3542,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_uint64(payload, p2) - list[#list + 1] = val + _n_unpacked_uint64 = _n_unpacked_uint64 + 1; list[_n_unpacked_uint64] = val end else local val val, pos = wire.decode_uint64(buf, pos) - list[#list + 1] = val + _n_unpacked_uint64 = _n_unpacked_uint64 + 1; list[_n_unpacked_uint64] = val end elseif id == 93 then local list = result.unpacked_sint32 @@ -3493,12 +3559,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint32(payload, p2) - list[#list + 1] = val + _n_unpacked_sint32 = _n_unpacked_sint32 + 1; list[_n_unpacked_sint32] = val end else local val val, pos = wire.decode_sint32(buf, pos) - list[#list + 1] = val + _n_unpacked_sint32 = _n_unpacked_sint32 + 1; list[_n_unpacked_sint32] = val end elseif id == 94 then local list = result.unpacked_sint64 @@ -3510,12 +3576,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sint64(payload, p2) - list[#list + 1] = val + _n_unpacked_sint64 = _n_unpacked_sint64 + 1; list[_n_unpacked_sint64] = val end else local val val, pos = wire.decode_sint64(buf, pos) - list[#list + 1] = val + _n_unpacked_sint64 = _n_unpacked_sint64 + 1; list[_n_unpacked_sint64] = val end elseif id == 95 then local list = result.unpacked_fixed32 @@ -3527,12 +3593,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed32(payload, p2) - list[#list + 1] = val + _n_unpacked_fixed32 = _n_unpacked_fixed32 + 1; list[_n_unpacked_fixed32] = val end else local val val, pos = wire.decode_fixed32(buf, pos) - list[#list + 1] = val + _n_unpacked_fixed32 = _n_unpacked_fixed32 + 1; list[_n_unpacked_fixed32] = val end elseif id == 96 then local list = result.unpacked_fixed64 @@ -3544,12 +3610,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_fixed64(payload, p2) - list[#list + 1] = val + _n_unpacked_fixed64 = _n_unpacked_fixed64 + 1; list[_n_unpacked_fixed64] = val end else local val val, pos = wire.decode_fixed64(buf, pos) - list[#list + 1] = val + _n_unpacked_fixed64 = _n_unpacked_fixed64 + 1; list[_n_unpacked_fixed64] = val end elseif id == 97 then local list = result.unpacked_sfixed32 @@ -3561,12 +3627,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed32(payload, p2) - list[#list + 1] = val + _n_unpacked_sfixed32 = _n_unpacked_sfixed32 + 1; list[_n_unpacked_sfixed32] = val end else local val val, pos = wire.decode_sfixed32(buf, pos) - list[#list + 1] = val + _n_unpacked_sfixed32 = _n_unpacked_sfixed32 + 1; list[_n_unpacked_sfixed32] = val end elseif id == 98 then local list = result.unpacked_sfixed64 @@ -3578,12 +3644,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_sfixed64(payload, p2) - list[#list + 1] = val + _n_unpacked_sfixed64 = _n_unpacked_sfixed64 + 1; list[_n_unpacked_sfixed64] = val end else local val val, pos = wire.decode_sfixed64(buf, pos) - list[#list + 1] = val + _n_unpacked_sfixed64 = _n_unpacked_sfixed64 + 1; list[_n_unpacked_sfixed64] = val end elseif id == 99 then local list = result.unpacked_float @@ -3595,12 +3661,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_float(payload, p2) - list[#list + 1] = val + _n_unpacked_float = _n_unpacked_float + 1; list[_n_unpacked_float] = val end else local val val, pos = wire.decode_float(buf, pos) - list[#list + 1] = val + _n_unpacked_float = _n_unpacked_float + 1; list[_n_unpacked_float] = val end elseif id == 100 then local list = result.unpacked_double @@ -3612,12 +3678,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_double(payload, p2) - list[#list + 1] = val + _n_unpacked_double = _n_unpacked_double + 1; list[_n_unpacked_double] = val end else local val val, pos = wire.decode_double(buf, pos) - list[#list + 1] = val + _n_unpacked_double = _n_unpacked_double + 1; list[_n_unpacked_double] = val end elseif id == 101 then local list = result.unpacked_bool @@ -3629,12 +3695,12 @@ local p2, lim = 1, #payload while p2 <= lim do local val val, p2 = wire.decode_bool(payload, p2) - list[#list + 1] = val + _n_unpacked_bool = _n_unpacked_bool + 1; list[_n_unpacked_bool] = val end else local val val, pos = wire.decode_bool(buf, pos) - list[#list + 1] = val + _n_unpacked_bool = _n_unpacked_bool + 1; list[_n_unpacked_bool] = val end elseif id == 102 then local list = result.unpacked_nested_enum @@ -3646,12 +3712,12 @@ local p2, lim = 1, #payload while p2 <= lim do local u u, p2 = wire.decode_varint(payload, p2) - list[#list + 1] = wire.varint_to_int32(u) + _n_unpacked_nested_enum = _n_unpacked_nested_enum + 1; list[_n_unpacked_nested_enum] = wire.varint_to_int32(u) end else local u u, pos = wire.decode_varint(buf, pos) - list[#list + 1] = wire.varint_to_int32(u) + _n_unpacked_nested_enum = _n_unpacked_nested_enum + 1; list[_n_unpacked_nested_enum] = wire.varint_to_int32(u) end elseif id == 56 then local map = result.map_int32_int32 @@ -4213,55 +4279,55 @@ local list = result.repeated_bool_wrapper if list == nil then list = {}; result.repeated_bool_wrapper = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.BoolValue_decode(payload) + _n_repeated_bool_wrapper = _n_repeated_bool_wrapper + 1; list[_n_repeated_bool_wrapper] = pb.wkt.BoolValue_decode(payload) elseif id == 212 then local list = result.repeated_int32_wrapper if list == nil then list = {}; result.repeated_int32_wrapper = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.Int32Value_decode(payload) + _n_repeated_int32_wrapper = _n_repeated_int32_wrapper + 1; list[_n_repeated_int32_wrapper] = pb.wkt.Int32Value_decode(payload) elseif id == 213 then local list = result.repeated_int64_wrapper if list == nil then list = {}; result.repeated_int64_wrapper = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.Int64Value_decode(payload) + _n_repeated_int64_wrapper = _n_repeated_int64_wrapper + 1; list[_n_repeated_int64_wrapper] = pb.wkt.Int64Value_decode(payload) elseif id == 214 then local list = result.repeated_uint32_wrapper if list == nil then list = {}; result.repeated_uint32_wrapper = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.UInt32Value_decode(payload) + _n_repeated_uint32_wrapper = _n_repeated_uint32_wrapper + 1; list[_n_repeated_uint32_wrapper] = pb.wkt.UInt32Value_decode(payload) elseif id == 215 then local list = result.repeated_uint64_wrapper if list == nil then list = {}; result.repeated_uint64_wrapper = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.UInt64Value_decode(payload) + _n_repeated_uint64_wrapper = _n_repeated_uint64_wrapper + 1; list[_n_repeated_uint64_wrapper] = pb.wkt.UInt64Value_decode(payload) elseif id == 216 then local list = result.repeated_float_wrapper if list == nil then list = {}; result.repeated_float_wrapper = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.FloatValue_decode(payload) + _n_repeated_float_wrapper = _n_repeated_float_wrapper + 1; list[_n_repeated_float_wrapper] = pb.wkt.FloatValue_decode(payload) elseif id == 217 then local list = result.repeated_double_wrapper if list == nil then list = {}; result.repeated_double_wrapper = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.DoubleValue_decode(payload) + _n_repeated_double_wrapper = _n_repeated_double_wrapper + 1; list[_n_repeated_double_wrapper] = pb.wkt.DoubleValue_decode(payload) elseif id == 218 then local list = result.repeated_string_wrapper if list == nil then list = {}; result.repeated_string_wrapper = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.StringValue_decode(payload) + _n_repeated_string_wrapper = _n_repeated_string_wrapper + 1; list[_n_repeated_string_wrapper] = pb.wkt.StringValue_decode(payload) elseif id == 219 then local list = result.repeated_bytes_wrapper if list == nil then list = {}; result.repeated_bytes_wrapper = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.BytesValue_decode(payload) + _n_repeated_bytes_wrapper = _n_repeated_bytes_wrapper + 1; list[_n_repeated_bytes_wrapper] = pb.wkt.BytesValue_decode(payload) elseif id == 301 then local payload payload, pos = wire.decode_len(buf, pos) @@ -4299,49 +4365,49 @@ local list = result.repeated_duration if list == nil then list = {}; result.repeated_duration = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.Duration_decode(payload) + _n_repeated_duration = _n_repeated_duration + 1; list[_n_repeated_duration] = pb.wkt.Duration_decode(payload) elseif id == 312 then local list = result.repeated_timestamp if list == nil then list = {}; result.repeated_timestamp = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.Timestamp_decode(payload) + _n_repeated_timestamp = _n_repeated_timestamp + 1; list[_n_repeated_timestamp] = pb.wkt.Timestamp_decode(payload) elseif id == 313 then local list = result.repeated_fieldmask if list == nil then list = {}; result.repeated_fieldmask = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.FieldMask_decode(payload) + _n_repeated_fieldmask = _n_repeated_fieldmask + 1; list[_n_repeated_fieldmask] = pb.wkt.FieldMask_decode(payload) elseif id == 324 then local list = result.repeated_struct if list == nil then list = {}; result.repeated_struct = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.Struct_decode(payload) + _n_repeated_struct = _n_repeated_struct + 1; list[_n_repeated_struct] = pb.wkt.Struct_decode(payload) elseif id == 315 then local list = result.repeated_any if list == nil then list = {}; result.repeated_any = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.Any_decode(payload) + _n_repeated_any = _n_repeated_any + 1; list[_n_repeated_any] = pb.wkt.Any_decode(payload) elseif id == 316 then local list = result.repeated_value if list == nil then list = {}; result.repeated_value = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.Value_decode(payload) + _n_repeated_value = _n_repeated_value + 1; list[_n_repeated_value] = pb.wkt.Value_decode(payload) elseif id == 317 then local list = result.repeated_list_value if list == nil then list = {}; result.repeated_list_value = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.ListValue_decode(payload) + _n_repeated_list_value = _n_repeated_list_value + 1; list[_n_repeated_list_value] = pb.wkt.ListValue_decode(payload) elseif id == 318 then local list = result.repeated_empty if list == nil then list = {}; result.repeated_empty = list end local payload payload, pos = wire.decode_len(buf, pos) - list[#list + 1] = pb.wkt.Empty_decode(payload) + _n_repeated_empty = _n_repeated_empty + 1; list[_n_repeated_empty] = pb.wkt.Empty_decode(payload) elseif id == 401 then local val val, pos = wire.decode_int32(buf, pos) diff --git a/examples/expected/full/quickstart/quickstart_pb.lua b/examples/expected/full/quickstart/quickstart_pb.lua index 708fcccce436a51eec1db2d1517b7357c0a9cb97..fd14ad0d420fc9e5a00b21ae0e509082cb514959 100644 --- a/examples/expected/full/quickstart/quickstart_pb.lua +++ b/examples/expected/full/quickstart/quickstart_pb.lua @@ -137,6 +137,7 @@ end local result = {} local pos, len = 1, #buf local _uf + local _n_emails = 0 while pos <= len do local _tag_start = pos local id, wt @@ -167,7 +168,7 @@ local list = result.emails if list == nil then list = {}; result.emails = list end local val val, pos = wire.decode_string(buf, pos) - list[#list + 1] = val + _n_emails = _n_emails + 1; list[_n_emails] = val else local _ebid = M.User_descriptor.extensions_by_id local _ext = _ebid and _ebid[id] or nil