Просмотр исходного кода

Fixed ccompat mangling un-uniquing generic type names

Brian Fiete 5 лет назад
Родитель
Сommit
0631bb2ca8
1 измененных файлов с 7 добавлено и 1 удалено
  1. 7 1
      IDEHelper/Compiler/BfMangler.cpp

+ 7 - 1
IDEHelper/Compiler/BfMangler.cpp

@@ -1794,6 +1794,7 @@ void BfMSMangler::Mangle(StringImpl& name, bool is64Bit, BfMethodInstance* metho
 					else if (constant->mInt32 == 2) // CPP
 					{
 						mangleContext.mCPPMangle = true;
+						mangleContext.mCCompat = true;
 					}
 				}
 			}
@@ -2046,7 +2047,12 @@ void BfMSMangler::Mangle(StringImpl& name, bool is64Bit, BfMethodInstance* metho
 	if (methodInst->GetExplicitInterface() != NULL)
 		Mangle(mangleContext, name, methodInst->GetExplicitInterface(), true);
 	
-	Mangle(mangleContext, name, methodInst->GetOwner(), true);
+	///
+	{
+		// Only use CCompat for params, not for the owning type name - unless we're doing an explicit CPP mangle
+		SetAndRestoreValue<bool> prevCCompat(mangleContext.mCCompat, (mangleContext.mCCompat && mangleContext.mCPPMangle) ? true : false);
+		Mangle(mangleContext, name, methodInst->GetOwner(), true);
+	}
 
 	/*bool isCppDecl = false;
 	if (!isCppDecl)