[PATCH] Refactor MacroInfo for easier access in for-loops
Justin Bogner
mail at justinbogner.com
Fri May 22 13:23:25 PDT 2015
Sebastian Edman <sebastian.edman at evidente.se> writes:
> 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);
> + }
It's probably better to use iterator_range from llvm/ADT/iterator_range.h.
Something like:
llvm::iterator_range<arg_iterator> args() const {
llvm::make_range(arg_begin(), arg_end());
}
> 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);
Don't use "I" with iterator ranges - name the variable after what it is
(Arg, or something like that).
> }
>
> // 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/
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list