diff --git a/Il2CppInspector.Common/Cpp/CppNamespace.cs b/Il2CppInspector.Common/Cpp/CppNamespace.cs index 9a0cbe3..47d42f9 100644 --- a/Il2CppInspector.Common/Cpp/CppNamespace.cs +++ b/Il2CppInspector.Common/Cpp/CppNamespace.cs @@ -7,7 +7,6 @@ using System; using System.Collections.Generic; -using System.Text; namespace Il2CppInspector.Cpp { @@ -31,6 +30,14 @@ namespace Il2CppInspector.Cpp renameCount[name] = 0; } + // Try to mark a name as reserved without assigning an object to it (e.g. for keywords and built-in names) + public bool TryReserveName(string name) { + if (renameCount.ContainsKey(name)) + return false; + renameCount[name] = 0; + return true; + } + // Create a Namer object which will give names to objects of type T which are unique within this namespace public Namer MakeNamer(Namer.KeyFunc keyFunc) { return new Namer(this, keyFunc); diff --git a/Il2CppInspector.Common/Cpp/CppTypeCollection.cs b/Il2CppInspector.Common/Cpp/CppTypeCollection.cs index d6c55a4..90f7d9b 100644 --- a/Il2CppInspector.Common/Cpp/CppTypeCollection.cs +++ b/Il2CppInspector.Common/Cpp/CppTypeCollection.cs @@ -577,29 +577,24 @@ namespace Il2CppInspector.Cpp cppTypes.SetGroup("il2cpp"); // Add junk from config files we haven't included + // TODO: Remove these two lines when resolving #79 cppTypes.TypedefAliases.Add("Il2CppIManagedObjectHolder", cppTypes["void"].AsPointer(wordSize)); cppTypes.TypedefAliases.Add("Il2CppIUnknown", cppTypes["void"].AsPointer(wordSize)); var headers = header.GetTypeHeaderText(wordSize); cppTypes.AddFromDeclarationText(headers); - // Don't allow any of the header type names to be re-used; ignore primitive types - foreach (var type in cppTypes.GetTypeGroup("il2cpp")) - declGen?.TypeNamespace.ReserveName(type.Name); - - foreach (var typedef in cppTypes.GetTypedefGroup("il2cpp")) - declGen?.GlobalsNamespace.ReserveName(typedef.Name); - cppTypes.SetGroup("il2cpp-api"); var apis = header.GetAPIHeaderTypedefText(); cppTypes.AddFromDeclarationText(apis); - foreach (var type in cppTypes.GetTypeGroup("il2cpp-api")) - declGen?.TypeNamespace.ReserveName(type.Name); + // Don't allow any of the header type names or primitive type names to be re-used + foreach (var type in cppTypes.Types.Values) + declGen?.TypeNamespace.TryReserveName(type.Name); - foreach (var typedef in cppTypes.GetTypedefGroup("il2cpp-api")) - declGen?.GlobalsNamespace.ReserveName(typedef.Name); + foreach (var typedef in cppTypes.TypedefAliases.Values) + declGen?.GlobalsNamespace.TryReserveName(typedef.Name); cppTypes.SetGroup("");