From 18a6a94e1fc5cd10d50a91598b1465f31e307266 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 6 Aug 2003 04:31:26 +0000 Subject: [PATCH] Add more helper methods git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7626 91177308-0d34-0410-b5e6-96231b3b80d8 --- support/tools/TableGen/TableGenBackend.cpp | 21 ++++++++++++++++++++- support/tools/TableGen/TableGenBackend.h | 10 ++++++++++ utils/TableGen/TableGenBackend.cpp | 21 ++++++++++++++++++++- utils/TableGen/TableGenBackend.h | 10 ++++++++++ 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/support/tools/TableGen/TableGenBackend.cpp b/support/tools/TableGen/TableGenBackend.cpp index f00c6eedb74..c0a67e33924 100644 --- a/support/tools/TableGen/TableGenBackend.cpp +++ b/support/tools/TableGen/TableGenBackend.cpp @@ -5,13 +5,32 @@ //===----------------------------------------------------------------------===// #include "TableGenBackend.h" +#include "Record.h" #include void TableGenBackend::EmitSourceFileHeader(const std::string &Desc, - std::ostream &OS) { + std::ostream &OS) const { OS << "//===- TableGen'erated file -------------------------------------*-" " C++ -*-===//\n//\n// " << Desc << "\n//\n// Automatically generate" "d file, do not edit!\n//\n//===------------------------------------" "----------------------------------===//\n\n"; } +/// getQualifiedName - Return the name of the specified record, with a +/// namespace qualifier if the record contains one. +/// +std::string TableGenBackend::getQualifiedName(Record *R) const { + std::string Namespace = R->getValueAsString("Namespace"); + if (Namespace.empty()) return R->getName(); + return Namespace + "::" + R->getName(); +} + +/// getTarget - Return the current instance of the Target class. +/// +Record *TableGenBackend::getTarget(RecordKeeper &RC) const { + std::vector Targets = RC.getAllDerivedDefinitions("Target"); + + if (Targets.size() != 1) + throw std::string("ERROR: Multiple subclasses of Target defined!"); + return Targets[0]; +} diff --git a/support/tools/TableGen/TableGenBackend.h b/support/tools/TableGen/TableGenBackend.h index b9e8c49d4c5..ae71d2c66bc 100644 --- a/support/tools/TableGen/TableGenBackend.h +++ b/support/tools/TableGen/TableGenBackend.h @@ -10,6 +10,8 @@ #include #include +class Record; +class RecordKeeper; struct TableGenBackend { @@ -19,8 +21,16 @@ struct TableGenBackend { public: // Useful helper routines... + /// EmitSourceFileHeader - Output a LLVM style file header to the specified + /// ostream. void EmitSourceFileHeader(const std::string &Desc, std::ostream &OS) const; + /// getQualifiedName - Return the name of the specified record, with a + /// namespace qualifier if the record contains one. + std::string getQualifiedName(Record *R) const; + + /// getTarget - Return the current instance of the Target class. + Record *getTarget(RecordKeeper &RC) const; }; #endif diff --git a/utils/TableGen/TableGenBackend.cpp b/utils/TableGen/TableGenBackend.cpp index f00c6eedb74..c0a67e33924 100644 --- a/utils/TableGen/TableGenBackend.cpp +++ b/utils/TableGen/TableGenBackend.cpp @@ -5,13 +5,32 @@ //===----------------------------------------------------------------------===// #include "TableGenBackend.h" +#include "Record.h" #include void TableGenBackend::EmitSourceFileHeader(const std::string &Desc, - std::ostream &OS) { + std::ostream &OS) const { OS << "//===- TableGen'erated file -------------------------------------*-" " C++ -*-===//\n//\n// " << Desc << "\n//\n// Automatically generate" "d file, do not edit!\n//\n//===------------------------------------" "----------------------------------===//\n\n"; } +/// getQualifiedName - Return the name of the specified record, with a +/// namespace qualifier if the record contains one. +/// +std::string TableGenBackend::getQualifiedName(Record *R) const { + std::string Namespace = R->getValueAsString("Namespace"); + if (Namespace.empty()) return R->getName(); + return Namespace + "::" + R->getName(); +} + +/// getTarget - Return the current instance of the Target class. +/// +Record *TableGenBackend::getTarget(RecordKeeper &RC) const { + std::vector Targets = RC.getAllDerivedDefinitions("Target"); + + if (Targets.size() != 1) + throw std::string("ERROR: Multiple subclasses of Target defined!"); + return Targets[0]; +} diff --git a/utils/TableGen/TableGenBackend.h b/utils/TableGen/TableGenBackend.h index b9e8c49d4c5..ae71d2c66bc 100644 --- a/utils/TableGen/TableGenBackend.h +++ b/utils/TableGen/TableGenBackend.h @@ -10,6 +10,8 @@ #include #include +class Record; +class RecordKeeper; struct TableGenBackend { @@ -19,8 +21,16 @@ struct TableGenBackend { public: // Useful helper routines... + /// EmitSourceFileHeader - Output a LLVM style file header to the specified + /// ostream. void EmitSourceFileHeader(const std::string &Desc, std::ostream &OS) const; + /// getQualifiedName - Return the name of the specified record, with a + /// namespace qualifier if the record contains one. + std::string getQualifiedName(Record *R) const; + + /// getTarget - Return the current instance of the Target class. + Record *getTarget(RecordKeeper &RC) const; }; #endif