55 lines
2.0 KiB
C#
55 lines
2.0 KiB
C#
using MonoFN.Cecil;
|
|
using MonoFN.Cecil.Cil;
|
|
|
|
namespace FishNet.CodeGenerating.Helping.Extension
|
|
{
|
|
|
|
internal static class MethodDefinitionExtensions
|
|
{
|
|
/// <summary>
|
|
/// Clears the method content and returns ret.
|
|
/// </summary>
|
|
internal static void ClearMethodWithRet(this MethodDefinition md, CodegenSession session, ModuleDefinition importReturnModule = null)
|
|
{
|
|
md.Body.Instructions.Clear();
|
|
ILProcessor processor = md.Body.GetILProcessor();
|
|
processor.Add(session.GetClass<GeneralHelper>().CreateRetDefault(md, importReturnModule));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the ParameterDefinition index from end of parameters.
|
|
/// </summary>
|
|
/// <param name="md"></param>
|
|
/// <param name="index"></param>
|
|
/// <returns></returns>
|
|
internal static ParameterDefinition GetEndParameter(this MethodDefinition md, int index)
|
|
{
|
|
//Not enough parameters.
|
|
if (md.Parameters.Count < (index + 1))
|
|
return null;
|
|
|
|
return md.Parameters[md.Parameters.Count - (index + 1)];
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Creates a variable type within the body and returns it's VariableDef.
|
|
/// </summary>
|
|
internal static VariableDefinition CreateVariable(this MethodDefinition methodDef, TypeReference variableTypeRef)
|
|
{
|
|
VariableDefinition variableDef = new VariableDefinition(variableTypeRef);
|
|
methodDef.Body.Variables.Add(variableDef);
|
|
return variableDef;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates a variable type within the body and returns it's VariableDef.
|
|
/// </summary>
|
|
internal static VariableDefinition CreateVariable(this MethodDefinition methodDef, CodegenSession session, System.Type variableType)
|
|
{
|
|
return CreateVariable(methodDef, session.GetClass<GeneralHelper>().GetTypeReference(variableType));
|
|
}
|
|
}
|
|
|
|
|
|
} |