TypeErrorForProtectedMember() static private method

static private TypeErrorForProtectedMember ( Type type, string name ) : Expression
type System.Type
name string
return Expression
Exemplo n.º 1
0
        public override DynamicMetaObject /*!*/ BindSetMember(SetMemberBinder /*!*/ member, DynamicMetaObject /*!*/ value)
        {
            PerfTrack.NoteEvent(PerfTrack.Categories.Binding, "Type SetMember " + Value.UnderlyingSystemType.FullName);
            PerfTrack.NoteEvent(PerfTrack.Categories.BindingTarget, "Type SetMember");
            PythonContext state = PythonContext.GetPythonContext(member);

            if (Value.IsSystemType)
            {
                MemberTracker tt = MemberTracker.FromMemberInfo(Value.UnderlyingSystemType);
                MemberGroup   mg = state.Binder.GetMember(MemberRequestKind.Set, Value.UnderlyingSystemType, member.Name);

                // filter protected member access against .NET types, these can only be accessed from derived types...
                foreach (MemberTracker mt in mg)
                {
                    if (IsProtectedSetter(mt))
                    {
                        return(new DynamicMetaObject(
                                   BindingHelpers.TypeErrorForProtectedMember(Value.UnderlyingSystemType, member.Name),
                                   Restrictions.Merge(value.Restrictions).Merge(BindingRestrictions.GetInstanceRestriction(Expression, Value))
                                   ));
                    }
                }

                // have the default binder perform it's operation against a TypeTracker and then
                // replace the test w/ our own.
                return(new DynamicMetaObject(
                           state.Binder.SetMember(
                               member.Name,
                               new DynamicMetaObject(
                                   AstUtils.Constant(tt),
                                   BindingRestrictions.Empty,
                                   tt
                                   ),
                               value,
                               new PythonOverloadResolverFactory(state.Binder, AstUtils.Constant(state.SharedContext))
                               ).Expression,
                           Restrictions.Merge(value.Restrictions).Merge(BindingRestrictions.GetInstanceRestriction(Expression, Value))
                           ));
            }

            return(MakeSetMember(member, value));
        }