Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }