aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google/protobuf/compiler/js/js_generator.cc
diff options
context:
space:
mode:
authorGravatar Josh Haberman <jhaberman@gmail.com>2016-07-18 14:46:12 -0700
committerGravatar Josh Haberman <jhaberman@gmail.com>2016-07-18 14:46:12 -0700
commit923eae8b16e4f9e7d121bc7b3084f4e717e2f166 (patch)
treed2bd4f26e38ec137f4c71d3128f050531679803a /src/google/protobuf/compiler/js/js_generator.cc
parentb6a620da134b174a90a26550f91c75c8e324288a (diff)
JavaScript maps: move binary callbacks out of constructor.
This change will help us separate binary support into separate files, because we only refer to binary serialization functions in the actual binary serialization paths.
Diffstat (limited to 'src/google/protobuf/compiler/js/js_generator.cc')
-rwxr-xr-xsrc/google/protobuf/compiler/js/js_generator.cc52
1 files changed, 30 insertions, 22 deletions
diff --git a/src/google/protobuf/compiler/js/js_generator.cc b/src/google/protobuf/compiler/js/js_generator.cc
index 8a2633d7..e030066e 100755
--- a/src/google/protobuf/compiler/js/js_generator.cc
+++ b/src/google/protobuf/compiler/js/js_generator.cc
@@ -2253,25 +2253,6 @@ void Generator::GenerateClassField(const GeneratorOptions& options,
" null");
}
- if (options.binary) {
- printer->Print(",\n"
- " $keyWriterFn$,\n"
- " $keyReaderFn$,\n"
- " $valueWriterFn$,\n"
- " $valueReaderFn$",
- "keyWriterFn", JSBinaryWriterMethodName(options, key_field),
- "keyReaderFn", JSBinaryReaderMethodName(options, key_field),
- "valueWriterFn", JSBinaryWriterMethodName(options, value_field),
- "valueReaderFn", JSBinaryReaderMethodName(options, value_field));
-
- if (value_field->type() == FieldDescriptor::TYPE_MESSAGE) {
- printer->Print(",\n"
- " $messageType$.serializeBinaryToWriter,\n"
- " $messageType$.deserializeBinaryFromReader",
- "messageType", GetPath(options, value_field->message_type()));
- }
- }
-
printer->Print(
"));\n");
@@ -2620,10 +2601,25 @@ void Generator::GenerateClassDeserializeBinaryField(
"num", SimpleItoa(field->number()));
if (field->is_map()) {
+ const FieldDescriptor* key_field = MapFieldKey(field);
+ const FieldDescriptor* value_field = MapFieldValue(field);
printer->Print(
" var value = msg.get$name$();\n"
- " reader.readMessage(value, jspb.Map.deserializeBinary);\n",
+ " reader.readMessage(value, function(message, reader) {\n",
"name", JSGetterName(options, field));
+
+ printer->Print(" jspb.Map.deserializeBinary(message, reader, "
+ "$keyReaderFn$, $valueReaderFn$",
+ "keyReaderFn", JSBinaryReaderMethodName(options, key_field),
+ "valueReaderFn", JSBinaryReaderMethodName(options, value_field));
+
+ if (value_field->type() == FieldDescriptor::TYPE_MESSAGE) {
+ printer->Print(", $messageType$.deserializeBinaryFromReader",
+ "messageType", GetPath(options, value_field->message_type()));
+ }
+
+ printer->Print(");\n");
+ printer->Print(" });\n");
} else {
if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
printer->Print(
@@ -2782,9 +2778,21 @@ void Generator::GenerateClassSerializeBinaryField(
// Write the field on the wire.
if (field->is_map()) {
+ const FieldDescriptor* key_field = MapFieldKey(field);
+ const FieldDescriptor* value_field = MapFieldValue(field);
printer->Print(
- " f.serializeBinary($index$, writer);\n",
- "index", SimpleItoa(field->number()));
+ " f.serializeBinary($index$, writer, "
+ "$keyWriterFn$, $valueWriterFn$",
+ "index", SimpleItoa(field->number()),
+ "keyWriterFn", JSBinaryWriterMethodName(options, key_field),
+ "valueWriterFn", JSBinaryWriterMethodName(options, value_field));
+
+ if (value_field->type() == FieldDescriptor::TYPE_MESSAGE) {
+ printer->Print(", $messageType$.serializeBinaryToWriter",
+ "messageType", GetPath(options, value_field->message_type()));
+ }
+
+ printer->Print(");\n");
} else {
printer->Print(
" writer.write$method$(\n"