@@ -128,63 +128,133 @@ void _mergeFromCodedBufferReader(BuilderInfo meta, _FieldSet fs,
128
128
}
129
129
break ;
130
130
case PbFieldType ._REPEATED_BOOL :
131
- _readPackable (meta, fs, input, wireType, fi, input.readBool);
131
+ final list = fs._ensureRepeatedField (meta, fi);
132
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
133
+ _readPacked (input, () => list.add (input.readBool ()));
134
+ } else {
135
+ list.add (input.readBool ());
136
+ }
132
137
break ;
133
138
case PbFieldType ._REPEATED_BYTES :
134
- fs._ensureRepeatedField (meta, fi).add (input.readBytes ());
139
+ final list = fs._ensureRepeatedField (meta, fi);
140
+ list.add (input.readBytes ());
135
141
break ;
136
142
case PbFieldType ._REPEATED_STRING :
137
- fs._ensureRepeatedField (meta, fi).add (input.readString ());
143
+ final list = fs._ensureRepeatedField (meta, fi);
144
+ list.add (input.readString ());
138
145
break ;
139
146
case PbFieldType ._REPEATED_FLOAT :
140
- _readPackable (meta, fs, input, wireType, fi, input.readFloat);
147
+ final list = fs._ensureRepeatedField (meta, fi);
148
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
149
+ _readPacked (input, () => list.add (input.readFloat ()));
150
+ } else {
151
+ list.add (input.readFloat ());
152
+ }
141
153
break ;
142
154
case PbFieldType ._REPEATED_DOUBLE :
143
- _readPackable (meta, fs, input, wireType, fi, input.readDouble);
155
+ final list = fs._ensureRepeatedField (meta, fi);
156
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
157
+ _readPacked (input, () => list.add (input.readDouble ()));
158
+ } else {
159
+ list.add (input.readDouble ());
160
+ }
144
161
break ;
145
162
case PbFieldType ._REPEATED_ENUM :
163
+ final list = fs._ensureRepeatedField (meta, fi);
146
164
_readPackableToListEnum (
147
- meta, fs, input, wireType, fi , tagNumber, registry);
165
+ list, meta, fs, input, wireType, tagNumber, registry);
148
166
break ;
149
167
case PbFieldType ._REPEATED_GROUP :
150
168
final subMessage = meta._makeEmptyMessage (tagNumber, registry);
151
169
input.readGroup (tagNumber, subMessage, registry);
152
- fs._ensureRepeatedField (meta, fi).add (subMessage);
170
+ final list = fs._ensureRepeatedField (meta, fi);
171
+ list.add (subMessage);
153
172
break ;
154
173
case PbFieldType ._REPEATED_INT32 :
155
- _readPackable (meta, fs, input, wireType, fi, input.readInt32);
174
+ final list = fs._ensureRepeatedField (meta, fi);
175
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
176
+ _readPacked (input, () => list.add (input.readInt32 ()));
177
+ } else {
178
+ list.add (input.readInt32 ());
179
+ }
156
180
break ;
157
181
case PbFieldType ._REPEATED_INT64 :
158
- _readPackable (meta, fs, input, wireType, fi, input.readInt64);
182
+ final list = fs._ensureRepeatedField (meta, fi);
183
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
184
+ _readPacked (input, () => list.add (input.readInt64 ()));
185
+ } else {
186
+ list.add (input.readInt64 ());
187
+ }
159
188
break ;
160
189
case PbFieldType ._REPEATED_SINT32 :
161
- _readPackable (meta, fs, input, wireType, fi, input.readSint32);
190
+ final list = fs._ensureRepeatedField (meta, fi);
191
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
192
+ _readPacked (input, () => list.add (input.readSint32 ()));
193
+ } else {
194
+ list.add (input.readSint32 ());
195
+ }
162
196
break ;
163
197
case PbFieldType ._REPEATED_SINT64 :
164
- _readPackable (meta, fs, input, wireType, fi, input.readSint64);
198
+ final list = fs._ensureRepeatedField (meta, fi);
199
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
200
+ _readPacked (input, () => list.add (input.readSint64 ()));
201
+ } else {
202
+ list.add (input.readSint64 ());
203
+ }
165
204
break ;
166
205
case PbFieldType ._REPEATED_UINT32 :
167
- _readPackable (meta, fs, input, wireType, fi, input.readUint32);
206
+ final list = fs._ensureRepeatedField (meta, fi);
207
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
208
+ _readPacked (input, () => list.add (input.readUint32 ()));
209
+ } else {
210
+ list.add (input.readUint32 ());
211
+ }
168
212
break ;
169
213
case PbFieldType ._REPEATED_UINT64 :
170
- _readPackable (meta, fs, input, wireType, fi, input.readUint64);
214
+ final list = fs._ensureRepeatedField (meta, fi);
215
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
216
+ _readPacked (input, () => list.add (input.readUint64 ()));
217
+ } else {
218
+ list.add (input.readUint64 ());
219
+ }
171
220
break ;
172
221
case PbFieldType ._REPEATED_FIXED32 :
173
- _readPackable (meta, fs, input, wireType, fi, input.readFixed32);
222
+ final list = fs._ensureRepeatedField (meta, fi);
223
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
224
+ _readPacked (input, () => list.add (input.readFixed32 ()));
225
+ } else {
226
+ list.add (input.readFixed32 ());
227
+ }
174
228
break ;
175
229
case PbFieldType ._REPEATED_FIXED64 :
176
- _readPackable (meta, fs, input, wireType, fi, input.readFixed64);
230
+ final list = fs._ensureRepeatedField (meta, fi);
231
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
232
+ _readPacked (input, () => list.add (input.readFixed64 ()));
233
+ } else {
234
+ list.add (input.readFixed64 ());
235
+ }
177
236
break ;
178
237
case PbFieldType ._REPEATED_SFIXED32 :
179
- _readPackable (meta, fs, input, wireType, fi, input.readSfixed32);
238
+ final list = fs._ensureRepeatedField (meta, fi);
239
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
240
+ _readPacked (input, () => list.add (input.readSfixed32 ()));
241
+ } else {
242
+ list.add (input.readSfixed32 ());
243
+ }
180
244
break ;
181
245
case PbFieldType ._REPEATED_SFIXED64 :
182
- _readPackable (meta, fs, input, wireType, fi, input.readSfixed64);
246
+ final list = fs._ensureRepeatedField (meta, fi);
247
+ if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
248
+ _readPacked (input, () => list.add (input.readSfixed64 ()));
249
+ } else {
250
+ list.add (input.readSfixed64 ());
251
+ }
183
252
break ;
184
253
case PbFieldType ._REPEATED_MESSAGE :
185
254
final subMessage = meta._makeEmptyMessage (tagNumber, registry);
186
255
input.readMessage (subMessage, registry);
187
- fs._ensureRepeatedField (meta, fi).add (subMessage);
256
+ final list = fs._ensureRepeatedField (meta, fi);
257
+ list.add (subMessage);
188
258
break ;
189
259
case PbFieldType ._MAP :
190
260
final mapFieldInfo = fi as MapFieldInfo ;
@@ -199,52 +269,43 @@ void _mergeFromCodedBufferReader(BuilderInfo meta, _FieldSet fs,
199
269
}
200
270
}
201
271
202
- void _readPackable (BuilderInfo meta, _FieldSet fs, CodedBufferReader input,
203
- int wireType, FieldInfo fi, Function () readFunc) {
204
- void readToList (List list) => list.add (readFunc ());
205
- _readPackableToList (meta, fs, input, wireType, fi, readToList);
272
+ void _readPacked (CodedBufferReader input, void Function () readFunc) {
273
+ input._withLimit (input.readInt32 (), () {
274
+ while (! input.isAtEnd ()) {
275
+ readFunc ();
276
+ }
277
+ });
206
278
}
207
279
208
280
void _readPackableToListEnum (
281
+ List list,
209
282
BuilderInfo meta,
210
283
_FieldSet fs,
211
284
CodedBufferReader input,
212
285
int wireType,
213
- FieldInfo fi,
214
286
int tagNumber,
215
287
ExtensionRegistry registry) {
216
- void readToList (List list) {
217
- final rawValue = input.readEnum ();
218
- final value = meta._decodeEnum (tagNumber, registry, rawValue);
219
- if (value == null ) {
220
- final unknown = fs._ensureUnknownFields ();
221
- unknown.mergeVarintField (tagNumber, Int64 (rawValue));
222
- } else {
223
- list.add (value);
224
- }
225
- }
226
-
227
- _readPackableToList (meta, fs, input, wireType, fi, readToList);
228
- }
229
-
230
- void _readPackableToList (
231
- BuilderInfo meta,
232
- _FieldSet fs,
233
- CodedBufferReader input,
234
- int wireType,
235
- FieldInfo fi,
236
- Function (List ) readToList) {
237
- final list = fs._ensureRepeatedField (meta, fi);
238
-
239
288
if (wireType == WIRETYPE_LENGTH_DELIMITED ) {
240
289
// Packed.
241
290
input._withLimit (input.readInt32 (), () {
242
291
while (! input.isAtEnd ()) {
243
- readToList (list);
292
+ _readRepeatedEnum (list, meta, fs, input, tagNumber, registry );
244
293
}
245
294
});
246
295
} else {
247
296
// Not packed.
248
- readToList (list);
297
+ _readRepeatedEnum (list, meta, fs, input, tagNumber, registry);
298
+ }
299
+ }
300
+
301
+ void _readRepeatedEnum (List list, BuilderInfo meta, _FieldSet fs,
302
+ CodedBufferReader input, int tagNumber, ExtensionRegistry registry) {
303
+ final rawValue = input.readEnum ();
304
+ final value = meta._decodeEnum (tagNumber, registry, rawValue);
305
+ if (value == null ) {
306
+ final unknown = fs._ensureUnknownFields ();
307
+ unknown.mergeVarintField (tagNumber, Int64 (rawValue));
308
+ } else {
309
+ list.add (value);
249
310
}
250
311
}
0 commit comments