From 375307822e5070dca468e86fbd638c46f178c564 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Wed, 22 May 2024 22:44:53 +0200 Subject: [PATCH] Fix auto template expansion of class constructor --- oscar64/Parser.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/oscar64/Parser.cpp b/oscar64/Parser.cpp index 56cba90..bab9d8e 100644 --- a/oscar64/Parser.cpp +++ b/oscar64/Parser.cpp @@ -4077,6 +4077,9 @@ Declaration* Parser::ParseDeclaration(Declaration * pdec, bool variable, bool ex cdec->mFlags |= DTF_DEFINED | DTF_REQUEST_INLINE; cdec->mNumVars = mLocalIndex; + + if (ptempl) + PrependMemberConstructor(pthis, cdec); } return dec; @@ -10168,8 +10171,28 @@ void Parser::ParseTemplateDeclarationBody(Declaration * tdec, Declaration * pthi } else { - adec = ParsePostfixDeclaration(); - adec = ReverseDeclaration(adec, bdec); + 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 = ReverseDeclaration(adec, bdec); + } } mTemplateScope = tdec->mScope->mParent;