mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-27 15:41:46 +00:00
Allocate template parameter lists for out-of-line definitions via the
ASTContext rather than via the normal heap. llvm-svn: 106008
This commit is contained in:
parent
de94e66234
commit
20527e2c83
@ -385,10 +385,12 @@ struct QualifierInfo {
|
||||
: NNS(0), NNSRange(), NumTemplParamLists(0), TemplParamLists(0) {}
|
||||
/// setTemplateParameterListsInfo - Sets info about matched template
|
||||
/// parameter lists.
|
||||
void setTemplateParameterListsInfo(unsigned NumTPLists,
|
||||
void setTemplateParameterListsInfo(ASTContext &Context,
|
||||
unsigned NumTPLists,
|
||||
TemplateParameterList **TPLists);
|
||||
/// Destructor: frees the array of template parameter lists pointers.
|
||||
~QualifierInfo() { delete[] TemplParamLists; }
|
||||
|
||||
void Destroy(ASTContext &Context);
|
||||
|
||||
private:
|
||||
// Copy constructor and copy assignment are disabled.
|
||||
QualifierInfo(const QualifierInfo&);
|
||||
@ -447,9 +449,9 @@ public:
|
||||
assert(index < getNumTemplateParameterLists());
|
||||
return getExtInfo()->TemplParamLists[index];
|
||||
}
|
||||
void setTemplateParameterListsInfo(unsigned NumTPLists,
|
||||
void setTemplateParameterListsInfo(ASTContext &Context, unsigned NumTPLists,
|
||||
TemplateParameterList **TPLists) {
|
||||
getExtInfo()->setTemplateParameterListsInfo(NumTPLists, TPLists);
|
||||
getExtInfo()->setTemplateParameterListsInfo(Context, NumTPLists, TPLists);
|
||||
}
|
||||
|
||||
SourceLocation getTypeSpecStartLoc() const;
|
||||
@ -1887,9 +1889,9 @@ public:
|
||||
assert(i < getNumTemplateParameterLists());
|
||||
return getExtInfo()->TemplParamLists[i];
|
||||
}
|
||||
void setTemplateParameterListsInfo(unsigned NumTPLists,
|
||||
void setTemplateParameterListsInfo(ASTContext &Context, unsigned NumTPLists,
|
||||
TemplateParameterList **TPLists) {
|
||||
getExtInfo()->setTemplateParameterListsInfo(NumTPLists, TPLists);
|
||||
getExtInfo()->setTemplateParameterListsInfo(Context, NumTPLists, TPLists);
|
||||
}
|
||||
|
||||
// Implement isa/cast/dyncast/etc.
|
||||
|
@ -567,7 +567,8 @@ void DeclaratorDecl::setQualifierInfo(NestedNameSpecifier *Qualifier,
|
||||
}
|
||||
|
||||
void
|
||||
QualifierInfo::setTemplateParameterListsInfo(unsigned NumTPLists,
|
||||
QualifierInfo::setTemplateParameterListsInfo(ASTContext &Context,
|
||||
unsigned NumTPLists,
|
||||
TemplateParameterList **TPLists) {
|
||||
assert((NumTPLists == 0 || TPLists != 0) &&
|
||||
"Empty array of template parameters with positive size!");
|
||||
@ -576,19 +577,25 @@ QualifierInfo::setTemplateParameterListsInfo(unsigned NumTPLists,
|
||||
|
||||
// Free previous template parameters (if any).
|
||||
if (NumTemplParamLists > 0) {
|
||||
delete[] TemplParamLists;
|
||||
Context.Deallocate(TemplParamLists);
|
||||
TemplParamLists = 0;
|
||||
NumTemplParamLists = 0;
|
||||
}
|
||||
// Set info on matched template parameter lists (if any).
|
||||
if (NumTPLists > 0) {
|
||||
TemplParamLists = new TemplateParameterList*[NumTPLists];
|
||||
TemplParamLists = new (Context) TemplateParameterList*[NumTPLists];
|
||||
NumTemplParamLists = NumTPLists;
|
||||
for (unsigned i = NumTPLists; i-- > 0; )
|
||||
TemplParamLists[i] = TPLists[i];
|
||||
}
|
||||
}
|
||||
|
||||
void QualifierInfo::Destroy(ASTContext &Context) {
|
||||
// FIXME: Deallocate template parameter lists themselves!
|
||||
if (TemplParamLists)
|
||||
Context.Deallocate(TemplParamLists);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// VarDecl Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -2573,7 +2573,8 @@ Sema::ActOnVariableDeclarator(Scope* S, Declarator& D, DeclContext* DC,
|
||||
SetNestedNameSpecifier(NewVD, D);
|
||||
|
||||
if (NumMatchedTemplateParamLists > 0) {
|
||||
NewVD->setTemplateParameterListsInfo(NumMatchedTemplateParamLists,
|
||||
NewVD->setTemplateParameterListsInfo(Context,
|
||||
NumMatchedTemplateParamLists,
|
||||
(TemplateParameterList**)TemplateParamLists.release());
|
||||
}
|
||||
|
||||
@ -3151,7 +3152,8 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
|
||||
}
|
||||
|
||||
if (NumMatchedTemplateParamLists > 0) {
|
||||
NewFD->setTemplateParameterListsInfo(NumMatchedTemplateParamLists,
|
||||
NewFD->setTemplateParameterListsInfo(Context,
|
||||
NumMatchedTemplateParamLists,
|
||||
(TemplateParameterList**)TemplateParamLists.release());
|
||||
}
|
||||
|
||||
@ -5412,7 +5414,8 @@ CreateNewDecl:
|
||||
= static_cast<NestedNameSpecifier*>(SS.getScopeRep());
|
||||
New->setQualifierInfo(NNS, SS.getRange());
|
||||
if (NumMatchedTemplateParamLists > 0) {
|
||||
New->setTemplateParameterListsInfo(NumMatchedTemplateParamLists,
|
||||
New->setTemplateParameterListsInfo(Context,
|
||||
NumMatchedTemplateParamLists,
|
||||
(TemplateParameterList**) TemplateParameterLists.release());
|
||||
}
|
||||
}
|
||||
|
@ -3868,7 +3868,8 @@ Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec,
|
||||
SequenceNumber);
|
||||
SetNestedNameSpecifier(Partial, SS);
|
||||
if (NumMatchedTemplateParamLists > 0) {
|
||||
Partial->setTemplateParameterListsInfo(NumMatchedTemplateParamLists,
|
||||
Partial->setTemplateParameterListsInfo(Context,
|
||||
NumMatchedTemplateParamLists,
|
||||
(TemplateParameterList**) TemplateParameterLists.release());
|
||||
}
|
||||
|
||||
@ -3929,8 +3930,8 @@ Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec,
|
||||
PrevDecl);
|
||||
SetNestedNameSpecifier(Specialization, SS);
|
||||
if (NumMatchedTemplateParamLists > 0) {
|
||||
Specialization->setTemplateParameterListsInfo(
|
||||
NumMatchedTemplateParamLists,
|
||||
Specialization->setTemplateParameterListsInfo(Context,
|
||||
NumMatchedTemplateParamLists,
|
||||
(TemplateParameterList**) TemplateParameterLists.release());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user