@@ -34,7 +34,7 @@ namespace llvm {
34
34
35
35
struct SubClassReference {
36
36
SMRange RefRange;
37
- Record *Rec = nullptr ;
37
+ const Record *Rec = nullptr ;
38
38
SmallVector<ArgumentInit *, 4 > TemplateArgs;
39
39
40
40
SubClassReference () = default ;
@@ -110,15 +110,15 @@ static void checkConcrete(Record &R) {
110
110
111
111
// / Return an Init with a qualifier prefix referring
112
112
// / to CurRec's name.
113
- static Init *QualifyName (Record &CurRec, Init *Name) {
113
+ static Init *QualifyName (const Record &CurRec, Init *Name) {
114
114
RecordKeeper &RK = CurRec.getRecords ();
115
115
Init *NewName = BinOpInit::getStrConcat (
116
116
CurRec.getNameInit (),
117
117
StringInit::get (RK, CurRec.isMultiClass () ? " ::" : " :" ));
118
118
NewName = BinOpInit::getStrConcat (NewName, Name);
119
119
120
120
if (BinOpInit *BinOp = dyn_cast<BinOpInit>(NewName))
121
- NewName = BinOp->Fold (&CurRec);
121
+ NewName = BinOp->Fold (const_cast <Record *>( &CurRec) );
122
122
return NewName;
123
123
}
124
124
@@ -127,7 +127,7 @@ static Init *QualifyName(MultiClass *MC, Init *Name) {
127
127
}
128
128
129
129
// / Return the qualified version of the implicit 'NAME' template argument.
130
- static Init *QualifiedNameOfImplicitName (Record &Rec) {
130
+ static Init *QualifiedNameOfImplicitName (const Record &Rec) {
131
131
return QualifyName (Rec, StringInit::get (Rec.getRecords (), " NAME" ));
132
132
}
133
133
@@ -296,7 +296,7 @@ bool TGParser::SetValue(Record *CurRec, SMLoc Loc, Init *ValName,
296
296
// / AddSubClass - Add SubClass as a subclass to CurRec, resolving its template
297
297
// / args as SubClass's template arguments.
298
298
bool TGParser::AddSubClass (Record *CurRec, SubClassReference &SubClass) {
299
- Record *SC = SubClass.Rec ;
299
+ const Record *SC = SubClass.Rec ;
300
300
MapResolver R (CurRec);
301
301
302
302
// Loop over all the subclass record's fields. Add regular fields to the new
@@ -586,8 +586,9 @@ bool TGParser::addDefOne(std::unique_ptr<Record> Rec) {
586
586
return false ;
587
587
}
588
588
589
- bool TGParser::resolveArguments (Record *Rec, ArrayRef<ArgumentInit *> ArgValues,
590
- SMLoc Loc, ArgValueHandler ArgValueHandler) {
589
+ bool TGParser::resolveArguments (const Record *Rec,
590
+ ArrayRef<ArgumentInit *> ArgValues, SMLoc Loc,
591
+ ArgValueHandler ArgValueHandler) {
591
592
ArrayRef<Init *> ArgNames = Rec->getTemplateArgs ();
592
593
assert (ArgValues.size () <= ArgNames.size () &&
593
594
" Too many template arguments allowed" );
@@ -629,7 +630,7 @@ bool TGParser::resolveArguments(Record *Rec, ArrayRef<ArgumentInit *> ArgValues,
629
630
630
631
// / Resolve the arguments of class and set them to MapResolver.
631
632
// / Returns true if failed.
632
- bool TGParser::resolveArgumentsOfClass (MapResolver &R, Record *Rec,
633
+ bool TGParser::resolveArgumentsOfClass (MapResolver &R, const Record *Rec,
633
634
ArrayRef<ArgumentInit *> ArgValues,
634
635
SMLoc Loc) {
635
636
return resolveArguments (Rec, ArgValues, Loc,
@@ -704,13 +705,13 @@ Init *TGParser::ParseObjectName(MultiClass *CurMultiClass) {
704
705
// /
705
706
// / ClassID ::= ID
706
707
// /
707
- Record *TGParser::ParseClassID () {
708
+ const Record *TGParser::ParseClassID () {
708
709
if (Lex.getCode () != tgtok::Id) {
709
710
TokError (" expected name for ClassID" );
710
711
return nullptr ;
711
712
}
712
713
713
- Record *Result = Records.getClass (Lex.getCurStrVal ());
714
+ const Record *Result = Records.getClass (Lex.getCurStrVal ());
714
715
if (!Result) {
715
716
std::string Msg (" Couldn't find class '" + Lex.getCurStrVal () + " '" );
716
717
if (MultiClasses[Lex.getCurStrVal ()].get ())
@@ -2699,7 +2700,7 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, const RecTy *ItemType,
2699
2700
// Value ::= CLASSID '<' ArgValueList '>' (CLASSID has been consumed)
2700
2701
// This is supposed to synthesize a new anonymous definition, deriving
2701
2702
// from the class with the template arguments, but no body.
2702
- Record *Class = Records.getClass (Name->getValue ());
2703
+ const Record *Class = Records.getClass (Name->getValue ());
2703
2704
if (!Class) {
2704
2705
Error (NameLoc.Start ,
2705
2706
" Expected a class name, got '" + Name->getValue () + " '" );
@@ -3185,7 +3186,8 @@ void TGParser::ParseValueList(SmallVectorImpl<Init *> &Result, Record *CurRec,
3185
3186
// PostionalArgValueList ::= [Value {',' Value}*]
3186
3187
// NamedArgValueList ::= [NameValue '=' Value {',' NameValue '=' Value}*]
3187
3188
bool TGParser::ParseTemplateArgValueList (
3188
- SmallVectorImpl<ArgumentInit *> &Result, Record *CurRec, Record *ArgsRec) {
3189
+ SmallVectorImpl<ArgumentInit *> &Result, Record *CurRec,
3190
+ const Record *ArgsRec) {
3189
3191
assert (Result.empty () && " Result vector is not empty" );
3190
3192
ArrayRef<Init *> TArgs = ArgsRec->getTemplateArgs ();
3191
3193
@@ -3978,7 +3980,7 @@ bool TGParser::ParseClass() {
3978
3980
return TokError (" expected class name after 'class' keyword" );
3979
3981
3980
3982
const std::string &Name = Lex.getCurStrVal ();
3981
- Record *CurRec = Records.getClass (Name);
3983
+ Record *CurRec = const_cast <Record *>( Records.getClass (Name) );
3982
3984
if (CurRec) {
3983
3985
// If the body was previously defined, this is an error.
3984
3986
if (!CurRec->getValues ().empty () ||
@@ -4399,7 +4401,8 @@ bool TGParser::ParseFile() {
4399
4401
// If necessary, replace an argument with a cast to the required type.
4400
4402
// The argument count has already been checked.
4401
4403
bool TGParser::CheckTemplateArgValues (
4402
- SmallVectorImpl<llvm::ArgumentInit *> &Values, SMLoc Loc, Record *ArgsRec) {
4404
+ SmallVectorImpl<llvm::ArgumentInit *> &Values, SMLoc Loc,
4405
+ const Record *ArgsRec) {
4403
4406
ArrayRef<Init *> TArgs = ArgsRec->getTemplateArgs ();
4404
4407
4405
4408
for (llvm::ArgumentInit *&Value : Values) {
@@ -4409,7 +4412,7 @@ bool TGParser::CheckTemplateArgValues(
4409
4412
if (Value->isNamed ())
4410
4413
ArgName = Value->getName ();
4411
4414
4412
- RecordVal *Arg = ArgsRec->getValue (ArgName);
4415
+ const RecordVal *Arg = ArgsRec->getValue (ArgName);
4413
4416
const RecTy *ArgType = Arg->getType ();
4414
4417
4415
4418
if (TypedInit *ArgValue = dyn_cast<TypedInit>(Value->getValue ())) {
0 commit comments