/IronPython_2_0/Src/IronPython/Runtime/Binding/SetMemberBinder.cs
C# | 89 lines | 57 code | 18 blank | 14 comment | 5 complexity | 7679669b4b5e136700742d4e6c81f7c9 MD5 | raw file
Possible License(s): GPL-2.0, MPL-2.0-no-copyleft-exception, CPL-1.0, CC-BY-SA-3.0, BSD-3-Clause, ISC, AGPL-3.0, LGPL-2.1, Apache-2.0
- /* ****************************************************************************
- *
- * Copyright (c) Microsoft Corporation.
- *
- * This source code is subject to terms and conditions of the Microsoft Public License. A
- * copy of the license can be found in the License.html file at the root of this distribution. If
- * you cannot locate the Microsoft Public License, please send an email to
- * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
- * by the terms of the Microsoft Public License.
- *
- * You must not remove this notice, or any other, from this software.
- *
- *
- * ***************************************************************************/
-
- using System; using Microsoft;
- using Microsoft.Scripting;
- using Microsoft.Scripting.Actions;
- using Microsoft.Linq.Expressions;
- using Microsoft.Scripting.Runtime;
-
- using IronPython.Runtime.Binding;
- using IronPython.Runtime.Operations;
- using IronPython.Runtime.Types;
-
- namespace IronPython.Runtime.Binding {
- using Ast = Microsoft.Linq.Expressions.Expression;
-
- class SetMemberBinder : SetMemberAction, IPythonSite, IExpressionSerializable {
- private readonly BinderState/*!*/ _state;
-
- public SetMemberBinder(BinderState/*!*/ binder, string/*!*/ name)
- : this(binder, name, false) {
- }
-
- public SetMemberBinder(BinderState/*!*/ binder, string/*!*/ name, bool caseInsensitive)
- : base(name, caseInsensitive) {
- _state = binder;
- }
-
- public override MetaObject Fallback(MetaObject self, MetaObject value, MetaObject onBindingError) {
- if (self.NeedsDeferral()) {
- return Defer(self, value);
- }
-
- return Binder.Binder.SetMember(Name, self, value, Ast.Constant(Binder.Context));
- }
-
- public BinderState/*!*/ Binder {
- get {
- return _state;
- }
- }
-
- public override object HashCookie {
- get { return this; }
- }
-
- public override int GetHashCode() {
- return base.GetHashCode() ^ _state.Binder.GetHashCode();
- }
-
- public override bool Equals(object obj) {
- SetMemberBinder ob = obj as SetMemberBinder;
- if (ob == null) {
- return false;
- }
-
- return ob._state.Binder == _state.Binder && base.Equals(obj);
- }
-
- public override string ToString() {
- return "Python SetMember " + Name;
- }
-
- #region IExpressionSerializable Members
-
- public Expression CreateExpression() {
- return Ast.Call(
- typeof(PythonOps).GetMethod("MakeSetAction"),
- BindingHelpers.CreateBinderStateExpression(),
- Ast.Constant(Name)
- );
- }
-
- #endregion
- }
- }
-