Beispiel #1
0
        public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
        {
            switch (binder.Name) {
                case "func_dict":
                case "__dict__":
                    return new DynamicMetaObject(
                        Expression.Call(
                            typeof(PythonOps).GetMethod("PythonFunctionDeleteDict")
                        ),
                        BindingRestrictions.GetTypeRestriction(Expression, typeof(PythonFunction))
                    );
                case "__doc__":
                case "func_doc":
                    return new DynamicMetaObject(
                        Expression.Call(
                            typeof(PythonOps).GetMethod("PythonFunctionDeleteDoc"),
                            Expression.Convert(Expression, typeof(PythonFunction))
                        ),
                        BindingRestrictions.GetTypeRestriction(Expression, typeof(PythonFunction))
                    );
                case "func_defaults":
                    return new DynamicMetaObject(
                        Expression.Call(
                            typeof(PythonOps).GetMethod("PythonFunctionDeleteDefaults"),
                            Expression.Convert(Expression, typeof(PythonFunction))
                        ),
                        BindingRestrictions.GetTypeRestriction(Expression, typeof(PythonFunction))
                    );
            }

            // first get the default binder value
            DynamicMetaObject fallback = binder.FallbackDeleteMember(this);

            // then fallback w/ an error suggestion that does a late bound delete
            return binder.FallbackDeleteMember(
                this,
                new DynamicMetaObject(
                    Expression.Condition(
                        Ast.Call(
                            typeof(PythonOps).GetMethod("PythonFunctionDeleteMember"),
                            AstUtils.Convert(
                                Expression,
                                typeof(PythonFunction)
                            ),
                            Expression.Constant(binder.Name)
                        ),
                        Expression.Default(typeof(void)),       // we deleted the member
                        AstUtils.Convert(
                            fallback.Expression,                // report language specific error,
                            typeof(void)
                        )
                    ),
                    BindingRestrictions.GetTypeRestriction(Expression, typeof(PythonFunction)).Merge(fallback.Restrictions)
                )
            );
        }
Beispiel #2
0
        public override bool TryDeleteMember(DeleteMemberBinder binder)
        {
            string key = binder.Name;

            if (this.storage.ContainsKey(key))
            {
                this.storage.Remove(key);
            }
            return(true);
        }
Beispiel #3
0
        public override bool TryDeleteMember(DeleteMemberBinder binder)
        {
            if (_dictionary.ContainsKey(binder.Name))
            {
                _dictionary.Remove(binder.Name);
                return(true);
            }

            return(base.TryDeleteMember(binder));
        }
Beispiel #4
0
 /// <summary>
 /// Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic.
 /// </summary>
 /// <param name="binder">Provides information about the deletion.</param>
 /// <returns>
 /// Alwasy returns true.
 /// </returns>
 public override bool TryDeleteMember(DeleteMemberBinder binder)
 {
     // <pex>
     if (binder is null)
     {
         throw new ArgumentNullException(nameof(binder));
     }
     // </pex>
     return(_members.Remove(binder.Name));
 }
Beispiel #5
0
        /// <summary>
        /// Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic.
        /// </summary>
        /// <param name="binder">Provides information about the deletion.</param>
        /// <returns>
        /// Alwasy returns true.
        /// </returns>
        public override bool TryDeleteMember(DeleteMemberBinder binder)
        {
            if (binder == null)
            {
                throw new ArgumentNullException("binder");
            }
            bool result = _members.Remove(binder.Name);

            return(result);
        }
Beispiel #6
0
        internal static DynamicMetaObject Bind(DynamicMetaObject target, DeleteMemberBinder binder)
        {
            var obj = target.BindDeleteMember(binder);

            return(new DynamicMetaObject(Microsoft.Scripting.Ast.Utils.Try(
                                             obj.Expression,
                                             Expression.Constant(1L, typeof(object))
                                             ).Catch(typeof(MissingMemberException),
                                                     Expression.Constant(0L, typeof(object))
                                                     ), obj.Restrictions));
        }
Beispiel #7
0
#pragma warning restore RECS0133

        public override bool TryDeleteMember(DeleteMemberBinder binder)
        {
            if (j.JsonType != JsonType.Object)
            {
                return(false);
            }

            var name = binder.Name;

            return(j.Remove(name));
        }
 public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
 {
     return(IsOverridden(nameof(DynamicProxy <T> .TryDeleteMember))
       ? CallMethodNoResult(
                nameof(DynamicProxy <T> .TryDeleteMember),
                binder,
                NoArgs,
                e => binder.FallbackDeleteMember(this, e)
                )
       : base.BindDeleteMember(binder));
 }
