[llvm] r293712 - Move some code to a helper function. NFC.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 31 15:07:09 PST 2017


Author: rafael
Date: Tue Jan 31 17:07:08 2017
New Revision: 293712

URL: http://llvm.org/viewvc/llvm-project?rev=293712&view=rev
Log:
Move some code to a helper function. NFC.

Modified:
    llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp

Modified: llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp?rev=293712&r1=293711&r2=293712&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp Tue Jan 31 17:07:08 2017
@@ -142,6 +142,7 @@ private:
   bool ParseSectionName(StringRef &SectionName);
   bool ParseSectionArguments(bool IsPush, SMLoc loc);
   unsigned parseSunStyleSectionFlags();
+  bool maybeParseSectionType(StringRef &TypeName);
 };
 
 }
@@ -366,6 +367,21 @@ bool ELFAsmParser::ParseDirectiveSection
   return ParseSectionArguments(/*IsPush=*/false, loc);
 }
 
+bool ELFAsmParser::maybeParseSectionType(StringRef &TypeName) {
+  MCAsmLexer &L = getLexer();
+  if (L.isNot(AsmToken::Comma))
+    return false;
+  Lex();
+  if (L.isNot(AsmToken::At) && L.isNot(AsmToken::Percent) &&
+      L.isNot(AsmToken::String))
+    return TokError("expected '@<type>', '%<type>' or \"<type>\"");
+  if (!L.is(AsmToken::String))
+    Lex();
+  if (getParser().parseIdentifier(TypeName))
+    return TokError("expected identifier in directive");
+  return false;
+}
+
 bool ELFAsmParser::ParseSectionArguments(bool IsPush, SMLoc loc) {
   StringRef SectionName;
 
@@ -422,65 +438,60 @@ bool ELFAsmParser::ParseSectionArguments
       return TokError("Section cannot specifiy a group name while also acting "
                       "as a member of the last group");
 
-    if (getLexer().isNot(AsmToken::Comma)) {
+    if (maybeParseSectionType(TypeName))
+      return true;
+
+    MCAsmLexer &L = getLexer();
+    if (TypeName.empty()) {
       if (Mergeable)
         return TokError("Mergeable section must specify the type");
       if (Group)
         return TokError("Group section must specify the type");
-    } else {
-      Lex();
-      if (getLexer().is(AsmToken::At) || getLexer().is(AsmToken::Percent) ||
-          getLexer().is(AsmToken::String)) {
-        if (!getLexer().is(AsmToken::String))
-          Lex();
-      } else
-        return TokError("expected '@<type>', '%<type>' or \"<type>\"");
-
-      if (getParser().parseIdentifier(TypeName))
-        return TokError("expected identifier in directive");
+      if (L.isNot(AsmToken::EndOfStatement))
+        return TokError("unexpected token in directive");
+    }
 
-      if (Mergeable) {
-        if (getLexer().isNot(AsmToken::Comma))
-          return TokError("expected the entry size");
-        Lex();
-        if (getParser().parseAbsoluteExpression(Size))
-          return true;
-        if (Size <= 0)
-          return TokError("entry size must be positive");
-      }
+    if (Mergeable) {
+      if (getLexer().isNot(AsmToken::Comma))
+        return TokError("expected the entry size");
+      Lex();
+      if (getParser().parseAbsoluteExpression(Size))
+        return true;
+      if (Size <= 0)
+        return TokError("entry size must be positive");
+    }
 
-      if (Group) {
-        if (getLexer().isNot(AsmToken::Comma))
-          return TokError("expected group name");
-        Lex();
-        if (getParser().parseIdentifier(GroupName))
-          return true;
-        if (getLexer().is(AsmToken::Comma)) {
-          Lex();
-          StringRef Linkage;
-          if (getParser().parseIdentifier(Linkage))
-            return true;
-          if (Linkage != "comdat")
-            return TokError("Linkage must be 'comdat'");
-        }
-      }
+    if (Group) {
+      if (getLexer().isNot(AsmToken::Comma))
+        return TokError("expected group name");
+      Lex();
+      if (getParser().parseIdentifier(GroupName))
+        return true;
       if (getLexer().is(AsmToken::Comma)) {
         Lex();
-        if (getParser().parseIdentifier(UniqueStr))
-          return TokError("expected identifier in directive");
-        if (UniqueStr != "unique")
-          return TokError("expected 'unique'");
-        if (getLexer().isNot(AsmToken::Comma))
-          return TokError("expected commma");
-        Lex();
-        if (getParser().parseAbsoluteExpression(UniqueID))
+        StringRef Linkage;
+        if (getParser().parseIdentifier(Linkage))
           return true;
-        if (UniqueID < 0)
-          return TokError("unique id must be positive");
-        if (!isUInt<32>(UniqueID) || UniqueID == ~0U)
-          return TokError("unique id is too large");
+        if (Linkage != "comdat")
+          return TokError("Linkage must be 'comdat'");
       }
     }
+    if (getLexer().is(AsmToken::Comma)) {
+      Lex();
+      if (getParser().parseIdentifier(UniqueStr))
+        return TokError("expected identifier in directive");
+      if (UniqueStr != "unique")
+        return TokError("expected 'unique'");
+      if (getLexer().isNot(AsmToken::Comma))
+        return TokError("expected commma");
+      Lex();
+      if (getParser().parseAbsoluteExpression(UniqueID))
+        return true;
+      if (UniqueID < 0)
+        return TokError("unique id must be positive");
+      if (!isUInt<32>(UniqueID) || UniqueID == ~0U)
+        return TokError("unique id is too large");
+    }
   }
 
 EndStmt:




More information about the llvm-commits mailing list