mirror of
https://github.com/AssetRipper/AssetRipper.CIL.git
synced 2026-11-13 04:26:24 -10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2d68e67393 | ||
|
|
d8230781d9 | ||
|
|
2990c647c5 |
No files matched your search
@@ -71,6 +71,12 @@ public static class CilInstructionCollectionExtensions
|
||||
instructions.Add(CilOpCodes.Ceq);
|
||||
}
|
||||
|
||||
public static void AddThrowNull(this CilInstructionCollection instructions)
|
||||
{
|
||||
instructions.Add(CilOpCodes.Ldnull);
|
||||
instructions.Add(CilOpCodes.Throw);
|
||||
}
|
||||
|
||||
public static CilInstruction AddLoadElement(this CilInstructionCollection instructions, TypeSignature elementType)
|
||||
{
|
||||
return elementType switch
|
||||
|
||||
@@ -12,4 +12,19 @@ public static class CustomAttributeExtensions
|
||||
attribute.Signature.FixedArguments.Add(argument);
|
||||
return argument;
|
||||
}
|
||||
|
||||
public static CustomAttributeArgument AddFixedArgument<T>(this CustomAttribute attribute, TypeSignature paramType, T[] paramValue)
|
||||
{
|
||||
CustomAttributeArgument argument = new CustomAttributeArgument(paramType, paramValue.Select(e => (object?)e));
|
||||
attribute.Signature!.FixedArguments.Add(argument);
|
||||
return argument;
|
||||
}
|
||||
|
||||
public static CustomAttributeNamedArgument AddNamedArgument(this CustomAttribute attribute, TypeSignature memberType, string memberName, TypeSignature paramType, object paramValue, CustomAttributeArgumentMemberType memberKind)
|
||||
{
|
||||
CustomAttributeArgument argument = new CustomAttributeArgument(paramType, paramValue);
|
||||
CustomAttributeNamedArgument namedArgument = new CustomAttributeNamedArgument(memberKind, memberName, memberType, argument);
|
||||
attribute.Signature!.NamedArguments.Add(namedArgument);
|
||||
return namedArgument;
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,23 @@ public static class IHasCustomAttributeExtensions
|
||||
return attribute;
|
||||
}
|
||||
|
||||
public static CustomAttribute AddCustomAttribute<T>(this IHasCustomAttribute _this, IMethodDefOrRef constructor, SzArrayTypeSignature paramType, T[] paramValue)
|
||||
{
|
||||
CustomAttribute attribute = _this.AddCustomAttribute(constructor);
|
||||
attribute.AddFixedArgument(paramType, paramValue);
|
||||
return attribute;
|
||||
}
|
||||
|
||||
public static CustomAttribute AddCustomAttribute(this IHasCustomAttribute _this, IMethodDefOrRef constructor, params (TypeSignature, object)[] parameters)
|
||||
{
|
||||
CustomAttribute attribute = _this.AddCustomAttribute(constructor);
|
||||
for (int i = 0; i < parameters.Length; i++)
|
||||
{
|
||||
attribute.AddFixedArgument(parameters[i].Item1, parameters[i].Item2);
|
||||
}
|
||||
return attribute;
|
||||
}
|
||||
|
||||
internal static ModuleDefinition GetModule(this IHasCustomAttribute _this)
|
||||
{
|
||||
return (_this as IModuleProvider)?.ContextModule ?? throw new ArgumentException("Entity does not have a module", nameof(_this));
|
||||
|
||||
@@ -40,8 +40,7 @@ public static class MethodDefinitionExtensions
|
||||
}
|
||||
methodDefinition.CilMethodBody = new();
|
||||
CilInstructionCollection methodInstructions = methodDefinition.CilMethodBody.Instructions;
|
||||
methodInstructions.Add(CilOpCodes.Ldnull);
|
||||
methodInstructions.Add(CilOpCodes.Throw);
|
||||
methodInstructions.AddThrowNull();
|
||||
}
|
||||
|
||||
public static bool IsInstance(this MethodDefinition methodDefinition)
|
||||
@@ -93,6 +92,11 @@ public static class MethodDefinitionExtensions
|
||||
&& !managedMethod.IsRuntime;
|
||||
}
|
||||
|
||||
public static CilInstructionCollection GetInstructions(this MethodDefinition method)
|
||||
{
|
||||
return method.CilMethodBody?.Instructions ?? throw new ArgumentException("CilMethodBody was null", nameof(method));
|
||||
}
|
||||
|
||||
public static bool IsAutoPropertyGetMethod(this MethodDefinition method, [NotNullWhen(true)] out FieldDefinition? backingField)
|
||||
{
|
||||
if (!method.IsGetMethod
|
||||
@@ -152,12 +156,12 @@ public static class MethodDefinitionExtensions
|
||||
}
|
||||
}
|
||||
|
||||
public static Parameter AddParameter(this MethodDefinition method, TypeSignature parameterSignature, string parameterName)
|
||||
public static Parameter AddParameter(this MethodDefinition method, TypeSignature parameterSignature, string? parameterName)
|
||||
{
|
||||
return method.AddParameter(parameterSignature, parameterName, out _);
|
||||
}
|
||||
|
||||
public static Parameter AddParameter(this MethodDefinition method, TypeSignature parameterSignature, string parameterName, out ParameterDefinition parameterDefinition)
|
||||
public static Parameter AddParameter(this MethodDefinition method, TypeSignature parameterSignature, string? parameterName, out ParameterDefinition parameterDefinition)
|
||||
{
|
||||
parameterDefinition = new ParameterDefinition((ushort)(method.Signature!.ParameterTypes.Count + 1), parameterName, default);
|
||||
method.Signature.ParameterTypes.Add(parameterSignature);
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace AssetRipper.CIL;
|
||||
|
||||
public static class TypeDefinitionExtensions
|
||||
{
|
||||
public static FieldDefinition AddField(this TypeDefinition type, string fieldName, TypeSignature fieldType, bool isStatic = false, Visibility visibility = Visibility.Public)
|
||||
public static FieldDefinition AddField(this TypeDefinition type, string? fieldName, TypeSignature fieldType, bool isStatic = false, Visibility visibility = Visibility.Public)
|
||||
{
|
||||
FieldAttributes fieldAttributes = visibility.ToFieldAttributes() | (isStatic ? FieldAttributes.Static : default);
|
||||
FieldDefinition field = new FieldDefinition(fieldName, fieldAttributes, fieldType);
|
||||
@@ -34,7 +34,7 @@ public static class TypeDefinitionExtensions
|
||||
return field;
|
||||
}
|
||||
|
||||
public static MethodDefinition AddMethod(this TypeDefinition type, string methodName, MethodAttributes methodAttributes, TypeSignature returnType)
|
||||
public static MethodDefinition AddMethod(this TypeDefinition type, string? methodName, MethodAttributes methodAttributes, TypeSignature returnType)
|
||||
{
|
||||
MethodDefinition method = CreateMethod(methodName, methodAttributes, returnType);
|
||||
type.Methods.Add(method);
|
||||
@@ -67,7 +67,7 @@ public static class TypeDefinitionExtensions
|
||||
};
|
||||
}
|
||||
|
||||
private static MethodDefinition CreateMethod(string methodName, MethodAttributes methodAttributes, TypeSignature returnType)
|
||||
private static MethodDefinition CreateMethod(string? methodName, MethodAttributes methodAttributes, TypeSignature returnType)
|
||||
{
|
||||
bool isStatic = (methodAttributes & MethodAttributes.Static) != 0;
|
||||
MethodSignature methodSignature = isStatic
|
||||
@@ -80,12 +80,25 @@ public static class TypeDefinitionExtensions
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the default constructor for a <see cref="TypeDefinition"/>. Throws an exception if one doesn't exist.
|
||||
/// </summary>
|
||||
public static MethodDefinition GetDefaultConstructor(this TypeDefinition type)
|
||||
{
|
||||
return type.Methods.First(m => m.IsInstanceConstructor() && m.Parameters.Count == 0);
|
||||
}
|
||||
|
||||
public static bool IsStaticClass(this TypeDefinition type)
|
||||
/// <summary>
|
||||
/// Get all the instance constructors for a type
|
||||
/// </summary>
|
||||
/// <param name="type">The definition for the type</param>
|
||||
/// <returns>All the instance constructors</returns>
|
||||
public static IEnumerable<MethodDefinition> GetInstanceConstructors(this TypeDefinition type)
|
||||
{
|
||||
return type.Methods.Where(m => !m.IsStatic && m.IsConstructor);
|
||||
}
|
||||
|
||||
public static bool IsStatic(this TypeDefinition type)
|
||||
{
|
||||
return type.IsSealed && type.IsAbstract;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
|
||||
<PolySharpIncludeRuntimeSupportedAttributes>true</PolySharpIncludeRuntimeSupportedAttributes>
|
||||
|
||||
<Version>1.2.0</Version>
|
||||
<Version>1.2.1</Version>
|
||||
<AssemblyVersion>$(Version)</AssemblyVersion>
|
||||
<Copyright>Copyright (c) 2025 ds5678</Copyright>
|
||||
<Authors>ds5678</Authors>
|
||||
|
||||
Reference in new issue
Block a user