Nest CXFA_FMToken in CXFA_FMLexer

Get closer to the one class per file rule.

-- Make it a struct while we're at it.

Change-Id: I95ce7b5f46ab2bfe7408d2e9ca3caabfa3ab2d72
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/79951
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/fm2js/cxfa_fmlexer.cpp b/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
index 159910f..b6eb7ea 100644
--- a/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
@@ -115,16 +115,16 @@
 
 }  // namespace
 
-CXFA_FMToken::CXFA_FMToken(XFA_FM_TOKEN token) : m_type(token) {}
+CXFA_FMLexer::Token::Token(XFA_FM_TOKEN token) : m_type(token) {}
 
-CXFA_FMToken::CXFA_FMToken() : CXFA_FMToken(TOKreserver) {}
+CXFA_FMLexer::Token::Token() : Token(TOKreserver) {}
 
-CXFA_FMToken::CXFA_FMToken(const CXFA_FMToken&) = default;
+CXFA_FMLexer::Token::Token(const Token& that) = default;
 
-CXFA_FMToken::~CXFA_FMToken() = default;
+CXFA_FMLexer::Token::~Token() = default;
 
 #ifndef NDEBUG
-WideString CXFA_FMToken::ToDebugString() const {
+WideString CXFA_FMLexer::Token::ToDebugString() const {
   WideString str = WideString::FromASCII("type = ");
   str += WideString::FromASCII(tokenStrings[m_type]);
   str += WideString::FromASCII(", string = ");
@@ -138,14 +138,14 @@
 
 CXFA_FMLexer::~CXFA_FMLexer() = default;
 
-CXFA_FMToken CXFA_FMLexer::NextToken() {
+CXFA_FMLexer::Token CXFA_FMLexer::NextToken() {
   if (m_bLexerError)
-    return CXFA_FMToken();
+    return Token();
 
   while (!IsComplete() && m_spInput[m_nCursor]) {
     if (!IsFormCalcCharacter(m_spInput[m_nCursor])) {
       RaiseError();
-      return CXFA_FMToken();
+      return Token();
     }
 
     switch (m_spInput[m_nCursor]) {
@@ -174,90 +174,90 @@
       case '=':
         ++m_nCursor;
         if (m_nCursor >= m_spInput.size())
-          return CXFA_FMToken(TOKassign);
+          return Token(TOKassign);
 
         if (!IsFormCalcCharacter(m_spInput[m_nCursor])) {
           RaiseError();
-          return CXFA_FMToken();
+          return Token();
         }
         if (m_spInput[m_nCursor] == '=') {
           ++m_nCursor;
-          return CXFA_FMToken(TOKeq);
+          return Token(TOKeq);
         }
-        return CXFA_FMToken(TOKassign);
+        return Token(TOKassign);
       case '<':
         ++m_nCursor;
         if (m_nCursor >= m_spInput.size())
-          return CXFA_FMToken(TOKlt);
+          return Token(TOKlt);
 
         if (!IsFormCalcCharacter(m_spInput[m_nCursor])) {
           RaiseError();
-          return CXFA_FMToken();
+          return Token();
         }
         if (m_spInput[m_nCursor] == '=') {
           ++m_nCursor;
-          return CXFA_FMToken(TOKle);
+          return Token(TOKle);
         }
         if (m_spInput[m_nCursor] == '>') {
           ++m_nCursor;
-          return CXFA_FMToken(TOKne);
+          return Token(TOKne);
         }
-        return CXFA_FMToken(TOKlt);
+        return Token(TOKlt);
       case '>':
         ++m_nCursor;
         if (m_nCursor >= m_spInput.size())
-          return CXFA_FMToken(TOKgt);
+          return Token(TOKgt);
 
         if (!IsFormCalcCharacter(m_spInput[m_nCursor])) {
           RaiseError();
-          return CXFA_FMToken();
+          return Token();
         }
         if (m_spInput[m_nCursor] == '=') {
           ++m_nCursor;
-          return CXFA_FMToken(TOKge);
+          return Token(TOKge);
         }
-        return CXFA_FMToken(TOKgt);
+        return Token(TOKgt);
       case ',':
         ++m_nCursor;
-        return CXFA_FMToken(TOKcomma);
+        return Token(TOKcomma);
       case '(':
         ++m_nCursor;
-        return CXFA_FMToken(TOKlparen);
+        return Token(TOKlparen);
       case ')':
         ++m_nCursor;
-        return CXFA_FMToken(TOKrparen);
+        return Token(TOKrparen);
       case '[':
         ++m_nCursor;
-        return CXFA_FMToken(TOKlbracket);
+        return Token(TOKlbracket);
       case ']':
         ++m_nCursor;
-        return CXFA_FMToken(TOKrbracket);
+        return Token(TOKrbracket);
       case '&':
         ++m_nCursor;
-        return CXFA_FMToken(TOKand);
+        return Token(TOKand);
       case '|':
         ++m_nCursor;
-        return CXFA_FMToken(TOKor);
+        return Token(TOKor);
       case '+':
         ++m_nCursor;
-        return CXFA_FMToken(TOKplus);
+        return Token(TOKplus);
       case '-':
         ++m_nCursor;
-        return CXFA_FMToken(TOKminus);
+        return Token(TOKminus);
       case '*':
         ++m_nCursor;
-        return CXFA_FMToken(TOKmul);
+        return Token(TOKmul);
       case '/': {
         ++m_nCursor;
         if (m_nCursor >= m_spInput.size())
-          return CXFA_FMToken(TOKdiv);
+          return Token(TOKdiv);
 
         if (!IsFormCalcCharacter(m_spInput[m_nCursor])) {
           RaiseError();
-          return CXFA_FMToken();
+          return Token();
         }
         if (m_spInput[m_nCursor] != '/')
-          return CXFA_FMToken(TOKdiv);
+          return Token(TOKdiv);
 
         AdvanceForComment();
         break;
@@ -265,30 +265,30 @@
       case '.':
         ++m_nCursor;
         if (m_nCursor >= m_spInput.size())
-          return CXFA_FMToken(TOKdot);
+          return Token(TOKdot);
 
         if (!IsFormCalcCharacter(m_spInput[m_nCursor])) {
           RaiseError();
-          return CXFA_FMToken();
+          return Token();
         }
 
         if (m_spInput[m_nCursor] == '.') {
           ++m_nCursor;
-          return CXFA_FMToken(TOKdotdot);
+          return Token(TOKdotdot);
         }
         if (m_spInput[m_nCursor] == '*') {
           ++m_nCursor;
-          return CXFA_FMToken(TOKdotstar);
+          return Token(TOKdotstar);
         }
         if (m_spInput[m_nCursor] == '#') {
           ++m_nCursor;
-          return CXFA_FMToken(TOKdotscream);
+          return Token(TOKdotscream);
         }
         if (FXSYS_IsDecimalDigit(m_spInput[m_nCursor])) {
           --m_nCursor;
           return AdvanceForNumber();
         }
-        return CXFA_FMToken(TOKdot);
+        return Token(TOKdot);
       default:
         if (IsWhitespaceCharacter(m_spInput[m_nCursor])) {
           ++m_nCursor;
@@ -296,15 +296,15 @@
         }
         if (!IsInitialIdentifierCharacter(m_spInput[m_nCursor])) {
           RaiseError();
-          return CXFA_FMToken();
+          return Token();
         }
         return AdvanceForIdentifier();
     }
   }
-  return CXFA_FMToken(TOKeof);
+  return Token(TOKeof);
 }
 
-CXFA_FMToken CXFA_FMLexer::AdvanceForNumber() {
+CXFA_FMLexer::Token CXFA_FMLexer::AdvanceForNumber() {
   // This will set end to the character after the end of the number.
   int32_t used_length = 0;
   if (m_nCursor < m_spInput.size()) {
@@ -315,17 +315,17 @@
   if (used_length == 0 ||
       (end < m_spInput.size() && FXSYS_iswalpha(m_spInput[end]))) {
     RaiseError();
-    return CXFA_FMToken();
+    return Token();
   }
-  CXFA_FMToken token(TOKnumber);
+  Token token(TOKnumber);
   token.m_string =
       WideStringView(m_spInput.subspan(m_nCursor, end - m_nCursor));
   m_nCursor = end;
   return token;
 }
 
-CXFA_FMToken CXFA_FMLexer::AdvanceForString() {
-  CXFA_FMToken token(TOKstring);
+CXFA_FMLexer::Token CXFA_FMLexer::AdvanceForString() {
+  Token token(TOKstring);
   size_t start = m_nCursor;
   ++m_nCursor;
   while (!IsComplete() && m_spInput[m_nCursor]) {
@@ -357,16 +357,16 @@
 
   // Didn't find the end of the string.
   RaiseError();
-  return CXFA_FMToken();
+  return Token();
 }
 
-CXFA_FMToken CXFA_FMLexer::AdvanceForIdentifier() {
+CXFA_FMLexer::Token CXFA_FMLexer::AdvanceForIdentifier() {
   size_t start = m_nCursor;
   ++m_nCursor;
   while (!IsComplete() && m_spInput[m_nCursor]) {
     if (!IsFormCalcCharacter(m_spInput[m_nCursor])) {
       RaiseError();
-      return CXFA_FMToken();
+      return Token();
     }
     if (!IsIdentifierCharacter(m_spInput[m_nCursor]))
       break;
@@ -376,7 +376,7 @@
 
   WideStringView str =
       WideStringView(m_spInput.subspan(start, m_nCursor - start));
-  CXFA_FMToken token(TokenizeIdentifier(str));
+  Token token(TokenizeIdentifier(str));
   token.m_string = str;
   return token;
 }
diff --git a/xfa/fxfa/fm2js/cxfa_fmlexer.h b/xfa/fxfa/fm2js/cxfa_fmlexer.h
index fe55a12..d820186 100644
--- a/xfa/fxfa/fm2js/cxfa_fmlexer.h
+++ b/xfa/fxfa/fm2js/cxfa_fmlexer.h
@@ -81,35 +81,34 @@
   TOKreserver
 };
 
-class CXFA_FMToken {
- public:
-  CXFA_FMToken();
-  explicit CXFA_FMToken(XFA_FM_TOKEN token);
-  CXFA_FMToken(const CXFA_FMToken&);
-  ~CXFA_FMToken();
-
-#ifndef NDEBUG
-  WideString ToDebugString() const;
-#endif  // NDEBUG
-
-  WideStringView m_string;
-  XFA_FM_TOKEN m_type;
-};
-
 class CXFA_FMLexer {
   CPPGC_STACK_ALLOCATED();  // Raw pointers allowed.
 
  public:
+  struct Token {
+    Token();
+    explicit Token(XFA_FM_TOKEN token);
+    Token(const Token& that);
+    ~Token();
+
+#ifndef NDEBUG
+    WideString ToDebugString() const;
+#endif  // NDEBUG
+
+    WideStringView m_string;
+    XFA_FM_TOKEN m_type;
+  };
+
   explicit CXFA_FMLexer(WideStringView wsFormcalc);
   ~CXFA_FMLexer();
 
-  CXFA_FMToken NextToken();
+  Token NextToken();
   bool IsComplete() const { return m_nCursor >= m_spInput.size(); }
 
  private:
-  CXFA_FMToken AdvanceForNumber();
-  CXFA_FMToken AdvanceForString();
-  CXFA_FMToken AdvanceForIdentifier();
+  Token AdvanceForNumber();
+  Token AdvanceForString();
+  Token AdvanceForIdentifier();
   void AdvanceForComment();
 
   void RaiseError() { m_bLexerError = true; }
diff --git a/xfa/fxfa/fm2js/cxfa_fmlexer_unittest.cpp b/xfa/fxfa/fm2js/cxfa_fmlexer_unittest.cpp
index 3f5eacc..6ecc3b9 100644
--- a/xfa/fxfa/fm2js/cxfa_fmlexer_unittest.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmlexer_unittest.cpp
@@ -13,14 +13,14 @@
 TEST(CXFA_FMLexerTest, NullString) {
   WideStringView null_string;
   CXFA_FMLexer lexer(null_string);
-  CXFA_FMToken token = lexer.NextToken();
+  CXFA_FMLexer::Token token = lexer.NextToken();
   EXPECT_EQ(TOKeof, token.m_type);
   EXPECT_TRUE(lexer.IsComplete());
 }
 
 TEST(CXFA_FMLexerTest, EmptyString) {
   CXFA_FMLexer lexer(L"");
-  CXFA_FMToken token = lexer.NextToken();
+  CXFA_FMLexer::Token token = lexer.NextToken();
   EXPECT_EQ(TOKeof, token.m_type);
   EXPECT_TRUE(lexer.IsComplete());
 }
@@ -28,7 +28,7 @@
 TEST(CXFA_FMLexerTest, Numbers) {
   {
     CXFA_FMLexer lexer(L"-12");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     // TODO(dsinclair): Should this return -12 instead of two tokens?
     EXPECT_EQ(TOKminus, token.m_type);
     token = lexer.NextToken();
@@ -38,31 +38,31 @@
   }
   {
     CXFA_FMLexer lexer(L"1.5362");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKnumber, token.m_type);
     EXPECT_EQ(L"1.5362", token.m_string);
   }
   {
     CXFA_FMLexer lexer(L"0.875");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKnumber, token.m_type);
     EXPECT_EQ(L"0.875", token.m_string);
   }
   {
     CXFA_FMLexer lexer(L"5.56e-2");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKnumber, token.m_type);
     EXPECT_EQ(L"5.56e-2", token.m_string);
   }
   {
     CXFA_FMLexer lexer(L"1.234E10");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKnumber, token.m_type);
     EXPECT_EQ(L"1.234E10", token.m_string);
   }
   {
     CXFA_FMLexer lexer(L"123456789.012345678");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKnumber, token.m_type);
     // TODO(dsinclair): This should round as per IEEE 64-bit values.
     // EXPECT_EQ(L"123456789.01234567", token.m_string);
@@ -70,7 +70,7 @@
   }
   {
     CXFA_FMLexer lexer(L"99999999999999999");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKnumber, token.m_type);
     // TODO(dsinclair): This is spec'd as rounding when > 16 significant digits
     // prior to the exponent.
@@ -84,7 +84,7 @@
 TEST(CXFA_FMLexerTest, Strings) {
   {
     CXFA_FMLexer lexer(L"\"The cat jumped over the fence.\"");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKstring, token.m_type);
     EXPECT_EQ(L"\"The cat jumped over the fence.\"", token.m_string);
 
@@ -93,14 +93,14 @@
   }
   {
     CXFA_FMLexer lexer(L"\"\"");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKstring, token.m_type);
     EXPECT_EQ(L"\"\"", token.m_string);
   }
   {
     CXFA_FMLexer lexer(
         L"\"The message reads: \"\"Warning: Insufficient Memory\"\"\"");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKstring, token.m_type);
     EXPECT_EQ(L"\"The message reads: \"\"Warning: Insufficient Memory\"\"\"",
               token.m_string);
@@ -108,7 +108,7 @@
   {
     CXFA_FMLexer lexer(
         L"\"\\u0047\\u006f\\u0066\\u0069\\u0073\\u0068\\u0021\\u000d\\u000a\"");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKstring, token.m_type);
     EXPECT_EQ(
         L"\"\\u0047\\u006f\\u0066\\u0069\\u0073\\u0068\\u0021\\u000d\\u000a\"",
@@ -184,7 +184,7 @@
 
   for (size_t i = 0; i < pdfium::size(op); ++i) {
     CXFA_FMLexer lexer(op[i].op);
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(op[i].token, token.m_type);
     EXPECT_TRUE(lexer.IsComplete());
   }
@@ -193,17 +193,17 @@
 TEST(CXFA_FMLexerTest, Comments) {
   {
     CXFA_FMLexer lexer(L"// Empty.");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKeof, token.m_type);
   }
   {
     CXFA_FMLexer lexer(L"//");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKeof, token.m_type);
   }
   {
     CXFA_FMLexer lexer(L"123 // Empty.\n\"str\"");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKnumber, token.m_type);
     EXPECT_EQ(L"123", token.m_string);
 
@@ -216,17 +216,17 @@
   }
   {
     CXFA_FMLexer lexer(L";");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKeof, token.m_type);
   }
   {
     CXFA_FMLexer lexer(L"; Empty.");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKeof, token.m_type);
   }
   {
     CXFA_FMLexer lexer(L"123 ;Empty.\n\"str\"");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKnumber, token.m_type);
     EXPECT_EQ(L"123", token.m_string);
 
@@ -245,7 +245,7 @@
       L"a", L"an_identifier", L"_ident", L"$ident", L"!ident", L"GetAddr"};
   for (const auto* ident : identifiers) {
     CXFA_FMLexer lexer(ident);
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKidentifier, token.m_type);
     EXPECT_EQ(ident, token.m_string);
     EXPECT_TRUE(lexer.IsComplete());
@@ -255,17 +255,17 @@
 TEST(CXFA_FMLexerTest, InvalidIdentifiers) {
   {
     CXFA_FMLexer lexer(L"#a");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKreserver, token.m_type);
   }
   {
     CXFA_FMLexer lexer(L"1a");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKreserver, token.m_type);
   }
   {
     CXFA_FMLexer lexer(L"an@identifier");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_NE(TOKreserver, token.m_type);
     token = lexer.NextToken();
     EXPECT_EQ(TOKreserver, token.m_type);
@@ -274,7 +274,7 @@
   }
   {
     CXFA_FMLexer lexer(L"_ident@");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_NE(TOKreserver, token.m_type);
     token = lexer.NextToken();
     EXPECT_EQ(TOKreserver, token.m_type);
@@ -285,12 +285,12 @@
 TEST(CXFA_FMLexerTest, Whitespace) {
   {
     CXFA_FMLexer lexer(L" \t\xc\x9\xb");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKeof, token.m_type);
   }
   {
     CXFA_FMLexer lexer(L"123 \t\xc\x9\xb 456");
-    CXFA_FMToken token = lexer.NextToken();
+    CXFA_FMLexer::Token token = lexer.NextToken();
     EXPECT_EQ(TOKnumber, token.m_type);
     EXPECT_EQ(L"123", token.m_string);
 
@@ -306,7 +306,7 @@
 
 TEST(CXFA_FMLexerTest, NullData) {
   CXFA_FMLexer lexer(WideStringView(L"\x2d\x32\x00\x2d\x32", 5));
-  CXFA_FMToken token = lexer.NextToken();
+  CXFA_FMLexer::Token token = lexer.NextToken();
   EXPECT_EQ(TOKminus, token.m_type);
 
   token = lexer.NextToken();
diff --git a/xfa/fxfa/fm2js/cxfa_fmparser.h b/xfa/fxfa/fm2js/cxfa_fmparser.h
index 0e61abb..eb3da64 100644
--- a/xfa/fxfa/fm2js/cxfa_fmparser.h
+++ b/xfa/fxfa/fm2js/cxfa_fmparser.h
@@ -66,7 +66,7 @@
 
   UnownedPtr<cppgc::Heap> const m_heap;
   UnownedPtr<CXFA_FMLexer> m_lexer;
-  CXFA_FMToken m_token;
+  CXFA_FMLexer::Token m_token;
   bool m_error = false;
   unsigned long m_parse_depth = 0;
   unsigned long m_max_parse_depth;