On Tue, Jan 19, 2010 at 9:32 PM, Chris Lattner <[email protected]> wrote: > > 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
Sounds good to me! r93982. > > -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 > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
