C++: Include primitive types in reserved name list

This commit is contained in:
Katy Coe
2020-10-07 05:49:06 +02:00
parent 0c983fcebd
commit 9746a6f4a8
2 changed files with 14 additions and 12 deletions

View File

@@ -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<T> MakeNamer<T>(Namer<T>.KeyFunc keyFunc) {
return new Namer<T>(this, keyFunc);

View File

@@ -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("");