15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Protocol Buffers - Google's data interchange format 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2008 Google Inc. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://code.google.com/p/protobuf/ 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Redistribution and use in source and binary forms, with or without 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// modification, are permitted provided that the following conditions are 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// met: 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * Redistributions of source code must retain the above copyright 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notice, this list of conditions and the following disclaimer. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * Redistributions in binary form must reproduce the above 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// copyright notice, this list of conditions and the following disclaimer 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in the documentation and/or other materials provided with the 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// distribution. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * Neither the name of Google Inc. nor the names of its 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// contributors may be used to endorse or promote products derived from 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// this software without specific prior written permission. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Author: kenton@google.com (Kenton Varda) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Based on original Protocol Buffers design by 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sanjay Ghemawat, Jeff Dean, and others. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <google/protobuf/compiler/cpp/cpp_extension.h> 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <google/protobuf/compiler/cpp/cpp_helpers.h> 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <google/protobuf/stubs/strutil.h> 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <google/protobuf/io/printer.h> 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <google/protobuf/descriptor.pb.h> 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace google { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace protobuf { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace compiler { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace cpp { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the fully-qualified class name of the message that this field 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extends. This function is used in the Google-internal code to handle some 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// legacy cases. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string ExtendeeClassName(const FieldDescriptor* descriptor) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Descriptor* extendee = descriptor->containing_type(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ClassName(extendee, true); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // anonymous namespace 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionGenerator::ExtensionGenerator(const FieldDescriptor* descriptor, 60ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const Options& options) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : descriptor_(descriptor), 62ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch options_(options) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct type_traits_. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (descriptor_->is_repeated()) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_ = "Repeated"; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (descriptor_->cpp_type()) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case FieldDescriptor::CPPTYPE_ENUM: 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append("EnumTypeTraits< "); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append(ClassName(descriptor_->enum_type(), true)); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append(", "); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append(ClassName(descriptor_->enum_type(), true)); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append("_IsValid>"); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case FieldDescriptor::CPPTYPE_STRING: 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append("StringTypeTraits"); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case FieldDescriptor::CPPTYPE_MESSAGE: 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append("MessageTypeTraits< "); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append(ClassName(descriptor_->message_type(), true)); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append(" >"); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append("PrimitiveTypeTraits< "); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append(PrimitiveTypeName(descriptor_->cpp_type())); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type_traits_.append(" >"); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionGenerator::~ExtensionGenerator() {} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionGenerator::GenerateDeclaration(io::Printer* printer) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map<string, string> vars; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["extendee" ] = ExtendeeClassName(descriptor_); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["number" ] = SimpleItoa(descriptor_->number()); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["type_traits" ] = type_traits_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["name" ] = descriptor_->name(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["field_type" ] = SimpleItoa(static_cast<int>(descriptor_->type())); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["packed" ] = descriptor_->options().packed() ? "true" : "false"; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["constant_name"] = FieldConstantName(descriptor_); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this is a class member, it needs to be declared "static". Otherwise, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it needs to be "extern". In the latter case, it also needs the DLL 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // export/import specifier. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (descriptor_->extension_scope() == NULL) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["qualifier"] = "extern"; 109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (!options_.dllexport_decl.empty()) { 110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch vars["qualifier"] = options_.dllexport_decl + " " + vars["qualifier"]; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["qualifier"] = "static"; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(vars, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "static const int $constant_name$ = $number$;\n" 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "$qualifier$ ::google::protobuf::internal::ExtensionIdentifier< $extendee$,\n" 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ::google::protobuf::internal::$type_traits$, $field_type$, $packed$ >\n" 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $name$;\n" 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionGenerator::GenerateDefinition(io::Printer* printer) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this is a class member, it needs to be declared in its class scope. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string scope = (descriptor_->extension_scope() == NULL) ? "" : 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClassName(descriptor_->extension_scope(), false) + "::"; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string name = scope + descriptor_->name(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map<string, string> vars; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["extendee" ] = ExtendeeClassName(descriptor_); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["type_traits" ] = type_traits_; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["name" ] = name; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["constant_name"] = FieldConstantName(descriptor_); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["default" ] = DefaultValue(descriptor_); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["field_type" ] = SimpleItoa(static_cast<int>(descriptor_->type())); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["packed" ] = descriptor_->options().packed() ? "true" : "false"; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["scope" ] = scope; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (descriptor_->cpp_type() == FieldDescriptor::CPPTYPE_STRING) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need to declare a global string which will contain the default value. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We cannot declare it at class scope because that would require exposing 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it in the header which would be annoying for other reasons. So we 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // replace :: with _ in the name and declare it as a global. 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string global_name = StringReplace(name, "::", "_", true); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["global_name"] = global_name; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(vars, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "const ::std::string $global_name$_default($default$);\n"); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the default to refer to the string global. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["default"] = global_name + "_default"; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Likewise, class members need to declare the field constant variable. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (descriptor_->extension_scope() != NULL) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(vars, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "#ifndef _MSC_VER\n" 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "const int $scope$$constant_name$;\n" 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "#endif\n"); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(vars, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "::google::protobuf::internal::ExtensionIdentifier< $extendee$,\n" 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ::google::protobuf::internal::$type_traits$, $field_type$, $packed$ >\n" 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $name$($constant_name$, $default$);\n"); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionGenerator::GenerateRegistration(io::Printer* printer) { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map<string, string> vars; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["extendee" ] = ExtendeeClassName(descriptor_); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["number" ] = SimpleItoa(descriptor_->number()); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["field_type" ] = SimpleItoa(static_cast<int>(descriptor_->type())); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["is_repeated"] = descriptor_->is_repeated() ? "true" : "false"; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) vars["is_packed" ] = (descriptor_->is_repeated() && 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) descriptor_->options().packed()) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ? "true" : "false"; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (descriptor_->cpp_type()) { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case FieldDescriptor::CPPTYPE_ENUM: 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(vars, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "::google::protobuf::internal::ExtensionSet::RegisterEnumExtension(\n" 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " &$extendee$::default_instance(),\n" 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $number$, $field_type$, $is_repeated$, $is_packed$,\n"); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print( 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " &$type$_IsValid);\n", 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "type", ClassName(descriptor_->enum_type(), true)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case FieldDescriptor::CPPTYPE_MESSAGE: 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(vars, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "::google::protobuf::internal::ExtensionSet::RegisterMessageExtension(\n" 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " &$extendee$::default_instance(),\n" 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $number$, $field_type$, $is_repeated$, $is_packed$,\n"); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print( 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " &$type$::default_instance());\n", 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "type", ClassName(descriptor_->message_type(), true)); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printer->Print(vars, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "::google::protobuf::internal::ExtensionSet::RegisterExtension(\n" 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " &$extendee$::default_instance(),\n" 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " $number$, $field_type$, $is_repeated$, $is_packed$);\n"); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace cpp 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace compiler 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace protobuf 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace google 211