Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify adding a parameter and support either string/Utf8String #164

Merged
merged 1 commit into from
Sep 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading