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