From b50df4a3df6db2ace3c011267934d3d10bdcc8db Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Thu, 10 Jan 2013 18:50:11 +0000 Subject: TableGen: Keep track of superclass reference ranges. def foo : bar; ~~~ This allows us to produce more precise diagnostics about a certain superclass, and even provide fixits. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172085 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/TableGen/Record.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'include/llvm/TableGen') diff --git a/include/llvm/TableGen/Record.h b/include/llvm/TableGen/Record.h index 61f868c7d5..f3e0142222 100644 --- a/include/llvm/TableGen/Record.h +++ b/include/llvm/TableGen/Record.h @@ -1387,7 +1387,8 @@ class Record { SmallVector Locs; std::vector TemplateArgs; std::vector Values; - std::vector SuperClasses; + std::vector SuperClasses; + std::vector SuperClassRanges; // Tracks Record instances. Not owned by Record. RecordKeeper &TrackedRecords; @@ -1419,8 +1420,8 @@ public: Record(const Record &O) : ID(LastID++), Name(O.Name), Locs(O.Locs), TemplateArgs(O.TemplateArgs), Values(O.Values), SuperClasses(O.SuperClasses), - TrackedRecords(O.TrackedRecords), TheInit(O.TheInit), - IsAnonymous(O.IsAnonymous) { } + SuperClassRanges(O.SuperClassRanges), TrackedRecords(O.TrackedRecords), + TheInit(O.TheInit), IsAnonymous(O.IsAnonymous) { } ~Record() {} @@ -1451,6 +1452,7 @@ public: } const std::vector &getValues() const { return Values; } const std::vector &getSuperClasses() const { return SuperClasses; } + ArrayRef getSuperClassRanges() const { return SuperClassRanges; } bool isTemplateArg(Init *Name) const { for (unsigned i = 0, e = TemplateArgs.size(); i != e; ++i) @@ -1525,9 +1527,10 @@ public: return false; } - void addSuperClass(Record *R) { + void addSuperClass(Record *R, SMRange Range) { assert(!isSubClassOf(R) && "Already subclassing record!"); SuperClasses.push_back(R); + SuperClassRanges.push_back(Range); } /// resolveReferences - If there are any field references that refer to fields -- cgit v1.2.3