Beispiel #9
0
    // Token: 0x0600062D RID: 1581 RVA: 0x0002A140 File Offset: 0x00028340
    public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
    {
        Class31 <O3JSdjQuD5uSVMwF47d> .Class35 @class = new Class31 <O3JSdjQuD5uSVMwF47d> .Class35();

        @class.deleteMemberBinder_0 = binder;
        @class.class31_0            = this;
        if (!this.NsEsKrivoE("TryDeleteMember"))
        {
            return(base.BindDeleteMember(@class.deleteMemberBinder_0));
        }
        return(this.method_3("TryDeleteMember", @class.deleteMemberBinder_0, Class31 <O3JSdjQuD5uSVMwF47d> .smethod_0(), new Class31 <O3JSdjQuD5uSVMwF47d> .Delegate0(@class.method_0)));
    }
        public override bool TryDeleteMember(DeleteMemberBinder binder)
        {
            bool isFound = RemoveItem(binder.Name);

            if (!isFound)
            {
                OnMemberBinderNotFound(binder.Name);
            }

            // always return true
            return(true);
        }
        public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
        {
            DynamicMetaObject messageSendMO;
            var kernel     = ValueClass.ObjectSpace;
            var memberName = kernel.symbolFor(binder.Name);

            if (createMetaObjectToSendMessage("removeKey:", DynamicBindingGuru.argArrayFor(Expression.Constant(memberName).asDynamicMetaObject(BindingRestrictions.Empty, memberName)), out messageSendMO))
            {
                return(messageSendMO);
            }
            return(binder.FallbackDeleteMember(this, messageSendMO));
        }
Beispiel #12
0
 public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
 {
     return(new DynamicMetaObject(
                Expression.Call(
                    Utils.Convert(Expression, typeof(PythonModule)),
                    typeof(PythonModule).GetMethod("__delattr__"),
                    PythonContext.GetCodeContext(binder),
                    Expression.Constant(binder.Name)
                    ),
                BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
                ));
 }
Beispiel #13
0
        public override bool TryDeleteMember(DeleteMemberBinder binder)
        {
            var name = binder.Name;

            if (!_values.ContainsKey(name))
            {
                return(false);
            }

            _values.Remove(name);
            return(true);
        }
 /// <summary>
 /// Provides the implementation for operations that delete an object member.
 /// </summary>
 /// <param name="Binder">Provides information about the deletion.</param>
 public override bool TryDeleteMember(DeleteMemberBinder Binder)
 {
     // Check if the dictionary contains the key.
     if (_Dictionary.ContainsKey(Binder.Name))
     {
         // Remove the key from the dictionary.
         _Dictionary.Remove(Binder.Name);
         // Return true.
         return(true);
     }
     // Invoke the base method.
     return(base.TryDeleteMember(Binder));
 }
Beispiel #15
0
        public override bool TryDeleteMember(DeleteMemberBinder binder)
        {
            if (base.TryDeleteMember(binder))
            {
                return(true);
            }

            if (TryDeleteMemberMissing == null)
            {
                return(true);
            }
            return(TryDeleteMemberMissing(binder));
        }
Beispiel #16
0
        DynamicMetaObject DynamicMetaObject.BindDeleteMember(DeleteMemberBinder binder)
        {
            Class147 <T> class2 = new Class147 <T> {
                deleteMemberBinder_0 = binder,
                class143_0           = (Class143 <T>) this
            };

            if (!this.method_0("TryDeleteMember"))
            {
                return(base.BindDeleteMember(class2.deleteMemberBinder_0));
            }
            return(this.method_4("TryDeleteMember", class2.deleteMemberBinder_0, Class143 <T> .expression_0, new Delegate2 <T>(class2.method_0)));
        }
        private DispatchResult DispatchDeleteMember(DeleteMemberBinder binder, Object @this)
        {
            var old_value = Value;

            Value = @this;

            try
            {
                try
                {
                    try
                    {
                        DeleteMember(binder);
                        return(Succeed());
                    }
                    catch (FallbackException)
                    {
                        var dynamic_object = Value as IDynamicObject;
                        if (dynamic_object != null)
                        {
                            dynamic_object.DeleteMember(binder); return(Succeed());
                        }
                        else
                        {
                            throw;
                        }
                    }
                }
                catch (FallbackException)
                {
                    return(Fail());
                }
                catch (Exception ex)
                {
                    if (WrapExceptions)
                    {
                        var bind_args = new OrderedDictionary <String, Object>();
                        bind_args.Add("this", @this);
                        throw new BindException(binder, bind_args, ex);
                    }
                    else
                    {
                        throw;
                    }
                }
            }
            finally
            {
                Value = old_value;
            }
        }
