[PATCH] Refactor MacroInfo for easier access in for-loops

Sebastian Edman sebastian.edman at evidente.se
Fri May 22 05:30:27 PDT 2015


Hi alexfh, danielmarjamaki,

Added possibilty to extract the arguments in a MacroInfo as a container in order to use C++11 style for loops.

http://reviews.llvm.org/D9934

Files:
  include/clang/Lex/MacroInfo.h
  lib/Lex/PPMacroExpansion.cpp
  lib/Serialization/ASTWriter.cpp

Index: include/clang/Lex/MacroInfo.h
===================================================================
--- include/clang/Lex/MacroInfo.h
+++ include/clang/Lex/MacroInfo.h
@@ -182,6 +182,9 @@
   bool arg_empty() const { return NumArguments == 0; }
   arg_iterator arg_begin() const { return ArgumentList; }
   arg_iterator arg_end() const { return ArgumentList+NumArguments; }
+  ArrayRef<IdentifierInfo*> args() const {
+	  return ArrayRef<IdentifierInfo*>(ArgumentList, NumArguments);
+  }
   unsigned getNumArgs() const { return NumArguments; }
 
   /// \brief Return the argument number of the specified identifier,
Index: lib/Serialization/ASTWriter.cpp
===================================================================
--- lib/Serialization/ASTWriter.cpp
+++ lib/Serialization/ASTWriter.cpp
@@ -2135,9 +2135,8 @@
       Record.push_back(MI->isGNUVarargs());
       Record.push_back(MI->hasCommaPasting());
       Record.push_back(MI->getNumArgs());
-      for (MacroInfo::arg_iterator I = MI->arg_begin(), E = MI->arg_end();
-           I != E; ++I)
-        AddIdentifierRef(*I, Record);
+      for (const auto &I : MI->args())
+        AddIdentifierRef(I, Record);
     }
 
     // If we have a detailed preprocessing record, record the macro definition
Index: lib/Lex/PPMacroExpansion.cpp
===================================================================
--- lib/Lex/PPMacroExpansion.cpp
+++ lib/Lex/PPMacroExpansion.cpp
@@ -362,9 +362,8 @@
 
   // If this is a function-like macro invocation, it's safe to trivially expand
   // as long as the identifier is not a macro argument.
-  for (MacroInfo::arg_iterator I = MI->arg_begin(), E = MI->arg_end();
-       I != E; ++I)
-    if (*I == II)
+  for (const auto &I : MI->args())
+    if (I == II)
       return false;   // Identifier is a macro argument.
 
   return true;

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9934.26316.patch
Type: text/x-patch
Size: 1837 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150522/f711a78e/attachment.bin>


More information about the cfe-commits mailing list