Use a vector of pairs to implement the section stack, not two
authorJoerg Sonnenberger <joerg@bec.de>
Mon, 21 Feb 2011 01:07:42 +0000 (01:07 +0000)
committerJoerg Sonnenberger <joerg@bec.de>
Mon, 21 Feb 2011 01:07:42 +0000 (01:07 +0000)
independent vectors.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126099 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCStreamer.h
lib/MC/MCStreamer.cpp

index fc2451f9c19ca97a8f4cb6dd057854477b8db728..4451199b7fb378e8a46d64fb53da99ed76076d8f 100644 (file)
@@ -57,13 +57,10 @@ namespace llvm {
     MCDwarfFrameInfo *getCurrentFrameInfo();
     void EnsureValidFrame();
 
-    /// CurSectionStack - This is stack of CurSection values saved by
-    /// PushSection.
-    SmallVector<const MCSection *, 4> CurSectionStack;
-
-    /// PrevSectionStack - This is stack of PrevSection values saved by
-    /// PushSection.
-    SmallVector<const MCSection *, 4> PrevSectionStack;
+    /// SectionStack - This is stack of current and previous section
+    /// values saved by PushSection.
+    SmallVector<std::pair<const MCSection *,
+                const MCSection *>, 4> SectionStack;
 
   protected:
     MCStreamer(MCContext &Ctx);
@@ -117,16 +114,16 @@ namespace llvm {
     /// getCurrentSection - Return the current section that the streamer is
     /// emitting code to.
     const MCSection *getCurrentSection() const {
-      if (!CurSectionStack.empty())
-        return CurSectionStack.back();
+      if (!SectionStack.empty())
+        return SectionStack.back().first;
       return NULL;
     }
 
     /// getPreviousSection - Return the previous section that the streamer is
     /// emitting code to.
     const MCSection *getPreviousSection() const {
-      if (!PrevSectionStack.empty())
-        return PrevSectionStack.back();
+      if (!SectionStack.empty())
+        return SectionStack.back().second;
       return NULL;
     }
 
@@ -139,8 +136,8 @@ namespace llvm {
     /// pushSection - Save the current and previous section on the
     /// section stack.
     void PushSection() {
-      PrevSectionStack.push_back(getPreviousSection());
-      CurSectionStack.push_back(getCurrentSection());
+      SectionStack.push_back(std::make_pair(getCurrentSection(),
+                                            getPreviousSection()));
     }
 
     /// popSection - Restore the current and previous section from
@@ -148,12 +145,10 @@ namespace llvm {
     ///
     /// Returns false if the stack was empty.
     bool PopSection() {
-      if (PrevSectionStack.size() <= 1)
+      if (SectionStack.size() <= 1)
         return false;
-      assert(CurSectionStack.size() > 1);
-      PrevSectionStack.pop_back();
-      const MCSection *oldSection = CurSectionStack.pop_back_val();
-      const MCSection *curSection = CurSectionStack.back();
+      const MCSection *oldSection = SectionStack.pop_back_val().first;
+      const MCSection *curSection = SectionStack.back().first;
 
       if (oldSection != curSection)
         ChangeSection(curSection);
@@ -166,10 +161,10 @@ namespace llvm {
     /// This corresponds to assembler directives like .section, .text, etc.
     void SwitchSection(const MCSection *Section) {
       assert(Section && "Cannot switch to a null section!");
-      const MCSection *curSection = CurSectionStack.back();
-      PrevSectionStack.back() = curSection;
+      const MCSection *curSection = SectionStack.back().first;
+      SectionStack.back().second = curSection;
       if (Section != curSection) {
-        CurSectionStack.back() = Section;
+        SectionStack.back().first = Section;
         ChangeSection(Section);
       }
     }
index 3dcdba13135f6d8245660127d296f5a1398eb3a2..4b302c8602c98dfeee6603477da6144fefb48223 100644 (file)
@@ -20,8 +20,8 @@
 using namespace llvm;
 
 MCStreamer::MCStreamer(MCContext &Ctx) : Context(Ctx) {
-  PrevSectionStack.push_back(NULL);
-  CurSectionStack.push_back(NULL);
+  const MCSection *section = NULL;
+  SectionStack.push_back(std::make_pair(section, section));
 }
 
 MCStreamer::~MCStreamer() {