From: Gordon Henriksen Date: Wed, 17 Oct 2007 21:28:48 +0000 (+0000) Subject: Switching TargetMachineRegistry to use the new generic Registry. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=4b2b9402c5c369b94b35837470a170f1d0e47e1f Switching TargetMachineRegistry to use the new generic Registry. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43094 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Target/TargetMachineRegistry.h b/include/llvm/Target/TargetMachineRegistry.h index 4c009e1a9a0..a8df7b3f826 100644 --- a/include/llvm/Target/TargetMachineRegistry.h +++ b/include/llvm/Target/TargetMachineRegistry.h @@ -17,52 +17,49 @@ #ifndef LLVM_TARGET_TARGETMACHINEREGISTRY_H #define LLVM_TARGET_TARGETMACHINEREGISTRY_H -#include "llvm/Support/CommandLine.h" +#include "llvm/Support/Registry.h" namespace llvm { class Module; class TargetMachine; + + struct TargetMachineRegistryEntry { + const char *Name; + const char *ShortDesc; + TargetMachine *(*CtorFn)(const Module &, const std::string &); + unsigned (*ModuleMatchQualityFn)(const Module &M); + unsigned (*JITMatchQualityFn)(); + + public: + TargetMachineRegistryEntry(const char *N, const char *SD, + TargetMachine *(*CF)(const Module &, const std::string &), + unsigned (*MMF)(const Module &M), + unsigned (*JMF)()) + : Name(N), ShortDesc(SD), CtorFn(CF), ModuleMatchQualityFn(MMF), + JITMatchQualityFn(JMF) {} + }; + + template<> + class RegistryTraits { + public: + typedef TargetMachineRegistryEntry entry; + + static const char *nameof(const entry &Entry) { return Entry.Name; } + static const char *descof(const entry &Entry) { return Entry.ShortDesc; } + }; - struct TargetMachineRegistry { - struct Entry; - - /// TargetMachineRegistry::getList - This static method returns the list of - /// target machines that are registered with the system. - static const Entry *getList() { return List; } - + struct TargetMachineRegistry : Registry { /// getClosestStaticTargetForModule - Given an LLVM module, pick the best /// target that is compatible with the module. If no close target can be /// found, this returns null and sets the Error string to a reason. - static const Entry *getClosestStaticTargetForModule(const Module &M, + static const entry *getClosestStaticTargetForModule(const Module &M, std::string &Error); /// getClosestTargetForJIT - Pick the best target that is compatible with /// the current host. If no close target can be found, this returns null /// and sets the Error string to a reason. - static const Entry *getClosestTargetForJIT(std::string &Error); - - - /// Entry - One instance of this struct is created for each target that is - /// registered. - struct Entry { - const char *Name; - const char *ShortDesc; - TargetMachine *(*CtorFn)(const Module &, const std::string &); - unsigned (*ModuleMatchQualityFn)(const Module &M); - unsigned (*JITMatchQualityFn)(); - - const Entry *getNext() const { return Next; } + static const entry *getClosestTargetForJIT(std::string &Error); - protected: - Entry(const char *N, const char *SD, - TargetMachine *(*CF)(const Module &, const std::string &), - unsigned (*MMF)(const Module &M), unsigned (*JMF)()); - private: - const Entry *Next; // Next entry in the linked list. - }; - - private: - static const Entry *List; }; //===--------------------------------------------------------------------===// @@ -77,51 +74,23 @@ namespace llvm { /// flavour. template - struct RegisterTarget : public TargetMachineRegistry::Entry { - RegisterTarget(const char *Name, const char *ShortDesc) : - TargetMachineRegistry::Entry(Name, ShortDesc, &Allocator, - &TargetMachineImpl::getModuleMatchQuality, - &TargetMachineImpl::getJITMatchQuality) { - } + struct RegisterTarget { + RegisterTarget(const char *Name, const char *ShortDesc) + : Entry(Name, ShortDesc, &Allocator, + &TargetMachineImpl::getModuleMatchQuality, + &TargetMachineImpl::getJITMatchQuality), + Node(Entry) + {} + private: + TargetMachineRegistry::entry Entry; + TargetMachineRegistry::node Node; + static TargetMachine *Allocator(const Module &M, const std::string &FS) { return new TargetMachineImpl(M, FS); } }; - /// TargetRegistrationListener - This class allows code to listen for targets - /// that are dynamically registered, and be notified of it when they are. - class TargetRegistrationListener { - TargetRegistrationListener **Prev, *Next; - public: - TargetRegistrationListener(); - virtual ~TargetRegistrationListener(); - - TargetRegistrationListener *getNext() const { return Next; } - - virtual void targetRegistered(const TargetMachineRegistry::Entry *E) = 0; - }; - - - //===--------------------------------------------------------------------===// - /// TargetNameParser - This option can be used to provide a command line - /// option to choose among the various registered targets (commonly -march). - class TargetNameParser : public TargetRegistrationListener, - public cl::parser { - public: - void initialize(cl::Option &O) { - for (const TargetMachineRegistry::Entry *E = - TargetMachineRegistry::getList(); E; E = E->getNext()) - Values.push_back(std::make_pair(E->Name, - std::make_pair(E, E->ShortDesc))); - cl::parser::initialize(O); - } - - virtual void targetRegistered(const TargetMachineRegistry::Entry *E) { - Values.push_back(std::make_pair(E->Name, - std::make_pair(E, E->ShortDesc))); - } - }; } #endif diff --git a/lib/ExecutionEngine/JIT/TargetSelect.cpp b/lib/ExecutionEngine/JIT/TargetSelect.cpp index bf968af4796..14e0a5f10e7 100644 --- a/lib/ExecutionEngine/JIT/TargetSelect.cpp +++ b/lib/ExecutionEngine/JIT/TargetSelect.cpp @@ -20,7 +20,8 @@ #include "llvm/Target/TargetMachineRegistry.h" using namespace llvm; -static cl::opt +static cl::opt MArch("march", cl::desc("Architecture to generate assembly for:")); static cl::opt @@ -39,7 +40,7 @@ MAttrs("mattr", /// for the current target. Otherwise, return null. /// ExecutionEngine *JIT::create(ModuleProvider *MP, std::string *ErrorStr) { - const TargetMachineRegistry::Entry *TheArch = MArch; + const TargetMachineRegistry::entry *TheArch = MArch; if (TheArch == 0) { std::string Error; TheArch = TargetMachineRegistry::getClosestTargetForJIT(Error); diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 35205c6edb3..f874a182f08 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -2684,7 +2684,7 @@ std::string CWriter::InterpretASMConstraint(InlineAsm::ConstraintInfo& c) { //Grab the translation table from TargetAsmInfo if it exists if (!TAsm) { std::string E; - const TargetMachineRegistry::Entry* Match = + const TargetMachineRegistry::entry* Match = TargetMachineRegistry::getClosestStaticTargetForModule(*TheModule, E); if (Match) { //Per platform Target Machines don't exist, so create it diff --git a/lib/Target/TargetMachineRegistry.cpp b/lib/Target/TargetMachineRegistry.cpp index 5be9eb1bb3f..077b7e8d67b 100644 --- a/lib/Target/TargetMachineRegistry.cpp +++ b/lib/Target/TargetMachineRegistry.cpp @@ -18,44 +18,23 @@ #include using namespace llvm; -/// List - This is the main list of all of the registered target machines. -const TargetMachineRegistry::Entry *TargetMachineRegistry::List = 0; - -/// Listeners - All of the listeners registered to get notified when new targets -/// are loaded. -static TargetRegistrationListener *Listeners = 0; - -TargetMachineRegistry::Entry::Entry(const char *N, const char *SD, - TargetMachine *(*CF)(const Module &,const std::string &), - unsigned (*MMF)(const Module &M), unsigned (*JMF)()) - : Name(N), ShortDesc(SD), CtorFn(CF), ModuleMatchQualityFn(MMF), - JITMatchQualityFn(JMF), Next(List) { - List = this; - for (TargetRegistrationListener *L = Listeners; L; L = L->getNext()) - L->targetRegistered(this); -} - -TargetRegistrationListener::TargetRegistrationListener() { - Next = Listeners; - if (Next) Next->Prev = &Next; - Prev = &Listeners; - Listeners = this; -} - -TargetRegistrationListener::~TargetRegistrationListener() { - *Prev = Next; -} +template<> Registry::node *Registry::Head = 0; +template<> Registry::node *Registry::Tail = 0; +template<> Registry::listener *Registry:: +ListenerHead = 0; +template<> Registry::listener *Registry:: +ListenerTail = 0; /// getClosestStaticTargetForModule - Given an LLVM module, pick the best target /// that is compatible with the module. If no close target can be found, this /// returns null and sets the Error string to a reason. -const TargetMachineRegistry::Entry * +const TargetMachineRegistry::entry * TargetMachineRegistry::getClosestStaticTargetForModule(const Module &M, std::string &Error) { - std::vector > UsableTargets; - for (const Entry *E = getList(); E; E = E->getNext()) - if (unsigned Qual = E->ModuleMatchQualityFn(M)) - UsableTargets.push_back(std::make_pair(Qual, E)); + std::vector > UsableTargets; + for (iterator I = begin(), E = end(); I != E; ++I) + if (unsigned Qual = I->ModuleMatchQualityFn(M)) + UsableTargets.push_back(std::make_pair(Qual, &*I)); if (UsableTargets.empty()) { Error = "No available targets are compatible with this module"; @@ -78,12 +57,12 @@ TargetMachineRegistry::getClosestStaticTargetForModule(const Module &M, /// getClosestTargetForJIT - Pick the best target that is compatible with /// the current host. If no close target can be found, this returns null /// and sets the Error string to a reason. -const TargetMachineRegistry::Entry * +const TargetMachineRegistry::entry * TargetMachineRegistry::getClosestTargetForJIT(std::string &Error) { - std::vector > UsableTargets; - for (const Entry *E = getList(); E; E = E->getNext()) - if (unsigned Qual = E->JITMatchQualityFn()) - UsableTargets.push_back(std::make_pair(Qual, E)); + std::vector > UsableTargets; + for (iterator I = begin(), E = end(); I != E; ++I) + if (unsigned Qual = I->JITMatchQualityFn()) + UsableTargets.push_back(std::make_pair(Qual, &*I)); if (UsableTargets.empty()) { Error = "No JIT is available for this host"; @@ -93,7 +72,7 @@ TargetMachineRegistry::getClosestTargetForJIT(std::string &Error) { // Otherwise, take the best target. If there is a tie, just pick one. unsigned MaxQual = UsableTargets.front().first; - const Entry *MaxQualTarget = UsableTargets.front().second; + const entry *MaxQualTarget = UsableTargets.front().second; for (unsigned i = 1, e = UsableTargets.size(); i != e; ++i) if (UsableTargets[i].first > MaxQual) { diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index 7b55c8092cf..c976ee261ec 100644 --- a/tools/llc/llc.cpp +++ b/tools/llc/llc.cpp @@ -57,7 +57,8 @@ static cl::opt Fast("fast", static cl::opt TargetTriple("mtriple", cl::desc("Override target triple for module")); -static cl::opt +static cl::opt MArch("march", cl::desc("Architecture to generate code for:")); static cl::opt diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp index cef26f1f065..e7e00e7f62c 100644 --- a/tools/lto/lto.cpp +++ b/tools/lto/lto.cpp @@ -217,7 +217,7 @@ LTO::getTarget (Module *M) { return; std::string Err; - const TargetMachineRegistry::Entry* March = + const TargetMachineRegistry::entry* March = TargetMachineRegistry::getClosestStaticTargetForModule(*M, Err); if (March == 0) diff --git a/utils/TableGen/FileLexer.cpp.cvs b/utils/TableGen/FileLexer.cpp.cvs index a4361405a50..74e04a740b3 100644 --- a/utils/TableGen/FileLexer.cpp.cvs +++ b/utils/TableGen/FileLexer.cpp.cvs @@ -502,7 +502,7 @@ goto find_rule; \ #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; -#line 1 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 1 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" #define INITIAL 0 /*===-- FileLexer.l - Scanner for TableGen Files ----------------*- C++ -*-===// // @@ -518,9 +518,9 @@ char *yytext; // //===----------------------------------------------------------------------===*/ #define YY_NEVER_INTERACTIVE 1 -#define comment 1 +#define in_comment 1 -#line 30 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 30 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" #include "llvm/Config/config.h" #include "llvm/Support/Streams.h" #include "Record.h" @@ -817,7 +817,7 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 185 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 185 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" #line 824 "Lexer.cpp" @@ -913,185 +913,185 @@ do_action: /* This label is used only to access EOF actions. */ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 187 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 187 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { /* Ignore comments */ } YY_BREAK case 2: YY_RULE_SETUP -#line 189 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 189 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { HandleInclude(yytext); } YY_BREAK case 3: YY_RULE_SETUP -#line 190 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 190 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { Filelval.StrVal = new std::string(yytext+2, yytext+yyleng-2); return CODEFRAGMENT; } YY_BREAK case 4: YY_RULE_SETUP -#line 193 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 193 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return INT; } YY_BREAK case 5: YY_RULE_SETUP -#line 194 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 194 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return BIT; } YY_BREAK case 6: YY_RULE_SETUP -#line 195 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 195 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return BITS; } YY_BREAK case 7: YY_RULE_SETUP -#line 196 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 196 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return STRING; } YY_BREAK case 8: YY_RULE_SETUP -#line 197 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 197 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return LIST; } YY_BREAK case 9: YY_RULE_SETUP -#line 198 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 198 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return CODE; } YY_BREAK case 10: YY_RULE_SETUP -#line 199 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 199 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return DAG; } YY_BREAK case 11: YY_RULE_SETUP -#line 201 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 201 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return CLASS; } YY_BREAK case 12: YY_RULE_SETUP -#line 202 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 202 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return DEF; } YY_BREAK case 13: YY_RULE_SETUP -#line 203 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 203 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return DEFM; } YY_BREAK case 14: YY_RULE_SETUP -#line 204 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 204 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return MULTICLASS; } YY_BREAK case 15: YY_RULE_SETUP -#line 205 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 205 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return FIELD; } YY_BREAK case 16: YY_RULE_SETUP -#line 206 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 206 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return LET; } YY_BREAK case 17: YY_RULE_SETUP -#line 207 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 207 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return IN; } YY_BREAK case 18: YY_RULE_SETUP -#line 209 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 209 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return CONCATTOK; } YY_BREAK case 19: YY_RULE_SETUP -#line 210 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 210 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return SRATOK; } YY_BREAK case 20: YY_RULE_SETUP -#line 211 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 211 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return SRLTOK; } YY_BREAK case 21: YY_RULE_SETUP -#line 212 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 212 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return SHLTOK; } YY_BREAK case 22: YY_RULE_SETUP -#line 213 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 213 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return STRCONCATTOK; } YY_BREAK case 23: YY_RULE_SETUP -#line 216 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 216 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { Filelval.StrVal = new std::string(yytext, yytext+yyleng); return ID; } YY_BREAK case 24: YY_RULE_SETUP -#line 218 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 218 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { Filelval.StrVal = new std::string(yytext+1, yytext+yyleng); return VARNAME; } YY_BREAK case 25: YY_RULE_SETUP -#line 221 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 221 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { Filelval.StrVal = new std::string(yytext+1, yytext+yyleng-1); return STRVAL; } YY_BREAK case 26: YY_RULE_SETUP -#line 224 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 224 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { Filelval.IntVal = ParseInt(Filetext); return INTVAL; } YY_BREAK case 27: YY_RULE_SETUP -#line 226 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 226 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { /* Ignore whitespace */ } YY_BREAK case 28: YY_RULE_SETUP -#line 229 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" -{ BEGIN(comment); CommentDepth++; } +#line 229 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" +{ BEGIN(in_comment); CommentDepth++; } YY_BREAK case 29: YY_RULE_SETUP -#line 230 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 230 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" {} /* eat anything that's not a '*' or '/' */ YY_BREAK case 30: YY_RULE_SETUP -#line 231 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 231 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" {} /* eat up '*'s not followed by '/'s */ YY_BREAK case 31: YY_RULE_SETUP -#line 232 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 232 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { ++CommentDepth; } YY_BREAK case 32: YY_RULE_SETUP -#line 233 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 233 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" {} /* eat up /'s not followed by *'s */ YY_BREAK case 33: YY_RULE_SETUP -#line 234 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 234 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { if (!--CommentDepth) { BEGIN(INITIAL); } } YY_BREAK -case YY_STATE_EOF(comment): -#line 235 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +case YY_STATE_EOF(in_comment): +#line 235 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { err() << "Unterminated comment!\n"; exit(1); } YY_BREAK case 34: YY_RULE_SETUP -#line 237 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 237 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" { return Filetext[0]; } YY_BREAK case 35: YY_RULE_SETUP -#line 239 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 239 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK #line 1098 "Lexer.cpp" @@ -1978,6 +1978,6 @@ int main() return 0; } #endif -#line 239 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileLexer.l" +#line 239 "/Users/malichus/Source/llvm/src/llvm/utils/TableGen/FileLexer.l" diff --git a/utils/TableGen/FileLexer.l.cvs b/utils/TableGen/FileLexer.l.cvs index 59bbdad7bf4..561e8a13179 100644 --- a/utils/TableGen/FileLexer.l.cvs +++ b/utils/TableGen/FileLexer.l.cvs @@ -24,7 +24,7 @@ %option noreject %option noyymore -%x comment +%x in_comment %{ #include "llvm/Config/config.h" @@ -226,13 +226,13 @@ ${Identifier} { Filelval.StrVal = new std::string(yytext+1, yytext+yyleng); [ \t\n\r]+ { /* Ignore whitespace */ } -"/*" { BEGIN(comment); CommentDepth++; } -[^*/]* {} /* eat anything that's not a '*' or '/' */ -"*"+[^*/]* {} /* eat up '*'s not followed by '/'s */ -"/*" { ++CommentDepth; } -"/"+[^*/]* {} /* eat up /'s not followed by *'s */ -"*"+"/" { if (!--CommentDepth) { BEGIN(INITIAL); } } -<> { err() << "Unterminated comment!\n"; exit(1); } +"/*" { BEGIN(in_comment); CommentDepth++; } +[^*/]* {} /* eat anything that's not a '*' or '/' */ +"*"+[^*/]* {} /* eat up '*'s not followed by '/'s */ +"/*" { ++CommentDepth; } +"/"+[^*/]* {} /* eat up /'s not followed by *'s */ +"*"+"/" { if (!--CommentDepth) { BEGIN(INITIAL); } } +<> { err() << "Unterminated comment!\n"; exit(1); } . { return Filetext[0]; }