Beispiel #18
0
            public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
            {
                if (IsOverridden(DynamicObject_TryDeleteMember))
                {
                    return(CallMethodNoResult(
                               DynamicObject_TryDeleteMember,
                               binder,
                               s_noArgs,
                               (GreedyMetaDynamic @this, DeleteMemberBinder b, DynamicMetaObject e) => b.FallbackDeleteMember(@this, e)
                               ));
                }

                return(base.BindDeleteMember(binder));
            }
Beispiel #19
0
 public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
 {
     return(new DynamicMetaObject(
                Expression.Condition(
                    Expression.Invoke(
                        Expression.Constant(new Func <object, SymbolId, bool>(AttributesAdapter.TryDeleteMember)),
                        Expression,
                        Expression.Constant(SymbolTable.StringToId(binder.Name))
                        ),
                    Expression.Default(binder.ReturnType),
                    binder.FallbackDeleteMember(this).Expression
                    ),
                GetRestrictions()
                ));
 }
Beispiel #20
0
 public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
 {
     return(new DynamicMetaObject(
                Expression.Condition(
                    Expression.Invoke(
                        Expression.Constant(_deleteMember),
                        Expression,
                        Expression.Constant(binder.Name)
                        ),
                    Expression.Default(binder.ReturnType),
                    binder.FallbackDeleteMember(this).Expression
                    ),
                GetRestrictions()
                ));
 }
Beispiel #21
0
        public override bool TryDeleteMember(DeleteMemberBinder binder)
        {
            var key = binder.Name;

            if (!_dictionary.ContainsKey(key))
            {
                return(false);
            }

            _dictionary.Remove(key);

            return(true);

            //throw new KeyNotFoundException(string.Format("Key \"{0}\" was not found in the given dictionary", key));
        }
        private DynamicMetaObject /*!*/ MakeDeleteMember(DeleteMemberBinder /*!*/ member)
        {
            PerfTrack.NoteEvent(PerfTrack.Categories.Binding, "OldClass DeleteMember");
            PerfTrack.NoteEvent(PerfTrack.Categories.BindingTarget, "OldClass DeleteMember");
            DynamicMetaObject self = Restrict(typeof(OldClass));

            return(new DynamicMetaObject(
                       Ast.Call(
                           typeof(PythonOps).GetMethod("OldClassDeleteMember"),
                           AstUtils.Constant(PythonContext.GetPythonContext(member).SharedContext),
                           self.Expression,
                           AstUtils.Constant(member.Name)
                           ),
                       self.Restrictions
                       ));
        }
Beispiel #23
0
            // TODO: support for IgnoreCase in underlying ScriptScope APIs
            public override MetaObject BindDeleteMember(DeleteMemberBinder action)
            {
                var fallback = action.FallbackDeleteMember(this);

                return(new MetaObject(
                           Expression.Condition(
                               Expression.Call(
                                   AstUtils.Convert(Expression, typeof(ScriptScope)),
                                   typeof(ScriptScope).GetMethod("RemoveVariable"),
                                   Expression.Constant(action.Name)
                                   ),
                               Expression.Empty(),
                               Expression.Convert(fallback.Expression, typeof(void))
                               ),
                           Restrictions.Merge(Restrictions.GetTypeRestriction(Expression, typeof(ScriptScope))).Merge(fallback.Restrictions)
                           ));
            }
Beispiel #24
0
            // TODO: support for IgnoreCase in underlying ScriptScope APIs
            public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder action)
            {
                var fallback = action.FallbackDeleteMember(this);

                return(new DynamicMetaObject(
                           Expression.IfThenElse(
                               Expression.Call(
                                   Expression.Convert(Expression, typeof(ScriptScope)),
                                   typeof(ScriptScope).GetMethod("RemoveVariable"),
                                   Expression.Constant(action.Name)
                                   ),
                               Expression.Empty(),
                               fallback.Expression
                               ),
                           Restrictions.Merge(BindingRestrictions.GetTypeRestriction(Expression, typeof(ScriptScope))).Merge(fallback.Restrictions)
                           ));
            }
