On Jan 19, 2010, at 7:59 PM, Chandler Carruth wrote: > Author: chandlerc > Date: Tue Jan 19 21:59:11 2010 > New Revision: 93974 > > URL: http://llvm.org/viewvc/llvm-project?rev=93974&view=rev > Log: > Fix a layering issue between Basic and FE by moving a utility class into > Basic. > > This isn't entirely satisfactory, as it seems an implementation detail, and > with nothing to do with TargetInfo. Suggestions on where to put this are > welcome.
Thanks Chandler, improving layering is great. How about moving this to a new MacroBuilder.h header file? I'm not thrilled about adding twine and raw_ostream.h #includes to TargetInfo.h -Chris > > Modified: > cfe/trunk/include/clang/Basic/TargetInfo.h > cfe/trunk/include/clang/Frontend/Utils.h > > Modified: cfe/trunk/include/clang/Basic/TargetInfo.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=93974&r1=93973&r2=93974&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Basic/TargetInfo.h (original) > +++ cfe/trunk/include/clang/Basic/TargetInfo.h Tue Jan 19 21:59:11 2010 > @@ -17,6 +17,8 @@ > // FIXME: Daniel isn't smart enough to use a prototype for this. > #include "llvm/ADT/StringMap.h" > #include "llvm/ADT/Triple.h" > +#include "llvm/ADT/Twine.h" > +#include "llvm/Support/raw_ostream.h" > #include "llvm/System/DataTypes.h" > #include <cassert> > #include <vector> > @@ -30,13 +32,34 @@ > namespace clang { > class Diagnostic; > class LangOptions; > -class MacroBuilder; > class SourceLocation; > class SourceManager; > class TargetOptions; > > namespace Builtin { struct Info; } > > +class MacroBuilder { > + llvm::raw_ostream &Out; > +public: > + MacroBuilder(llvm::raw_ostream &Output) : Out(Output) {} > + > + /// Append a #define line for macro of the form "#define Name Value\n". > + void defineMacro(const llvm::Twine &Name, const llvm::Twine &Value = "1") { > + Out << "#define " << Name << ' ' << Value << '\n'; > + } > + > + /// Append a #undef line for Name. Name should be of the form XXX > + /// and we emit "#undef XXX". > + void undefineMacro(const llvm::Twine &Name) { > + Out << "#undef " << Name << '\n'; > + } > + > + /// Directly append Str and a newline to the underlying buffer. > + void append(const llvm::Twine &Str) { > + Out << Str << '\n'; > + } > +}; > + > /// TargetInfo - This class exposes information about the current target. > /// > class TargetInfo { > > Modified: cfe/trunk/include/clang/Frontend/Utils.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/Utils.h?rev=93974&r1=93973&r2=93974&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Frontend/Utils.h (original) > +++ cfe/trunk/include/clang/Frontend/Utils.h Tue Jan 19 21:59:11 2010 > @@ -15,7 +15,6 @@ > #define LLVM_CLANG_FRONTEND_UTILS_H > > #include "llvm/ADT/StringRef.h" > -#include "llvm/ADT/Twine.h" > #include "llvm/Support/raw_ostream.h" > > namespace llvm { > @@ -41,28 +40,6 @@ > class TargetInfo; > class FrontendOptions; > > -class MacroBuilder { > - llvm::raw_ostream &Out; > -public: > - MacroBuilder(llvm::raw_ostream &Output) : Out(Output) {} > - > - /// Append a #define line for macro of the form "#define Name Value\n". > - void defineMacro(const llvm::Twine &Name, const llvm::Twine &Value = "1") { > - Out << "#define " << Name << ' ' << Value << '\n'; > - } > - > - /// Append a #undef line for Name. Name should be of the form XXX > - /// and we emit "#undef XXX". > - void undefineMacro(const llvm::Twine &Name) { > - Out << "#undef " << Name << '\n'; > - } > - > - /// Directly append Str and a newline to the underlying buffer. > - void append(const llvm::Twine &Str) { > - Out << Str << '\n'; > - } > -}; > - > /// Normalize \arg File for use in a user defined #include directive (in the > /// predefines buffer). > std::string NormalizeDashIncludePath(llvm::StringRef File); > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
