static private TypeErrorForProtectedMember ( |
||
type | ||
name | string | |
return | Expression |
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)); }