Mangle constructor name
This commit is contained in:
parent
07323b12f9
commit
d8f31b170d
|
@ -421,7 +421,7 @@ Declaration* Parser::ParseStructDeclaration(uint64 flags, DecType dt)
|
||||||
AddDefaultConstructors(pthis);
|
AddDefaultConstructors(pthis);
|
||||||
|
|
||||||
// Lookup constructors, have same name as class
|
// Lookup constructors, have same name as class
|
||||||
Declaration* cdec = dec->mScope->Lookup(dec->mIdent, SLEVEL_SCOPE);
|
Declaration* cdec = dec->mScope->Lookup(dec->mIdent->PreMangle("+"), SLEVEL_SCOPE);
|
||||||
while (cdec)
|
while (cdec)
|
||||||
{
|
{
|
||||||
if (cdec->mFlags & DTF_DEFINED)
|
if (cdec->mFlags & DTF_DEFINED)
|
||||||
|
@ -1420,7 +1420,7 @@ Expression* Parser::ParseInitExpression(Declaration* dtype)
|
||||||
|
|
||||||
Expression* Parser::BuildMemberInitializer(Expression* vexp)
|
Expression* Parser::BuildMemberInitializer(Expression* vexp)
|
||||||
{
|
{
|
||||||
Declaration* fcons = (vexp->mDecType->mType == DT_TYPE_STRUCT && vexp->mDecType->mScope) ? vexp->mDecType->mScope->Lookup(vexp->mDecType->mIdent) : nullptr;
|
Declaration* fcons = (vexp->mDecType->mType == DT_TYPE_STRUCT && vexp->mDecType->mScope) ? vexp->mDecType->mScope->Lookup(vexp->mDecType->mIdent->PreMangle("+")) : nullptr;
|
||||||
|
|
||||||
if (fcons)
|
if (fcons)
|
||||||
{
|
{
|
||||||
|
@ -1734,15 +1734,13 @@ void Parser::AddDefaultConstructors(Declaration* pthis)
|
||||||
bool inlineDestructor = true;
|
bool inlineDestructor = true;
|
||||||
bool inlineConstructor = true;
|
bool inlineConstructor = true;
|
||||||
|
|
||||||
char dname[100];
|
|
||||||
strcpy_s(dname, "~");
|
|
||||||
strcat_s(dname, pthis->mBase->mIdent->mString);
|
|
||||||
|
|
||||||
const Ident * dtorident = Ident::Unique(dname);
|
const Ident* dtorident = pthis->mBase->mIdent->PreMangle("~");;
|
||||||
|
const Ident* ctorident = pthis->mBase->mIdent->PreMangle("+");;
|
||||||
|
|
||||||
// Extract constructor and destructor from scope
|
// Extract constructor and destructor from scope
|
||||||
|
|
||||||
Declaration* cdec = pthis->mBase->mScope->Lookup(pthis->mBase->mIdent, SLEVEL_SCOPE);
|
Declaration* cdec = pthis->mBase->mScope->Lookup(ctorident, SLEVEL_SCOPE);
|
||||||
while (cdec)
|
while (cdec)
|
||||||
{
|
{
|
||||||
Declaration* ctdec = cdec->mBase;
|
Declaration* ctdec = cdec->mBase;
|
||||||
|
@ -1899,7 +1897,7 @@ void Parser::AddDefaultConstructors(Declaration* pthis)
|
||||||
|
|
||||||
pthis->mBase->mDefaultConstructor = cdec;
|
pthis->mBase->mDefaultConstructor = cdec;
|
||||||
|
|
||||||
cdec->mIdent = pthis->mBase->mIdent;
|
cdec->mIdent = ctorident;
|
||||||
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
||||||
|
|
||||||
AddMemberFunction(pthis->mBase, cdec);
|
AddMemberFunction(pthis->mBase, cdec);
|
||||||
|
@ -1951,7 +1949,7 @@ void Parser::AddDefaultConstructors(Declaration* pthis)
|
||||||
|
|
||||||
pthis->mBase->mCopyConstructor = cdec;
|
pthis->mBase->mCopyConstructor = cdec;
|
||||||
|
|
||||||
cdec->mIdent = pthis->mBase->mIdent;
|
cdec->mIdent = ctorident;
|
||||||
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
||||||
|
|
||||||
AddMemberFunction(pthis->mBase, cdec);
|
AddMemberFunction(pthis->mBase, cdec);
|
||||||
|
@ -2288,7 +2286,7 @@ void Parser::AddDefaultConstructors(Declaration* pthis)
|
||||||
|
|
||||||
pthis->mBase->mVectorConstructor = cdec;
|
pthis->mBase->mVectorConstructor = cdec;
|
||||||
|
|
||||||
cdec->mIdent = pthis->mBase->mIdent;
|
cdec->mIdent = ctorident;
|
||||||
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
||||||
|
|
||||||
cdec->mCompilerOptions = mCompilerOptions;
|
cdec->mCompilerOptions = mCompilerOptions;
|
||||||
|
@ -2364,10 +2362,7 @@ void Parser::AddDefaultConstructors(Declaration* pthis)
|
||||||
|
|
||||||
pthis->mBase->mVectorDestructor = cdec;
|
pthis->mBase->mVectorDestructor = cdec;
|
||||||
|
|
||||||
char dname[100];
|
cdec->mIdent = dtorident;
|
||||||
strcpy_s(dname, "~");
|
|
||||||
strcat_s(dname, pthis->mBase->mIdent->mString);
|
|
||||||
cdec->mIdent = Ident::Unique(dname);
|
|
||||||
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
||||||
|
|
||||||
cdec->mCompilerOptions = mCompilerOptions;
|
cdec->mCompilerOptions = mCompilerOptions;
|
||||||
|
@ -2452,7 +2447,7 @@ void Parser::AddDefaultConstructors(Declaration* pthis)
|
||||||
|
|
||||||
pthis->mBase->mVectorCopyConstructor = cdec;
|
pthis->mBase->mVectorCopyConstructor = cdec;
|
||||||
|
|
||||||
cdec->mIdent = pthis->mBase->mIdent;
|
cdec->mIdent = ctorident;
|
||||||
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
||||||
|
|
||||||
cdec->mCompilerOptions = mCompilerOptions;
|
cdec->mCompilerOptions = mCompilerOptions;
|
||||||
|
@ -2553,7 +2548,7 @@ void Parser::AddDefaultConstructors(Declaration* pthis)
|
||||||
|
|
||||||
pthis->mBase->mVectorCopyAssignment = cdec;
|
pthis->mBase->mVectorCopyAssignment = cdec;
|
||||||
|
|
||||||
cdec->mIdent = pthis->mBase->mIdent;
|
cdec->mIdent = ctorident;
|
||||||
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
||||||
|
|
||||||
cdec->mCompilerOptions = mCompilerOptions;
|
cdec->mCompilerOptions = mCompilerOptions;
|
||||||
|
@ -3001,7 +2996,7 @@ void Parser::ParseVariableInit(Declaration* ndec)
|
||||||
else
|
else
|
||||||
mScanner->NextToken();
|
mScanner->NextToken();
|
||||||
|
|
||||||
Declaration* fcons = ndec->mBase->mScope ? ndec->mBase->mScope->Lookup(ndec->mBase->mIdent, SLEVEL_CLASS) : nullptr;
|
Declaration* fcons = ndec->mBase->mScope ? ndec->mBase->mScope->Lookup(ndec->mBase->mIdent->PreMangle("+"), SLEVEL_CLASS) : nullptr;
|
||||||
|
|
||||||
if (fcons)
|
if (fcons)
|
||||||
{
|
{
|
||||||
|
@ -3225,10 +3220,7 @@ Declaration* Parser::ParseDeclaration(Declaration * pdec, bool variable, bool ex
|
||||||
if (mCompilerOptions & COPT_NATIVE)
|
if (mCompilerOptions & COPT_NATIVE)
|
||||||
cdec->mFlags |= DTF_NATIVE;
|
cdec->mFlags |= DTF_NATIVE;
|
||||||
|
|
||||||
char dname[100];
|
cdec->mIdent = pthis->mBase->mIdent->PreMangle("~");
|
||||||
strcpy_s(dname, "~");
|
|
||||||
strcat_s(dname, pthis->mBase->mIdent->mString);
|
|
||||||
cdec->mIdent = Ident::Unique(dname);
|
|
||||||
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
||||||
|
|
||||||
if (mScanner->mToken == TK_OPEN_BRACE)
|
if (mScanner->mToken == TK_OPEN_BRACE)
|
||||||
|
@ -3314,7 +3306,7 @@ Declaration* Parser::ParseDeclaration(Declaration * pdec, bool variable, bool ex
|
||||||
if (mCompilerOptions & COPT_NATIVE)
|
if (mCompilerOptions & COPT_NATIVE)
|
||||||
cdec->mFlags |= DTF_NATIVE;
|
cdec->mFlags |= DTF_NATIVE;
|
||||||
|
|
||||||
Declaration* pdec = pthis->mBase->mScope ? pthis->mBase->mScope->Lookup(pthis->mBase->mIdent, SLEVEL_CLASS) : nullptr;
|
Declaration* pdec = pthis->mBase->mScope ? pthis->mBase->mScope->Lookup(pthis->mBase->mIdent->PreMangle("+"), SLEVEL_CLASS) : nullptr;
|
||||||
if (pdec)
|
if (pdec)
|
||||||
{
|
{
|
||||||
while (pdec && !cdec->mBase->IsSameParams(pdec->mBase))
|
while (pdec && !cdec->mBase->IsSameParams(pdec->mBase))
|
||||||
|
@ -3348,7 +3340,7 @@ Declaration* Parser::ParseDeclaration(Declaration * pdec, bool variable, bool ex
|
||||||
cdec = pdec;
|
cdec = pdec;
|
||||||
}
|
}
|
||||||
|
|
||||||
cdec->mIdent = pthis->mBase->mIdent;
|
cdec->mIdent = pthis->mBase->mIdent->PreMangle("+");
|
||||||
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
cdec->mQualIdent = pthis->mBase->mScope->Mangle(cdec->mIdent);
|
||||||
|
|
||||||
// Initializer list
|
// Initializer list
|
||||||
|
@ -3396,7 +3388,7 @@ Declaration* Parser::ParseDeclaration(Declaration * pdec, bool variable, bool ex
|
||||||
|
|
||||||
PrependThisArgument(ctdec, bthis);
|
PrependThisArgument(ctdec, bthis);
|
||||||
|
|
||||||
Declaration* cdec = bdec->mScope->Lookup(bdec->mIdent, SLEVEL_CLASS);
|
Declaration* cdec = bdec->mScope->Lookup(bdec->mIdent->PreMangle("+"), SLEVEL_CLASS);
|
||||||
if (cdec)
|
if (cdec)
|
||||||
{
|
{
|
||||||
while (cdec && !cdec->mBase->IsSameParams(ctdec))
|
while (cdec && !cdec->mBase->IsSameParams(ctdec))
|
||||||
|
@ -4855,7 +4847,11 @@ Expression* Parser::ParsePostfixExpression(bool lhs)
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (ConsumeTokenIf(TK_OPEN_BRACKET))
|
if (ConsumeTokenIf(TK_COLCOLON))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (ConsumeTokenIf(TK_OPEN_BRACKET))
|
||||||
{
|
{
|
||||||
Expression* nexp = new Expression(mScanner->mLocation, EX_INDEX);
|
Expression* nexp = new Expression(mScanner->mLocation, EX_INDEX);
|
||||||
nexp->mLeft = exp;
|
nexp->mLeft = exp;
|
||||||
|
@ -4899,7 +4895,7 @@ Expression* Parser::ParsePostfixExpression(bool lhs)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Declaration* fcons = exp->mDecType->mScope ? exp->mDecType->mScope->Lookup(exp->mDecType->mIdent) : nullptr;
|
Declaration* fcons = exp->mDecType->mScope ? exp->mDecType->mScope->Lookup(exp->mDecType->mIdent->PreMangle("+")) : nullptr;
|
||||||
if (fcons)
|
if (fcons)
|
||||||
{
|
{
|
||||||
Declaration* tdec = new Declaration(mScanner->mLocation, DT_VARIABLE);
|
Declaration* tdec = new Declaration(mScanner->mLocation, DT_VARIABLE);
|
||||||
|
@ -5253,7 +5249,7 @@ Expression* Parser::ParsePrefixExpression(bool lhs)
|
||||||
{
|
{
|
||||||
pexp = ParseListExpression(false);
|
pexp = ParseListExpression(false);
|
||||||
|
|
||||||
mdec = dec->mScope->Lookup(dec->mIdent);
|
mdec = dec->mScope->Lookup(dec->mIdent->PreMangle("+"));
|
||||||
|
|
||||||
ConsumeToken(TK_CLOSE_PARENTHESIS);
|
ConsumeToken(TK_CLOSE_PARENTHESIS);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue