Skip to content

Commit 18ef1e5

Browse files
authored
Simplify adding a parameter and support either string/Utf8String (#164)
1 parent f808c31 commit 18ef1e5

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

Il2CppInterop.Generator/Extensions/AsmResolverExtensions.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,11 @@ private static Parameter GetArgument(this ILProcessor instructions, int argument
6363

6464
public static Parameter AddParameter(this MethodDefinition method, TypeSignature parameterSignature, string parameterName, ParameterAttributes parameterAttributes = default)
6565
{
66-
var parameterDefinition = new ParameterDefinition((ushort)(method.Signature!.ParameterTypes.Count + 1), parameterName, parameterAttributes);
67-
method.Signature.ParameterTypes.Add(parameterSignature);
68-
method.ParameterDefinitions.Add(parameterDefinition);
69-
70-
method.Parameters.PullUpdatesFromMethodSignature();
71-
return method.Parameters.Single(parameter => parameter.Name == parameterName && parameter.ParameterType == parameterSignature);
66+
var parameter = method.AddParameter(parameterSignature);
67+
var parameterDefinition = parameter.GetOrCreateDefinition();
68+
parameterDefinition.Name = parameterName;
69+
parameterDefinition.Attributes = parameterAttributes;
70+
return parameter;
7271
}
7372

7473
public static Parameter AddParameter(this MethodDefinition method, TypeSignature parameterSignature)

Il2CppInterop.Generator/Extensions/CustomAttributeEx.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using AsmResolver;
22
using AsmResolver.DotNet;
3+
using AsmResolver.DotNet.Signatures;
34

45
namespace Il2CppInterop.Generator.Extensions;
56

@@ -25,13 +26,18 @@ public static int ExtractFieldOffset(this IHasCustomAttribute originalField)
2526
return ExtractInt(originalField, "FieldOffsetAttribute", "Offset");
2627
}
2728

29+
public static string? GetElementAsString(this CustomAttributeArgument argument)
30+
{
31+
return argument.Element as Utf8String ?? argument.Element as string;
32+
}
33+
2834
private static string? Extract(this IHasCustomAttribute originalMethod, string attributeName,
2935
string parameterName)
3036
{
3137
var attribute = originalMethod.CustomAttributes.SingleOrDefault(it => it.Constructor?.DeclaringType?.Name == attributeName);
3238
var field = attribute?.Signature?.NamedArguments.SingleOrDefault(it => it.MemberName == parameterName);
3339

34-
return (Utf8String?)field?.Argument.Element;
40+
return field?.Argument.GetElementAsString();
3541
}
3642

3743
private static long ExtractLong(this IHasCustomAttribute originalMethod, string attributeName, string parameterName)

Il2CppInterop.Generator/Passes/Pass70GenerateProperties.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public static void DoPass(RewriteGlobalContext context)
4444
string? defaultMemberName = null;
4545
var defaultMemberAttributeAttribute = type.CustomAttributes.FirstOrDefault(it =>
4646
it.AttributeType()?.Name == "AttributeAttribute" && it.Signature!.NamedArguments.Any(it =>
47-
it.MemberName == "Name" && (Utf8String?)it.Argument.Element == nameof(DefaultMemberAttribute)));
47+
it.MemberName == "Name" && it.Argument.GetElementAsString() == nameof(DefaultMemberAttribute)));
4848
if (defaultMemberAttributeAttribute != null)
4949
{
5050
defaultMemberName = "Item";

0 commit comments

Comments
 (0)