simplify custom attribute logic a bit by always returning arrays as ConstantBlobArrayElement

This commit is contained in:
LukeFZ
2023-12-01 06:46:58 +01:00
parent 6aa96b431d
commit 227aefedef
5 changed files with 19 additions and 38 deletions

View File

@@ -103,15 +103,17 @@ namespace Il2CppInspector
var type = BlobReader.ReadEncodedTypeEnum(_inspector, _data, out var typeDef);
var value = BlobReader.GetConstantValueFromBlob(_inspector, type, _data);
if (value is BlobReader.ConstantBlobArray blobArray)
value = ConvertAttributeValue(value);
if (value is CustomAttributeArgument valueAttr)
{
arg.Type = ConvertTypeDef(blobArray.ArrayTypeDef, blobArray.ArrayTypeEnum);
arg.Value = blobArray.Elements.Select(ConvertAttributeValue).ToArray();
arg.Type = valueAttr.Type;
arg.Value = valueAttr.Value;
}
else
{
arg.Type = ConvertTypeDef(typeDef, type);
arg.Value = ConvertAttributeValue(value);
arg.Value = value;
}
}
@@ -126,21 +128,15 @@ namespace Il2CppInspector
var arrValue = new CustomAttributeArgument
{
Type = ConvertTypeDef(blobArray.ArrayTypeDef, blobArray.ArrayTypeEnum),
Value = blobArray.Elements.Select(ConvertAttributeValue).ToArray()
Value = blobArray.Elements.Select(blobElem => new CustomAttributeArgument
{
Type = ConvertTypeDef(blobElem.TypeDef, blobElem.TypeEnum),
Value = ConvertAttributeValue(blobElem.Value)
}).ToArray()
};
return arrValue;
}
case BlobReader.ConstantBlobArrayElement blobElem:
{
var subArgument = new CustomAttributeArgument
{
Type = ConvertTypeDef(blobElem.TypeDef, blobElem.TypeEnum),
Value = blobElem.Value
};
return subArgument;
}
default:
return value;
}