Beispiel #25
0
 public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
 {
     return(new DynamicMetaObject(
                Expression.Condition(
                    Convert(
                        Expression.Invoke(
                            Expression.Constant(new Func <T, string, bool>(TryDeleteMember)),
                            Convert(Expression, typeof(T)),
                            Expression.Constant(binder.Name)
                            ),
                        typeof(bool)
                        ),
                    Expression.Empty(),
                    binder.FallbackDeleteMember(this).Expression,
                    typeof(void)
                    ),
                GetRestrictions()
                ));
 }
        private DynamicMetaObject /*!*/ MakeDeleteMember(DeleteMemberBinder /*!*/ member)
        {
            DynamicMetaObject self = Restrict(Value.GetType());

            return(BindingHelpers.AddDynamicTestAndDefer(
                       member,
                       new DynamicMetaObject(
                           Ast.Call(
                               typeof(PythonOps).GetMethod(nameof(PythonOps.PythonTypeDeleteCustomMember)),
                               AstUtils.Constant(PythonContext.GetPythonContext(member).SharedContext),
                               self.Expression,
                               AstUtils.Constant(member.Name)
                               ),
                           self.Restrictions
                           ),
                       new DynamicMetaObject[] { this },
                       TestUserType()
                       ));
        }
        public sealed override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
        {
            var fallback = ((Func <Expression>)(() =>
            {
                try { return(base.BindDeleteMember(binder).Expression); }
                catch (Exception ex) { return(Expression.Throw(Expression.Constant(ex))); }
            }))();

            var dispatchResult = Expression.Parameter(typeof(DispatchResult), "dispatchResult");
            var shim           = Expression.Block(dispatchResult.MkArray(),
                                                  // 1. var dispatchResult = DispatchDeleteMember(binder, `expression`);
                                                  Expression.Assign(dispatchResult, Expression.Call(
                                                                        Expression.Constant(this),
                                                                        typeof(SimpleMetaObject).GetMethod("DispatchDeleteMember", BF.PrivateInstance),
                                                                        Expression.Constant(binder),
                                                                        Expression)),
                                                  // 2. if (!dispatchResult.Success) `fallback`;
                                                  Expression.IfThen(
                                                      Expression.Not(Expression.Property(dispatchResult, "Success")),
                                                      fallback));

            return(new DynamicMetaObject(shim, BindingRestrictions.GetTypeRestriction(Expression, LimitType)));
        }
Beispiel #28
0
            public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
            {
                ContractUtils.RequiresNotNull(binder, "binder");

                int index = Value.Class.GetValueIndex(binder.Name, binder.IgnoreCase, Value);

                Expression tryDelete = Expression.Call(
                    typeof(RuntimeOps).GetMethod("ExpandoTryDeleteValue"),
                    GetLimitedSelf(),
                    Expression.Constant(Value.Class, typeof(object)),
                    Expression.Constant(index),
                    Expression.Constant(binder.Name),
                    Expression.Constant(binder.IgnoreCase)
                    );
                DynamicMetaObject fallback = binder.FallbackDeleteMember(this);

                DynamicMetaObject target = new DynamicMetaObject(
                    Expression.IfThen(Expression.Not(tryDelete), fallback.Expression),
                    fallback.Restrictions
                    );

                return(AddDynamicTestAndDefer(binder, Value.Class, null, target));
            }
