C++: Handle comma-separated fields
This commit is contained in:
@@ -258,7 +258,7 @@ namespace Il2CppInspector.CppUtils
|
|||||||
var rgxTypedefFnPtr = new Regex(@"typedef\s+(?:struct )?" + fnPtr + ";");
|
var rgxTypedefFnPtr = new Regex(@"typedef\s+(?:struct )?" + fnPtr + ";");
|
||||||
var rgxTypedef = new Regex(@"typedef (\S+?)\s*\**\s*(\S+);");
|
var rgxTypedef = new Regex(@"typedef (\S+?)\s*\**\s*(\S+);");
|
||||||
var rgxFieldFnPtr = new Regex(fnPtr + @";");
|
var rgxFieldFnPtr = new Regex(fnPtr + @";");
|
||||||
var rgxField = new Regex(@"^(?:struct |enum )?(\S+?)\s*\**\s*(\S+)(?:\s*:\s*([0-9]+))?;");
|
var rgxField = new Regex(@"^(?:struct |enum )?(\S+?)\s*\**\s*((?:\S|\s*,\s*)+)(?:\s*:\s*([0-9]+))?;");
|
||||||
|
|
||||||
var rgxStripKeywords = new Regex(@"\b(?:const|unsigned|volatile)\b");
|
var rgxStripKeywords = new Regex(@"\b(?:const|unsigned|volatile)\b");
|
||||||
var rgxCompressPtrs = new Regex(@"\*\s+\*");
|
var rgxCompressPtrs = new Regex(@"\*\s+\*");
|
||||||
@@ -271,7 +271,6 @@ namespace Il2CppInspector.CppUtils
|
|||||||
bool inEnum = false;
|
bool inEnum = false;
|
||||||
string line;
|
string line;
|
||||||
|
|
||||||
// TODO: comma-separated fields
|
|
||||||
// TODO: #ifdef IS_32BIT
|
// TODO: #ifdef IS_32BIT
|
||||||
// TODO: function pointer signatures
|
// TODO: function pointer signatures
|
||||||
|
|
||||||
@@ -471,9 +470,13 @@ namespace Il2CppInspector.CppUtils
|
|||||||
var field = rgxField.Match(line);
|
var field = rgxField.Match(line);
|
||||||
|
|
||||||
if (field.Success) {
|
if (field.Success) {
|
||||||
var name = field.Groups[2].Captures[0].ToString();
|
var names = field.Groups[2].Captures[0].ToString();
|
||||||
var typeName = field.Groups[1].Captures[0].ToString();
|
var typeName = field.Groups[1].Captures[0].ToString();
|
||||||
|
|
||||||
|
// Multiple fields can be separated by commas
|
||||||
|
foreach (var fieldName in names.Split(',')) {
|
||||||
|
string name = fieldName.Trim();
|
||||||
|
|
||||||
// Array
|
// Array
|
||||||
var array = rgxArrayField.Match(name);
|
var array = rgxArrayField.Match(name);
|
||||||
int arraySize = 0;
|
int arraySize = 0;
|
||||||
@@ -504,6 +507,7 @@ namespace Il2CppInspector.CppUtils
|
|||||||
Debug.WriteLine($"[FIELD {(pointers > 0 ? "PTR" : "VAL")} ] {line} -- {name}");
|
Debug.WriteLine($"[FIELD {(pointers > 0 ? "PTR" : "VAL")} ] {line} -- {name}");
|
||||||
else
|
else
|
||||||
Debug.WriteLine($"[BITFIELD ] {line} -- {name} : {bitfield}");
|
Debug.WriteLine($"[BITFIELD ] {line} -- {name} : {bitfield}");
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user