Skip to content

Commit

Permalink
Simplify adding a parameter and support either string/Utf8String (#164)
Browse files Browse the repository at this point in the history
  • Loading branch information
ds5678 committed Sep 13, 2024
1 parent f808c31 commit 18ef1e5
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 8 deletions.
11 changes: 5 additions & 6 deletions Il2CppInterop.Generator/Extensions/AsmResolverExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,11 @@ private static Parameter GetArgument(this ILProcessor instructions, int argument

public static Parameter AddParameter(this MethodDefinition method, TypeSignature parameterSignature, string parameterName, ParameterAttributes parameterAttributes = default)
{
var parameterDefinition = new ParameterDefinition((ushort)(method.Signature!.ParameterTypes.Count + 1), parameterName, parameterAttributes);
method.Signature.ParameterTypes.Add(parameterSignature);
method.ParameterDefinitions.Add(parameterDefinition);

method.Parameters.PullUpdatesFromMethodSignature();
return method.Parameters.Single(parameter => parameter.Name == parameterName && parameter.ParameterType == parameterSignature);
var parameter = method.AddParameter(parameterSignature);
var parameterDefinition = parameter.GetOrCreateDefinition();
parameterDefinition.Name = parameterName;
parameterDefinition.Attributes = parameterAttributes;
return parameter;
}

public static Parameter AddParameter(this MethodDefinition method, TypeSignature parameterSignature)
Expand Down
8 changes: 7 additions & 1 deletion Il2CppInterop.Generator/Extensions/CustomAttributeEx.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using AsmResolver;
using AsmResolver.DotNet;
using AsmResolver.DotNet.Signatures;

namespace Il2CppInterop.Generator.Extensions;

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

public static string? GetElementAsString(this CustomAttributeArgument argument)
{
return argument.Element as Utf8String ?? argument.Element as string;
}

private static string? Extract(this IHasCustomAttribute originalMethod, string attributeName,
string parameterName)
{
var attribute = originalMethod.CustomAttributes.SingleOrDefault(it => it.Constructor?.DeclaringType?.Name == attributeName);
var field = attribute?.Signature?.NamedArguments.SingleOrDefault(it => it.MemberName == parameterName);

return (Utf8String?)field?.Argument.Element;
return field?.Argument.GetElementAsString();
}

private static long ExtractLong(this IHasCustomAttribute originalMethod, string attributeName, string parameterName)
Expand Down
2 changes: 1 addition & 1 deletion Il2CppInterop.Generator/Passes/Pass70GenerateProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public static void DoPass(RewriteGlobalContext context)
string? defaultMemberName = null;
var defaultMemberAttributeAttribute = type.CustomAttributes.FirstOrDefault(it =>
it.AttributeType()?.Name == "AttributeAttribute" && it.Signature!.NamedArguments.Any(it =>
it.MemberName == "Name" && (Utf8String?)it.Argument.Element == nameof(DefaultMemberAttribute)));
it.MemberName == "Name" && it.Argument.GetElementAsString() == nameof(DefaultMemberAttribute)));
if (defaultMemberAttributeAttribute != null)
{
defaultMemberName = "Item";
Expand Down

0 comments on commit 18ef1e5

Please sign in to comment.