Beispiel #29
0
            public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder) {
                switch (binder.Name) {
                    case "__dict__":
                        return new DynamicMetaObject(
                            Expression.Throw(
                                Expression.Call(
                                    typeof(PythonOps).GetMethod("TypeError"),
                                    Expression.Constant("can't set attributes of built-in/extension type 'module'"),
                                    Expression.NewArrayInit(typeof(object))
                                )
                            ),
                            BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
                        );
                    case "__class__":
                        return new DynamicMetaObject(
                            Expression.Throw(
                                Expression.Call(
                                    typeof(PythonOps).GetMethod("TypeError"),
                                    Expression.Constant("can't delete __class__ attribute"),
                                    Expression.NewArrayInit(typeof(object))
                                )
                            ),
                            BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
                        );
                }

                return new DynamicMetaObject(
                    Expression.Condition(
                        Expression.Call(
                            typeof(PythonOps).GetMethod("ModuleDeleteMember"),
                            Utils.Convert(Expression, typeof(PythonModule)),
                            Expression.Constant(binder.Name)
                        ),
                        Expression.Default(typeof(object)),
                        binder.FallbackDeleteMember(this).Expression
                    ),
                    BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
                );
            }
        /// <summary>
        /// Helper for falling back - if we have a base object fallback to it first (which can
        /// then fallback to the calling site), otherwise fallback to the calling site.
        /// </summary>
        private DynamicMetaObject/*!*/ FallbackDeleteError(DeleteMemberBinder/*!*/ action, DynamicMetaObject/*!*/[] args) {
            if (_baseMetaObject != null) {
                return _baseMetaObject.BindDeleteMember(action);
            } else if (action is PythonDeleteMemberBinder) {
                return new DynamicMetaObject(
                    MakeTypeError(action.Name, ((IPythonObject)args[0].Value).PythonType),
                    BindingRestrictions.Empty
                );
            }

            return action.FallbackDeleteMember(this);
        }
 public DeleteBindingInfo(DeleteMemberBinder/*!*/ action, DynamicMetaObject/*!*/[]/*!*/ args, ConditionalBuilder/*!*/ body, ValidationInfo/*!*/ validation)
     : base(args, body, validation) {
     Action = action;
 }
 public override DynamicMetaObject/*!*/ BindDeleteMember(DeleteMemberBinder/*!*/ action) {
     return MakeDeleteMemberRule(
         new DeleteBindingInfo(
             action,
             new DynamicMetaObject[] { this },
             new ConditionalBuilder(action),
             BindingHelpers.GetValidationInfo(Expression, PythonType)
         )
     );
 }
 private DynamicMetaObject/*!*/ MakeDeleteMember(DeleteMemberBinder/*!*/ member) {
     DynamicMetaObject self = Restrict(typeof(PythonType));
     return BindingHelpers.AddDynamicTestAndDefer(
         member,
         new DynamicMetaObject(
             Ast.Call(
                 typeof(PythonOps).GetMethod("PythonTypeDeleteCustomMember"),
                 AstUtils.Constant(BinderState.GetBinderState(member).Context),
                 self.Expression,
                 AstUtils.Constant(SymbolTable.StringToId(member.Name))
             ),
             self.Restrictions
         ),
         new DynamicMetaObject[] { this },
         TestUserType()
     );
 }
 /// <summary>
 /// Performs the binding of the dynamic delete member operation.
 /// </summary>
 /// <param name="binder">An instance of the <see cref="DeleteMemberBinder"/> that represents the details of the dynamic operation.</param>
 /// <returns>The new <see cref="DynamicMetaObject"/> representing the result of the binding.</returns>
 public virtual DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder) {
     ContractUtils.RequiresNotNull(binder, "binder");
     return binder.FallbackDeleteMember(this);
 }
Beispiel #35
0
 public override DynamicMetaObject/*!*/ BindDeleteMember(DeleteMemberBinder/*!*/ member) {
     return MakeMemberAccess(member, member.Name, MemberAccess.Delete, this);
 }
Beispiel #36
0
 public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder) {
     return new DynamicMetaObject(
         Expression.Call(
             Utils.Convert(Expression, typeof(PythonModule)),
             typeof(PythonModule).GetMethod("__delattr__"),
             PythonContext.GetCodeContext(binder),
             Expression.Constant(binder.Name)
         ),
         BindingRestrictions.GetTypeRestriction(Expression, Value.GetType())
     );
 }
Beispiel #37
0
 public override DynamicMetaObject/*!*/ BindDeleteMember(DeleteMemberBinder/*!*/ member) {
     return MakeDeleteMember(member);
 }
Beispiel #38
0
        private DynamicMetaObject/*!*/ MakeDeleteMember(DeleteMemberBinder/*!*/ member) {
            PerfTrack.NoteEvent(PerfTrack.Categories.Binding, "OldClass DeleteMember");
            PerfTrack.NoteEvent(PerfTrack.Categories.BindingTarget, "OldClass DeleteMember");
            DynamicMetaObject self = Restrict(typeof(OldClass));

            return new DynamicMetaObject(
                Ast.Call(
                    typeof(PythonOps).GetMethod("OldClassDeleteMember"),
                    AstUtils.Constant(PythonContext.GetPythonContext(member).SharedContext),
                    self.Expression,
                    AstUtils.Constant(SymbolTable.StringToId(member.Name))
                ),
                self.Restrictions
            );
        }
            public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder) {
                if (IsOverridden("TryDeleteMember")) {
                    return CallMethodNoResult("TryDeleteMember", binder, NoArgs, (e) => binder.FallbackDeleteMember(this, e));
                }

                return base.BindDeleteMember(binder);
            }
