@@ -34,7 +34,7 @@ namespace llvm {
3434
3535struct SubClassReference {
3636 SMRange RefRange;
37- Record *Rec = nullptr ;
37+ const Record *Rec = nullptr ;
3838 SmallVector<ArgumentInit *, 4 > TemplateArgs;
3939
4040 SubClassReference () = default ;
@@ -110,15 +110,15 @@ static void checkConcrete(Record &R) {
110110
111111// / Return an Init with a qualifier prefix referring
112112// / to CurRec's name.
113- static Init *QualifyName (Record &CurRec, Init *Name) {
113+ static Init *QualifyName (const Record &CurRec, Init *Name) {
114114 RecordKeeper &RK = CurRec.getRecords ();
115115 Init *NewName = BinOpInit::getStrConcat (
116116 CurRec.getNameInit (),
117117 StringInit::get (RK, CurRec.isMultiClass () ? " ::" : " :" ));
118118 NewName = BinOpInit::getStrConcat (NewName, Name);
119119
120120 if (BinOpInit *BinOp = dyn_cast<BinOpInit>(NewName))
121- NewName = BinOp->Fold (&CurRec);
121+ NewName = BinOp->Fold (const_cast <Record *>( &CurRec) );
122122 return NewName;
123123}
124124
@@ -127,7 +127,7 @@ static Init *QualifyName(MultiClass *MC, Init *Name) {
127127}
128128
129129// / Return the qualified version of the implicit 'NAME' template argument.
130- static Init *QualifiedNameOfImplicitName (Record &Rec) {
130+ static Init *QualifiedNameOfImplicitName (const Record &Rec) {
131131 return QualifyName (Rec, StringInit::get (Rec.getRecords (), " NAME" ));
132132}
133133
@@ -296,7 +296,7 @@ bool TGParser::SetValue(Record *CurRec, SMLoc Loc, Init *ValName,
296296// / AddSubClass - Add SubClass as a subclass to CurRec, resolving its template
297297// / args as SubClass's template arguments.
298298bool TGParser::AddSubClass (Record *CurRec, SubClassReference &SubClass) {
299- Record *SC = SubClass.Rec ;
299+ const Record *SC = SubClass.Rec ;
300300 MapResolver R (CurRec);
301301
302302 // 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) {
586586 return false ;
587587}
588588
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) {
591592 ArrayRef<Init *> ArgNames = Rec->getTemplateArgs ();
592593 assert (ArgValues.size () <= ArgNames.size () &&
593594 " Too many template arguments allowed" );
@@ -629,7 +630,7 @@ bool TGParser::resolveArguments(Record *Rec, ArrayRef<ArgumentInit *> ArgValues,
629630
630631// / Resolve the arguments of class and set them to MapResolver.
631632// / Returns true if failed.
632- bool TGParser::resolveArgumentsOfClass (MapResolver &R, Record *Rec,
633+ bool TGParser::resolveArgumentsOfClass (MapResolver &R, const Record *Rec,
633634 ArrayRef<ArgumentInit *> ArgValues,
634635 SMLoc Loc) {
635636 return resolveArguments (Rec, ArgValues, Loc,
@@ -704,13 +705,13 @@ Init *TGParser::ParseObjectName(MultiClass *CurMultiClass) {
704705// /
705706// / ClassID ::= ID
706707// /
707- Record *TGParser::ParseClassID () {
708+ const Record *TGParser::ParseClassID () {
708709 if (Lex.getCode () != tgtok::Id) {
709710 TokError (" expected name for ClassID" );
710711 return nullptr ;
711712 }
712713
713- Record *Result = Records.getClass (Lex.getCurStrVal ());
714+ const Record *Result = Records.getClass (Lex.getCurStrVal ());
714715 if (!Result) {
715716 std::string Msg (" Couldn't find class '" + Lex.getCurStrVal () + " '" );
716717 if (MultiClasses[Lex.getCurStrVal ()].get ())
@@ -2699,7 +2700,7 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, const RecTy *ItemType,
26992700 // Value ::= CLASSID '<' ArgValueList '>' (CLASSID has been consumed)
27002701 // This is supposed to synthesize a new anonymous definition, deriving
27012702 // 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 ());
27032704 if (!Class) {
27042705 Error (NameLoc.Start ,
27052706 " Expected a class name, got '" + Name->getValue () + " '" );
@@ -3185,7 +3186,8 @@ void TGParser::ParseValueList(SmallVectorImpl<Init *> &Result, Record *CurRec,
31853186// PostionalArgValueList ::= [Value {',' Value}*]
31863187// NamedArgValueList ::= [NameValue '=' Value {',' NameValue '=' Value}*]
31873188bool TGParser::ParseTemplateArgValueList (
3188- SmallVectorImpl<ArgumentInit *> &Result, Record *CurRec, Record *ArgsRec) {
3189+ SmallVectorImpl<ArgumentInit *> &Result, Record *CurRec,
3190+ const Record *ArgsRec) {
31893191 assert (Result.empty () && " Result vector is not empty" );
31903192 ArrayRef<Init *> TArgs = ArgsRec->getTemplateArgs ();
31913193
@@ -3978,7 +3980,7 @@ bool TGParser::ParseClass() {
39783980 return TokError (" expected class name after 'class' keyword" );
39793981
39803982 const std::string &Name = Lex.getCurStrVal ();
3981- Record *CurRec = Records.getClass (Name);
3983+ Record *CurRec = const_cast <Record *>( Records.getClass (Name) );
39823984 if (CurRec) {
39833985 // If the body was previously defined, this is an error.
39843986 if (!CurRec->getValues ().empty () ||
@@ -4399,7 +4401,8 @@ bool TGParser::ParseFile() {
43994401// If necessary, replace an argument with a cast to the required type.
44004402// The argument count has already been checked.
44014403bool TGParser::CheckTemplateArgValues (
4402- SmallVectorImpl<llvm::ArgumentInit *> &Values, SMLoc Loc, Record *ArgsRec) {
4404+ SmallVectorImpl<llvm::ArgumentInit *> &Values, SMLoc Loc,
4405+ const Record *ArgsRec) {
44034406 ArrayRef<Init *> TArgs = ArgsRec->getTemplateArgs ();
44044407
44054408 for (llvm::ArgumentInit *&Value : Values) {
@@ -4409,7 +4412,7 @@ bool TGParser::CheckTemplateArgValues(
44094412 if (Value->isNamed ())
44104413 ArgName = Value->getName ();
44114414
4412- RecordVal *Arg = ArgsRec->getValue (ArgName);
4415+ const RecordVal *Arg = ArgsRec->getValue (ArgName);
44134416 const RecTy *ArgType = Arg->getType ();
44144417
44154418 if (TypedInit *ArgValue = dyn_cast<TypedInit>(Value->getValue ())) {
0 commit comments