aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google/protobuf/compiler/js/js_generator.cc
diff options
context:
space:
mode:
authorGravatar Nikolai Vavilov <vvnicholas@gmail.com>2016-07-19 10:34:58 +0300
committerGravatar Nikolai Vavilov <vvnicholas@gmail.com>2016-07-19 10:34:58 +0300
commite4b129f304a28db71a538af35afae0af91b02129 (patch)
tree6e8b2cfcf82f18a70bc874c327fc33b711c84680 /src/google/protobuf/compiler/js/js_generator.cc
parentdb1b2a06e3999ffd6e52719ec0216849aa515ba1 (diff)
restore old behavior for toObject
Diffstat (limited to 'src/google/protobuf/compiler/js/js_generator.cc')
-rwxr-xr-xsrc/google/protobuf/compiler/js/js_generator.cc28
1 files changed, 18 insertions, 10 deletions
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$)",