[llvm-commits] [llvm] r108718 - /llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp

Mikhail Glushenkov foldr at codedgers.com
Mon Jul 19 10:17:22 PDT 2010


Author: foldr
Date: Mon Jul 19 12:17:22 2010
New Revision: 108718

URL: http://llvm.org/viewvc/llvm-project?rev=108718&view=rev
Log:
Remove code duplication.

Modified:
    llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp

Modified: llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp?rev=108718&r1=108717&r2=108718&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp Mon Jul 19 12:17:22 2010
@@ -1853,6 +1853,24 @@
 
 }
 
+/// EmitForEachListElementCycleHeader - Emit common code for iterating through
+/// all elements of a list. Helper function used by
+/// EmitForwardOptionPropertyHandlingCode.
+void EmitForEachListElementCycleHeader (const OptionDescription& D,
+                                        unsigned IndentLevel,
+                                        raw_ostream& O) {
+  unsigned IndentLevel1 = IndentLevel + Indent1;
+
+  O.indent(IndentLevel)
+    << "for (" << D.GenTypeDeclaration()
+    << "::iterator B = " << D.GenVariableName() << ".begin(),\n";
+  O.indent(IndentLevel)
+    << "E = " << D.GenVariableName() << ".end(); B != E;) {\n";
+  O.indent(IndentLevel1) << "unsigned pos = " << D.GenVariableName()
+                         << ".getPosition(B - " << D.GenVariableName()
+                         << ".begin());\n";
+}
+
 /// EmitForwardOptionPropertyHandlingCode - Helper function used to
 /// implement EmitActionHandler. Emits code for
 /// handling the (forward) and (forward_as) option properties.
@@ -1893,16 +1911,7 @@
                           << D.GenVariableName() << "));\n";
     break;
   case OptionType::PrefixList:
-    // TODO: remove duplication across PrefixList / ParameterList / SwitchList
-    // branches
-    O.indent(IndentLevel)
-      << "for (" << D.GenTypeDeclaration()
-      << "::iterator B = " << D.GenVariableName() << ".begin(),\n";
-    O.indent(IndentLevel)
-      << "E = " << D.GenVariableName() << ".end(); B != E;) {\n";
-    O.indent(IndentLevel1) << "unsigned pos = " << D.GenVariableName()
-                           << ".getPosition(B - " << D.GenVariableName()
-                           << ".begin());\n";
+    EmitForEachListElementCycleHeader(D, IndentLevel, O);
     O.indent(IndentLevel1) << "vec.push_back(std::make_pair(pos, \""
                            << Name << "\" + " << "*B));\n";
     O.indent(IndentLevel1) << "++B;\n";
@@ -1915,14 +1924,7 @@
     O.indent(IndentLevel) << "}\n";
     break;
   case OptionType::ParameterList:
-    O.indent(IndentLevel)
-      << "for (" << D.GenTypeDeclaration() << "::iterator B = "
-      << D.GenVariableName() << ".begin(),\n";
-    O.indent(IndentLevel) << "E = " << D.GenVariableName()
-                          << ".end() ; B != E;) {\n";
-    O.indent(IndentLevel1) << "unsigned pos = " << D.GenVariableName()
-                           << ".getPosition(B - " << D.GenVariableName()
-                           << ".begin());\n";
+    EmitForEachListElementCycleHeader(D, IndentLevel, O);
     O.indent(IndentLevel1) << "vec.push_back(std::make_pair(pos, \""
                            << Name << "\"));\n";
 
@@ -1934,14 +1936,7 @@
     O.indent(IndentLevel) << "}\n";
     break;
   case OptionType::SwitchList:
-        O.indent(IndentLevel)
-      << "for (" << D.GenTypeDeclaration() << "::iterator B = "
-      << D.GenVariableName() << ".begin(),\n";
-    O.indent(IndentLevel) << "E = " << D.GenVariableName()
-                          << ".end() ; B != E;) {\n";
-    O.indent(IndentLevel1) << "unsigned pos = " << D.GenVariableName()
-                           << ".getPosition(B - " << D.GenVariableName()
-                           << ".begin());\n";
+    EmitForEachListElementCycleHeader(D, IndentLevel, O);
     O.indent(IndentLevel1) << "vec.push_back(std::make_pair(pos, \""
                            << Name << "\"));\n";
     O.indent(IndentLevel1) << "++B;\n";





More information about the llvm-commits mailing list