Fix auto template expansion of class constructor
This commit is contained in:
parent
c0152b1ce4
commit
375307822e
|
@ -4077,6 +4077,9 @@ Declaration* Parser::ParseDeclaration(Declaration * pdec, bool variable, bool ex
|
||||||
|
|
||||||
cdec->mFlags |= DTF_DEFINED | DTF_REQUEST_INLINE;
|
cdec->mFlags |= DTF_DEFINED | DTF_REQUEST_INLINE;
|
||||||
cdec->mNumVars = mLocalIndex;
|
cdec->mNumVars = mLocalIndex;
|
||||||
|
|
||||||
|
if (ptempl)
|
||||||
|
PrependMemberConstructor(pthis, cdec);
|
||||||
}
|
}
|
||||||
|
|
||||||
return dec;
|
return dec;
|
||||||
|
@ -10167,10 +10170,30 @@ void Parser::ParseTemplateDeclarationBody(Declaration * tdec, Declaration * pthi
|
||||||
adec->mQualIdent = Ident::Unique(buffer);
|
adec->mQualIdent = Ident::Unique(buffer);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if (bdec && pthis && bdec == pthis->mBase && mScanner->mToken == TK_OPEN_PARENTHESIS)
|
||||||
|
{
|
||||||
|
Declaration* ctdec = ParseFunctionDeclaration(TheVoidTypeDeclaration);
|
||||||
|
|
||||||
|
adec = new Declaration(ctdec->mLocation, DT_CONST_FUNCTION);
|
||||||
|
|
||||||
|
adec->mBase = ctdec;
|
||||||
|
adec->mIdent = pthis->mBase->mIdent->PreMangle("+");
|
||||||
|
adec->mQualIdent = pthis->mBase->mScope->Mangle(adec->mIdent);
|
||||||
|
|
||||||
|
if (ConsumeTokenIf(TK_COLON))
|
||||||
|
{
|
||||||
|
while (mScanner->mToken != TK_OPEN_BRACE)
|
||||||
|
mScanner->NextToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
adec = ParsePostfixDeclaration();
|
adec = ParsePostfixDeclaration();
|
||||||
adec = ReverseDeclaration(adec, bdec);
|
adec = ReverseDeclaration(adec, bdec);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mTemplateScope = tdec->mScope->mParent;
|
mTemplateScope = tdec->mScope->mParent;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue