public void BuildCustomAttributes(ILConversion conversion, ConvertedRoutineParameter parameter) { var parameterDefinition = parameter.ParameterDefinition; var builders = CreateCustomAttributeList(conversion, parameterDefinition.CustomAttributes); for (int i = 0; i < builders.Count; i++) { var builder1 = builders[i]; parameter.Builder.SetCustomAttribute(builder1); } }
public Type[] CreateParameters(ILConversion conversion, ConvertedRoutine routine) { var methodDefinition = routine.MethodReference; if (!methodDefinition.HasParameters) { return(new Type[0]); } var systemParameterTypes = new Type[methodDefinition.Parameters.Count]; for (int i = 0; i < methodDefinition.Parameters.Count; i++) { var parameterDefinition = methodDefinition.Parameters[i]; var bound = Execution.Types.Ensuring.EnsureBound(conversion, parameterDefinition.ParameterType); var convertedParameter = new ConvertedRoutineParameter() { ParameterDefinition = parameterDefinition, Position = parameterDefinition.Sequence, Name = parameterDefinition.Name, ParameterType = bound }; // Make sure the 0th "this" parameter is not being overridden //if ( // //!methodDefinition.IsStatic && // convertedParameter.Position == 0) //{ // throw new Exception("Parameter position is zero which should be reserved for the 'return' argument."); //} routine.Parameters.All.Add(convertedParameter); systemParameterTypes[i] = bound.UnderlyingType; } return(systemParameterTypes); }
public ParameterBuilder CreateParameterBuilder(ILConversion conversion, ConvertedRoutine routine, ConvertedRoutineParameter parameter) { ParameterBuilder builder = null; var attributes = GetParameterAttributes(parameter.ParameterDefinition); if (routine.IsConstructor()) { var constructor = (ConvertedEmittedConstructor)routine; builder = constructor.ConstructorBuilder.DefineParameter(parameter.Position, attributes, parameter.Name); } else { var method = (ConvertedBuiltMethod)routine; builder = method.MethodBuilder.DefineParameter(parameter.Position, attributes, parameter.Name); } if ((attributes & ParameterAttributes.HasDefault) > 0) { builder.SetConstant(parameter.ParameterDefinition.Constant); } CustomAttributes.BuildCustomAttributes(conversion, parameter); return(builder); }