Merge pull request #5469 from haberman/objc

ObjC compiler changes to allow for easier import
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc b/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
index c25b0c9..3d0b0d2 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
@@ -48,9 +48,9 @@
 #include <google/protobuf/io/printer.h>
 #include <google/protobuf/io/zero_copy_stream_impl.h>
 #include <google/protobuf/stubs/io_win32.h>
+#include <google/protobuf/stubs/port.h>
 #include <google/protobuf/stubs/strutil.h>
 
-
 // NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some
 // error cases, so it seems to be ok to use as a back door for errors.
 
@@ -364,7 +364,7 @@
   }
 }
 
-void StringPieceTrimWhitespace(StringPiece* input) {
+void TrimWhitespace(StringPiece* input) {
   while (!input->empty() && ascii_isspace(*input->data())) {
     input->remove_prefix(1);
   }
@@ -659,7 +659,7 @@
   // Some compilers report reaching end of function even though all cases of
   // the enum are handed in the switch.
   GOOGLE_LOG(FATAL) << "Can't get here.";
-  return NULL;
+  return string();
 }
 
 ObjectiveCType GetObjectiveCType(FieldDescriptor::Type field_type) {
@@ -787,7 +787,7 @@
   // Some compilers report reaching end of function even though all cases of
   // the enum are handed in the switch.
   GOOGLE_LOG(FATAL) << "Can't get here.";
-  return NULL;
+  return string();
 }
 
 
@@ -859,7 +859,7 @@
   // Some compilers report reaching end of function even though all cases of
   // the enum are handed in the switch.
   GOOGLE_LOG(FATAL) << "Can't get here.";
-  return NULL;
+  return string();
 }
 
 bool HasNonZeroDefaultValue(const FieldDescriptor* field) {
@@ -1047,18 +1047,17 @@
     const StringPiece& line, string* out_error) {
   int offset = line.find('=');
   if (offset == StringPiece::npos) {
-    *out_error =
-        string("Expected prefixes file line without equal sign: '") +
-        line.ToString() + "'.";
+    *out_error = string("Expected prefixes file line without equal sign: '") +
+                 string(line) + "'.";
     return false;
   }
-  StringPiece package(line, 0, offset);
-  StringPiece prefix(line, offset + 1, line.length() - offset - 1);
-  StringPieceTrimWhitespace(&package);
-  StringPieceTrimWhitespace(&prefix);
+  StringPiece package = line.substr(0, offset);
+  StringPiece prefix = line.substr(offset + 1);
+  TrimWhitespace(&package);
+  TrimWhitespace(&prefix);
   // Don't really worry about error checking the package/prefix for
   // being valid.  Assume the file is validated when it is created/edited.
-  (*prefix_map_)[package.ToString()] = prefix.ToString();
+  (*prefix_map_)[string(package)] = string(prefix);
   return true;
 }
 
@@ -1474,7 +1473,7 @@
 
 bool Parser::ParseChunk(StringPiece chunk) {
   if (!leftover_.empty()) {
-    chunk.AppendToString(&leftover_);
+    leftover_ += string(chunk);
     p_ = StringPiece(leftover_);
   } else {
     p_ = chunk;
@@ -1483,7 +1482,7 @@
   if (p_.empty()) {
     leftover_.clear();
   } else {
-    leftover_ = p_.ToString();
+    leftover_ = string(p_);
   }
   return result;
 }
@@ -1506,7 +1505,7 @@
   while (ReadLine(&p_, &line)) {
     ++line_;
     RemoveComment(&line);
-    StringPieceTrimWhitespace(&line);
+    TrimWhitespace(&line);
     if (line.size() == 0) {
       continue;  // Blank line.
     }
@@ -1693,12 +1692,12 @@
   if (offset == StringPiece::npos) {
     *out_error =
         string("Framework/proto file mapping line without colon sign: '") +
-        line.ToString() + "'.";
+        string(line) + "'.";
     return false;
   }
-  StringPiece framework_name(line, 0, offset);
-  StringPiece proto_file_list(line, offset + 1, line.length() - offset - 1);
-  StringPieceTrimWhitespace(&framework_name);
+  StringPiece framework_name = line.substr(0, offset);
+  StringPiece proto_file_list = line.substr(offset + 1);
+  TrimWhitespace(&framework_name);
 
   int start = 0;
   while (start < proto_file_list.length()) {
@@ -1707,25 +1706,27 @@
       offset = proto_file_list.length();
     }
 
-    StringPiece proto_file(proto_file_list, start, offset - start);
-    StringPieceTrimWhitespace(&proto_file);
+    StringPiece proto_file = proto_file_list.substr(start, offset - start);
+    TrimWhitespace(&proto_file);
     if (proto_file.size() != 0) {
       std::map<string, string>::iterator existing_entry =
-          map_->find(proto_file.ToString());
+          map_->find(string(proto_file));
       if (existing_entry != map_->end()) {
-        std::cerr << "warning: duplicate proto file reference, replacing framework entry for '"
-             << proto_file.ToString() << "' with '" << framework_name.ToString()
-             << "' (was '" << existing_entry->second << "')." << std::endl;
+        std::cerr << "warning: duplicate proto file reference, replacing "
+                     "framework entry for '"
+                  << string(proto_file) << "' with '" << string(framework_name)
+                  << "' (was '" << existing_entry->second << "')." << std::endl;
         std::cerr.flush();
       }
 
       if (proto_file.find(' ') != StringPiece::npos) {
-        std::cerr << "note: framework mapping file had a proto file with a space in, hopefully that isn't a missing comma: '"
-             << proto_file.ToString() << "'" << std::endl;
+        std::cerr << "note: framework mapping file had a proto file with a "
+                     "space in, hopefully that isn't a missing comma: '"
+                  << string(proto_file) << "'" << std::endl;
         std::cerr.flush();
       }
 
-      (*map_)[proto_file.ToString()] = framework_name.ToString();
+      (*map_)[string(proto_file)] = string(framework_name);
     }
 
     start = offset + 1;
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_helpers.h b/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
index e2f7024..98ec7db 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
+++ b/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
@@ -62,7 +62,7 @@
 string PROTOC_EXPORT StripProto(const string& filename);
 
 // Remove white space from either end of a StringPiece.
-void PROTOC_EXPORT StringPieceTrimWhitespace(StringPiece* input);
+void PROTOC_EXPORT TrimWhitespace(StringPiece* input);
 
 // Returns true if the name requires a ns_returns_not_retained attribute applied
 // to it.