@@ -3163,6 +3163,16 @@ void Generator::GenerateClassDeserializeBinaryField(
31633163 (field->type () == FieldDescriptor::TYPE_GROUP)
31643164 ? (StrCat (field->number ()) + " , " )
31653165 : " " );
3166+ } else if (field->is_packable ()) {
3167+ printer->Print (
3168+ " var values = /** @type {$fieldtype$} */ "
3169+ " (reader.isDelimited() "
3170+ " ? reader.readPacked$reader$() : [reader.read$reader$()]);\n " ,
3171+ " fieldtype" ,
3172+ JSFieldTypeAnnotation (options, field, false , true ,
3173+ /* singular_if_not_packed */ false , BYTES_U8),
3174+ " reader" ,
3175+ JSBinaryReaderMethodType (field));
31663176 } else {
31673177 printer->Print (
31683178 " var value = /** @type {$fieldtype$} */ "
@@ -3174,7 +3184,13 @@ void Generator::GenerateClassDeserializeBinaryField(
31743184 JSBinaryReadWriteMethodName (field, /* is_writer = */ false ));
31753185 }
31763186
3177- if (field->is_repeated () && !field->is_packed ()) {
3187+ if (field->is_packable ()) {
3188+ printer->Print (
3189+ " for (var i = 0; i < values.length; i++) {\n "
3190+ " msg.add$name$(values[i]);\n "
3191+ " }\n " , " name" ,
3192+ JSGetterName (options, field, BYTES_DEFAULT, /* drop_list = */ true ));
3193+ } else if (field->is_repeated ()) {
31783194 printer->Print (
31793195 " msg.add$name$(value);\n " , " name" ,
31803196 JSGetterName (options, field, BYTES_DEFAULT, /* drop_list = */ true ));
0 commit comments