From e4b129f304a28db71a538af35afae0af91b02129 Mon Sep 17 00:00:00 2001 From: Nikolai Vavilov Date: Tue, 19 Jul 2016 10:34:58 +0300 Subject: restore old behavior for toObject --- src/google/protobuf/compiler/js/js_generator.cc | 28 ++++++++++++++++--------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'src/google/protobuf/compiler/js') diff --git a/src/google/protobuf/compiler/js/js_generator.cc b/src/google/protobuf/compiler/js/js_generator.cc index 53067739..58c77d00 100755 --- a/src/google/protobuf/compiler/js/js_generator.cc +++ b/src/google/protobuf/compiler/js/js_generator.cc @@ -1952,7 +1952,7 @@ void Generator::GenerateClassToObject(const GeneratorOptions& options, " * @return {!Object}\n" " */\n" "$classname$.toObject = function(includeInstance, msg) {\n" - " var f, obj = {};", + " var f, obj = {", "classname", GetPath(options, desc)); bool first = true; @@ -1963,16 +1963,20 @@ void Generator::GenerateClassToObject(const GeneratorOptions& options, } if (!first) { - printer->Print("\n "); + printer->Print(",\n "); } else { - printer->Print("\n\n "); + printer->Print("\n "); first = false; } GenerateClassFieldToObject(options, printer, field); } - printer->Print("\n\n"); + if (!first) { + printer->Print("\n };\n\n"); + } else { + printer->Print("\n\n };\n\n"); + } if (IsExtendable(desc)) { printer->Print( @@ -1999,12 +2003,7 @@ void Generator::GenerateClassToObject(const GeneratorOptions& options, void Generator::GenerateClassFieldToObject(const GeneratorOptions& options, io::Printer* printer, const FieldDescriptor* field) const { - if (HasFieldPresence(field)) { - printer->Print("if (msg.has$name$()) ", - "name", JSGetterName(options, field)); - } - - printer->Print("obj.$fieldname$ = ", + printer->Print("$fieldname$: ", "fieldname", JSObjectFieldName(options, field)); if (field->is_map()) { @@ -2034,12 +2033,21 @@ void Generator::GenerateClassFieldToObject(const GeneratorOptions& options, printer->Print("msg.get$getter$()", "getter", JSGetterName(options, field, BYTES_B64)); } else { + if (field->has_default_value()) { + printer->Print("!msg.has$name$() ? $defaultValue$ : ", + "name", JSGetterName(options, field), + "defaultValue", JSFieldDefault(field)); + } if (field->cpp_type() == FieldDescriptor::CPPTYPE_FLOAT || field->cpp_type() == FieldDescriptor::CPPTYPE_DOUBLE) { if (field->is_repeated()) { printer->Print("jspb.Message.getRepeatedFloatingPointField(" "msg, $index$)", "index", JSFieldIndex(field)); + } else if (field->is_optional() && !field->has_default_value()) { + printer->Print("jspb.Message.getOptionalFloatingPointField(" + "msg, $index$)", + "index", JSFieldIndex(field)); } else { // Convert "NaN" to NaN. printer->Print("+jspb.Message.getField(msg, $index$)", -- cgit v1.2.3