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));
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
| } |