diff options
Diffstat (limited to 'llvm/lib/TableGen/TGParser.h')
-rw-r--r-- | llvm/lib/TableGen/TGParser.h | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/llvm/lib/TableGen/TGParser.h b/llvm/lib/TableGen/TGParser.h index 578a56c9d01c..6e3c5186e4f6 100644 --- a/llvm/lib/TableGen/TGParser.h +++ b/llvm/lib/TableGen/TGParser.h @@ -36,17 +36,21 @@ namespace llvm { } }; - /// RecordsEntry - Can be either a record or a foreach loop. + /// RecordsEntry - Holds exactly one of a Record, ForeachLoop, or + /// AssertionInfo. struct RecordsEntry { std::unique_ptr<Record> Rec; std::unique_ptr<ForeachLoop> Loop; + std::unique_ptr<Record::AssertionInfo> Assertion; void dump() const; RecordsEntry() {} RecordsEntry(std::unique_ptr<Record> Rec) : Rec(std::move(Rec)) {} RecordsEntry(std::unique_ptr<ForeachLoop> Loop) - : Loop(std::move(Loop)) {} + : Loop(std::move(Loop)) {} + RecordsEntry(std::unique_ptr<Record::AssertionInfo> Assertion) + : Assertion(std::move(Assertion)) {} }; /// ForeachLoop - Record the iteration state associated with a for loop. @@ -222,7 +226,7 @@ private: // Parser methods. bool ParseForeach(MultiClass *CurMultiClass); bool ParseIf(MultiClass *CurMultiClass); bool ParseIfBody(MultiClass *CurMultiClass, StringRef Kind); - bool ParseAssert(MultiClass *CurMultiClass, Record *CurRec); + bool ParseAssert(MultiClass *CurMultiClass, Record *CurRec = nullptr); bool ParseTopLevelLet(MultiClass *CurMultiClass); void ParseLetList(SmallVectorImpl<LetRecord> &Result); @@ -243,8 +247,10 @@ private: // Parser methods. IDParseMode Mode = ParseValueMode); Init *ParseValue(Record *CurRec, RecTy *ItemType = nullptr, IDParseMode Mode = ParseValueMode); - void ParseValueList(SmallVectorImpl<llvm::Init*> &Result, Record *CurRec, - Record *ArgsRec = nullptr, RecTy *EltTy = nullptr); + void ParseValueList(SmallVectorImpl<llvm::Init*> &Result, + Record *CurRec, RecTy *ItemType = nullptr); + bool ParseTemplateArgValueList(SmallVectorImpl<llvm::Init *> &Result, + Record *CurRec, Record *ArgsRec); void ParseDagArgList( SmallVectorImpl<std::pair<llvm::Init*, StringInit*>> &Result, Record *CurRec); @@ -256,6 +262,7 @@ private: // Parser methods. RecTy *ParseType(); Init *ParseOperation(Record *CurRec, RecTy *ItemType); Init *ParseOperationSubstr(Record *CurRec, RecTy *ItemType); + Init *ParseOperationFind(Record *CurRec, RecTy *ItemType); Init *ParseOperationForEachFilter(Record *CurRec, RecTy *ItemType); Init *ParseOperationCond(Record *CurRec, RecTy *ItemType); RecTy *ParseOperatorType(); @@ -264,8 +271,8 @@ private: // Parser methods. MultiClass *ParseMultiClassID(); bool ApplyLetStack(Record *CurRec); bool ApplyLetStack(RecordsEntry &Entry); - void CheckAssert(SMLoc Loc, Init *Condition, Init *Message); - void CheckRecordAsserts(Record &Rec); + bool CheckTemplateArgValues(SmallVectorImpl<llvm::Init *> &Values, + SMLoc Loc, Record *ArgsRec); }; } // end namespace llvm |