[flang] Clean up: convert CharPointerWithLength into a proper class.

Original-commit: flang-compiler/f18@514823234fefd422dce2c9f7407c208982e459de
diff --git a/flang/preprocessor.h b/flang/preprocessor.h
index eda9839..fd20d85 100644
--- a/flang/preprocessor.h
+++ b/flang/preprocessor.h
@@ -24,23 +24,26 @@
 
 // Just a const char pointer with an associated length; does not own the
 // referenced data.  Used to describe buffered tokens and hash table keys.
-struct CharPointerWithLength {
+class CharPointerWithLength {
+ public:
   CharPointerWithLength() {}
-  CharPointerWithLength(const char *x, size_t n) : data{x}, bytes{n} {}
+  CharPointerWithLength(const char *x, size_t n) : data_{x}, bytes_{n} {}
   CharPointerWithLength(const CharPointerWithLength &that)
-    : data{that.data}, bytes{that.bytes} {}
+    : data_{that.data_}, bytes_{that.bytes_} {}
   CharPointerWithLength &operator=(const CharPointerWithLength &that) {
-    data = that.data;
-    bytes = that.bytes;
+    data_ = that.data_;
+    bytes_ = that.bytes_;
     return *this;
   }
 
-  bool empty() const { return bytes == 0; }
-  size_t size() const { return bytes; }
-  const char &operator[](size_t j) const { return data[j]; }
+  bool empty() const { return bytes_ == 0; }
+  size_t size() const { return bytes_; }
+  const char *data() const { return data_; }
+  const char &operator[](size_t j) const { return data_[j]; }
 
-  const char *data{nullptr};
-  size_t bytes{0};
+ private:
+  const char *data_{nullptr};
+  size_t bytes_{0};
 };
 }  // namespace Fortran
 
@@ -48,7 +51,7 @@
 template<> struct std::hash<Fortran::CharPointerWithLength> {
   size_t operator()(const Fortran::CharPointerWithLength &x) const {
     size_t hash{0};
-    const char *p{x.data}, *limit{p + x.bytes};
+    const char *p{x.data()}, *limit{p + x.size()};
     for (; p < limit; ++p) {
       hash = (hash * 31) ^ *p;
     }
@@ -59,10 +62,10 @@
 template<> struct std::equal_to<Fortran::CharPointerWithLength> {
   bool operator()(const Fortran::CharPointerWithLength &x,
                   const Fortran::CharPointerWithLength &y) const {
-    return x.bytes == y.bytes &&
-           std::memcmp(static_cast<const void *>(x.data),
-                       static_cast<const void *>(y.data),
-                       x.bytes) == 0;
+    return x.size() == y.size() &&
+           std::memcmp(static_cast<const void *>(x.data()),
+                       static_cast<const void *>(y.data()),
+                       x.size()) == 0;
   }
 };
 
@@ -134,7 +137,8 @@
   }
 
   void push_back(const CharPointerWithLength &t) {
-    for (size_t j{0}; j < t.bytes; ++j) {
+    size_t bytes{t.size()};
+    for (size_t j{0}; j < bytes; ++j) {
       AddChar(t[j]);
     }
     EndToken();