Beispiel #40
0
 public virtual bool TryDeleteMember(T instance, DeleteMemberBinder binder)
 {
     return(false);
 }
Beispiel #41
0
 public override bool TryDeleteMember(DeleteMemberBinder binder)
 {
     return(TryRemoveColumn(binder.Name));
 }
        public override DynamicMetaObject/*!*/ BindDeleteMember(DeleteMemberBinder/*!*/ member) {
            PerfTrack.NoteEvent(PerfTrack.Categories.Binding, "Type DeleteMember " + Value.UnderlyingSystemType.FullName);
            PerfTrack.NoteEvent(PerfTrack.Categories.BindingTarget, "Type DeleteMember");
            if (Value.IsSystemType) {
                BinderState state = BinderState.GetBinderState(member);

                MemberTracker tt = MemberTracker.FromMemberInfo(Value.UnderlyingSystemType);

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

            return MakeDeleteMember(member);
        }
Beispiel #43
0
 public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder) {
     IScopeVariable variable = Value.GetVariable(binder.Name, binder.IgnoreCase);
     return new DynamicMetaObject(
         Expression.Condition(
             Expression.Call(
                 Variable(variable),
                 variable.GetType().GetMethod("DeleteValue")
             ),
             Expression.Default(binder.ReturnType),
             binder.FallbackDeleteMember(this).Expression
         ),
         BindingRestrictions.GetInstanceRestriction(Expression, Value)
     );
 }
 /// <summary>
 /// Provides the implementation of deleting a member.  Derived classes can override
 /// this method to customize behavior.  When not overridden the call site requesting the
 /// binder determines the behavior.
 /// </summary>
 /// <param name="binder">The binder provided by the call site.</param>
 /// <returns>true if the operation is complete, false if the call site should determine behavior.</returns>
 public virtual bool TryDeleteMember(DeleteMemberBinder binder) {
     return false;
 }
        private static string FormatBinder(CallSiteBinder binder)
        {
            ConvertBinder binder2 = binder as ConvertBinder;

            if (binder2 != null)
            {
                return("Convert " + binder2.Type);
            }
            GetMemberBinder binder3 = binder as GetMemberBinder;

            if (binder3 != null)
            {
                return("GetMember " + binder3.Name);
            }
            SetMemberBinder binder4 = binder as SetMemberBinder;

            if (binder4 != null)
            {
                return("SetMember " + binder4.Name);
            }
            DeleteMemberBinder binder5 = binder as DeleteMemberBinder;

            if (binder5 != null)
            {
                return("DeleteMember " + binder5.Name);
            }
            if (binder is GetIndexBinder)
            {
                return("GetIndex");
            }
            if (binder is SetIndexBinder)
            {
                return("SetIndex");
            }
            if (binder is DeleteIndexBinder)
            {
                return("DeleteIndex");
            }
            InvokeMemberBinder binder6 = binder as InvokeMemberBinder;

            if (binder6 != null)
            {
                return("Call " + binder6.Name);
            }
            if (binder is InvokeBinder)
            {
                return("Invoke");
            }
            if (binder is CreateInstanceBinder)
            {
                return("Create");
            }
            UnaryOperationBinder binder7 = binder as UnaryOperationBinder;

            if (binder7 != null)
            {
                return(binder7.Operation.ToString());
            }
            BinaryOperationBinder binder8 = binder as BinaryOperationBinder;

            if (binder8 != null)
            {
                return(binder8.Operation.ToString());
            }
            return("CallSiteBinder");
        }
Beispiel #46
0
        private DynamicMetaObject/*!*/ MakeDeleteMember(DeleteMemberBinder/*!*/ member) {
            DynamicMetaObject self = Restrict(typeof(OldClass));

            return new DynamicMetaObject(
                Ast.Call(
                    typeof(PythonOps).GetMethod("OldClassDeleteMember"),
                    Ast.Constant(BinderState.GetBinderState(member).Context),
                    self.Expression,
                    AstUtils.Constant(SymbolTable.StringToId(member.Name))
                ),
                self.Restrictions
            );
        }