public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { ComMethodDesc method; var target = _callable.DispatchComObject; var name = _callable.MemberName; bool holdsNull = value.Value == null && value.HasValue; if (target.TryGetPropertySetter(name, out method, value.LimitType, holdsNull) || target.TryGetPropertySetterExplicit(name, out method, value.LimitType, holdsNull)) { List<ParameterExpression> temps = new List<ParameterExpression>(); List<Expression> initTemps = new List<Expression>(); bool[] isByRef = ComBinderHelpers.ProcessArgumentsForCom(method, ref indexes, temps, initTemps); isByRef = isByRef.AddLast(false); // Convert the value to the target type DynamicMetaObject updatedValue = new DynamicMetaObject(value.CastOrConvertMethodArgument( value.LimitType, name, "SetIndex", temps, initTemps), value.Restrictions); var result = BindComInvoke(method, indexes.AddLast(updatedValue), binder.CallInfo, isByRef, temps, initTemps); // Make sure to return the value; some languages need it. return new DynamicMetaObject( Expression.Block(result.Expression, Expression.Convert(value.Expression, typeof(object))), result.Restrictions ); } return base.BindSetIndex(binder, indexes, value); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { if (indexes.Any(arg => ComBinderHelpers.IsStrongBoxArg(arg))) { return ComBinderHelpers.RewriteStrongBoxAsRef(binder, this, indexes.AddLast(value), true); } ComMethodDesc method; var target = _callable.DispatchComObject; var name = _callable.MemberName; if (target.TryGetPropertySetter(name, out method, value.LimitType) || target.TryGetPropertySetterExplicit(name, out method, value.LimitType)) { return BindComInvoke(method, indexes.AddLast(value), binder.Arguments); } return base.BindSetIndex(binder, indexes, value); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { ComMethodDesc method; var target = _callable.DispatchComObject; var name = _callable.MemberName; bool holdsNull = value.Value == null && value.HasValue; if (target.TryGetPropertySetter(name, out method, value.LimitType, holdsNull) || target.TryGetPropertySetterExplicit(name, out method, value.LimitType, holdsNull)) { bool[] isByRef = ComBinderHelpers.ProcessArgumentsForCom(ref indexes); isByRef = isByRef.AddLast(false); return BindComInvoke(method, indexes.AddLast(value), binder.CallInfo, isByRef); } return base.BindSetIndex(binder, indexes, value); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { ComMethodDesc method; var target = _callable.DispatchComObject; var name = _callable.MemberName; bool holdsNull = value.Value == null && value.HasValue; if (target.TryGetPropertySetter(name, out method, value.LimitType, holdsNull) || target.TryGetPropertySetterExplicit(name, out method, value.LimitType, holdsNull)) { IList<ArgumentInfo> argInfos = binder.Arguments; ComBinderHelpers.ProcessArgumentsForCom(ref indexes, ref argInfos); // add an arginfo for the value argInfos = argInfos.AddLast(Expression.PositionalArg(argInfos.Count)); return BindComInvoke(method, indexes.AddLast(value), argInfos); } return base.BindSetIndex(binder, indexes, value); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { ContractUtils.RequiresNotNull(binder, "binder"); return binder.Defer(WrapSelf(), indexes.AddLast(value)); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { return binder.Defer(WrapSelf(), indexes.AddLast(value)); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { ContractUtils.RequiresNotNull(binder, "binder"); ComMethodDesc setItem; if (_self.TryGetSetItem(out setItem)) { bool[] isByRef = ComBinderHelpers.ProcessArgumentsForCom(ref indexes); isByRef = isByRef.AddLast(false); return BindComInvoke(indexes.AddLast(value), setItem, binder.CallInfo, isByRef); } return base.BindSetIndex(binder, indexes, value); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { ComMethodDesc setItem; if (_self.TryGetSetItem(out setItem)) { List<ParameterExpression> temps = new List<ParameterExpression>(); List<Expression> initTemps = new List<Expression>(); bool[] isByRef = ComBinderHelpers.ProcessArgumentsForCom(setItem, ref indexes, temps, initTemps); isByRef = isByRef.AddLast(false); // Convert the value to the target type DynamicMetaObject updatedValue = new DynamicMetaObject(value.CastOrConvertMethodArgument( value.LimitType, setItem.Name, "SetIndex", temps, initTemps), value.Restrictions); var result = BindComInvoke(indexes.AddLast(updatedValue), setItem, binder.CallInfo, isByRef, temps, initTemps); // Make sure to return the value; some languages need it. return new DynamicMetaObject( Expression.Block(result.Expression, Expression.Convert(value.Expression, typeof(object))), result.Restrictions ); } return base.BindSetIndex(binder, indexes, value); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { ContractUtils.RequiresNotNull(binder, "binder"); ComMethodDesc setItem; if (_self.TryGetSetItem(out setItem)) { IList<ArgumentInfo> argInfos = binder.Arguments; ComBinderHelpers.ProcessArgumentsForCom(ref indexes, ref argInfos); // add an arginfo for the value argInfos = argInfos.AddLast(Expression.PositionalArg(argInfos.Count)); return BindComInvoke(indexes.AddLast(value), setItem, argInfos); } return base.BindSetIndex(binder, indexes, value); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { ContractUtils.RequiresNotNull(binder, "binder"); ComMethodDesc setItem; if (_self.TryGetSetItem(out setItem)) { bool[] isByRef = ComBinderHelpers.ProcessArgumentsForCom(ref indexes); isByRef = isByRef.AddLast(false); var result = BindComInvoke(indexes.AddLast(value), setItem, binder.CallInfo, isByRef); // Make sure to return the value; some languages need it. return new DynamicMetaObject( Expression.Block(result.Expression, Expression.Convert(value.Expression, typeof(object))), result.Restrictions ); } return base.BindSetIndex(binder, indexes, value); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { // // Demand Full Trust to proceed with the binding. // new PermissionSet(PermissionState.Unrestricted).Demand(); ComMethodDesc method; var target = _callable.DispatchComObject; var name = _callable.MemberName; bool holdsNull = value.Value == null && value.HasValue; if (target.TryGetPropertySetter(name, out method, value.LimitType, holdsNull) || target.TryGetPropertySetterExplicit(name, out method, value.LimitType, holdsNull)) { bool[] isByRef = ComBinderHelpers.ProcessArgumentsForCom(ref indexes); isByRef = isByRef.AddLast(false); var result = BindComInvoke(method, indexes.AddLast(value), binder.CallInfo, isByRef); // Make sure to return the value; some languages need it. return new DynamicMetaObject( Expression.Block(result.Expression, Expression.Convert(value.Expression, typeof(object))), result.Restrictions ); } return base.BindSetIndex(binder, indexes, value); }
public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { ContractUtils.RequiresNotNull(binder, "binder"); if (indexes.Any(arg => ComBinderHelpers.IsStrongBoxArg(arg))) { return ComBinderHelpers.RewriteStrongBoxAsRef(binder, this, indexes.AddLast(value), true); } ComMethodDesc setItem; if (_self.TryGetSetItem(out setItem)) { return BindComInvoke(indexes.AddLast(value), setItem, binder.Arguments); } return base.BindSetIndex(binder, indexes, value); }