internal void MapParameters(bool reduceByRef) { if (reduceByRef) { _returnArgs = new List <int>(); if (_overload.ReturnType != typeof(void)) { _returnArgs.Add(-1); } } BitArray specialParameters = _resolver.MapSpecialParameters(this); if (_instanceBuilder == null) { _instanceBuilder = new InstanceBuilder(-1); } foreach (var parameter in _overload.Parameters) { if (!IsSpecialParameter(specialParameters, parameter.Position)) { if (reduceByRef) { MapParameterReduceByRef(parameter); } else { MapParameter(parameter); } } } _returnBuilder = MakeReturnBuilder(specialParameters); }
private ReturnBuilder MakeReturnBuilder(BitArray specialParameters) { ReturnBuilder returnBuilder = (_returnArgs != null) ? new ByRefReturnBuilder(_returnArgs) : new ReturnBuilder(_overload.ReturnType); if (_argNames.Count > 0 && _resolver.AllowMemberInitialization(_overload)) { List <string> unusedNames = GetUnusedArgNames(specialParameters); List <MemberInfo> bindableMembers = GetBindableMembers(returnBuilder.ReturnType, unusedNames); if (unusedNames.Count == bindableMembers.Count) { List <int> nameIndices = new List <int>(); foreach (MemberInfo mi in bindableMembers) { var type = (mi.MemberType == MemberTypes.Property) ? ((PropertyInfo)mi).PropertyType : ((FieldInfo)mi).FieldType; _parameters.Add(new ParameterWrapper(null, type, mi.Name, ParameterBindingFlags.None)); nameIndices.Add(_argNames.IndexOf(mi.Name)); } return(new KeywordConstructorReturnBuilder( returnBuilder, _argNames.Count, nameIndices.ToArray(), bindableMembers.ToArray(), _resolver.Binder.PrivateBinding )); } } return(returnBuilder); }
public KeywordConstructorReturnBuilder(ReturnBuilder builder, int kwArgCount, int[] indexesUsed, MemberInfo[] membersSet, bool privateBinding) : base(builder.ReturnType) { _builder = builder; _kwArgCount = kwArgCount; _indexesUsed = indexesUsed; _membersSet = membersSet; _privateBinding = privateBinding; }
public KeywordConstructorReturnBuilder(ReturnBuilder builder, int kwArgCount, int[] indexesUsed, MemberInfo[] membersSet, bool privateBinding) : base(builder.ReturnType) { _builder = builder; _kwArgCount = kwArgCount; _indexesUsed = indexesUsed; _membersSet = membersSet; _privateBinding = privateBinding; }
internal MethodTarget(MethodBinder binder, MethodBase method, int parameterCount, ArgBuilder instanceBuilder, IList <ArgBuilder> argBuilders, ReturnBuilder returnBuilder) { this._binder = binder; this._method = method; this._parameterCount = parameterCount; this._instanceBuilder = instanceBuilder; this._argBuilders = argBuilders; this._returnBuilder = returnBuilder; //argBuilders.TrimExcess(); }
internal MethodCandidate(OverloadResolver resolver, OverloadInfo method, List <ParameterWrapper> parameters, ParameterWrapper paramsDict, ReturnBuilder returnBuilder, InstanceBuilder instanceBuilder, IList <ArgBuilder> argBuilders, Dictionary <DynamicMetaObject, BindingRestrictions> restrictions) { Assert.NotNull(resolver, method, instanceBuilder, returnBuilder); Assert.NotNullItems(parameters); Assert.NotNullItems(argBuilders); Resolver = resolver; Overload = method; _instanceBuilder = instanceBuilder; ArgBuilders = argBuilders; ReturnBuilder = returnBuilder; _parameters = parameters; _paramsDict = paramsDict; Restrictions = restrictions; ParamsArrayIndex = ParameterWrapper.IndexOfParamsArray(parameters); parameters.TrimExcess(); }