Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/ILCompiler.Compiler/src/Compiler/CoreRTNameMangler.cs')
-rw-r--r--src/ILCompiler.Compiler/src/Compiler/CoreRTNameMangler.cs39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/ILCompiler.Compiler/src/Compiler/CoreRTNameMangler.cs b/src/ILCompiler.Compiler/src/Compiler/CoreRTNameMangler.cs
index 86cac8dc0..8c5636c21 100644
--- a/src/ILCompiler.Compiler/src/Compiler/CoreRTNameMangler.cs
+++ b/src/ILCompiler.Compiler/src/Compiler/CoreRTNameMangler.cs
@@ -331,7 +331,13 @@ namespace ILCompiler
}
else
{
+ // This is a type definition. Since we didn't fall in the `is EcmaType` case above,
+ // it's likely a compiler-generated type.
mangledName = SanitizeName(((DefType)type).GetFullName(), true);
+
+ // Always generate a fully qualified name
+ if (_mangleForCplusPlus)
+ mangledName = "::" + mangledName;
}
break;
}
@@ -404,6 +410,35 @@ namespace ILCompiler
return sb.ToUtf8String();
}
+ private Utf8String GetPrefixMangledSignatureName(IPrefixMangledSignature prefixMangledSignature)
+ {
+ Utf8StringBuilder sb = new Utf8StringBuilder();
+ sb.Append(EnterNameScopeSequence).Append(prefixMangledSignature.Prefix).Append(ExitNameScopeSequence);
+
+ var signature = prefixMangledSignature.BaseSignature;
+ sb.Append(signature.Flags.ToStringInvariant());
+
+ sb.Append(EnterNameScopeSequence);
+
+ string sigRetTypeName = GetMangledTypeName(signature.ReturnType);
+ if (_mangleForCplusPlus)
+ sigRetTypeName = sigRetTypeName.Replace("::", "_");
+ sb.Append(sigRetTypeName);
+
+ for (int i = 0; i < signature.Length; i++)
+ {
+ sb.Append("__");
+ string sigArgName = GetMangledTypeName(signature[i]);
+ if (_mangleForCplusPlus)
+ sigArgName = sigArgName.Replace("::", "_");
+ sb.Append(sigArgName);
+ }
+
+ sb.Append(ExitNameScopeSequence);
+
+ return sb.ToUtf8String();
+ }
+
private Utf8String GetPrefixMangledMethodName(IPrefixMangledMethod prefixMangledMetod)
{
Utf8StringBuilder sb = new Utf8StringBuilder();
@@ -491,6 +526,10 @@ namespace ILCompiler
{
utf8MangledName = GetPrefixMangledTypeName((IPrefixMangledType)method);
}
+ else if (method is IPrefixMangledSignature)
+ {
+ utf8MangledName = GetPrefixMangledSignatureName((IPrefixMangledSignature)method);
+ }
else
{
// Assume that Name is unique for all other methods