public BindGetIndex ( |
||
binder | An instance of the |
|
indexes | An array of |
|
return |
/// <summary> /// Performs the binding of the dynamic get index operation. /// </summary> /// <param name="target">The target of the dynamic get index operation.</param> /// <param name="args">An array of arguments of the dynamic get index operation.</param> /// <returns>The <see cref="DynamicMetaObject"/> representing the result of the binding.</returns> public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { ContractUtils.RequiresNotNull(target, "target"); ContractUtils.RequiresNotNullItems(args, "args"); return(target.BindGetIndex(this, args)); }
/// <summary> /// Performs the binding of the dynamic get index operation. /// </summary> /// <param name="target">The target of the dynamic get index operation.</param> /// <param name="args">An array of arguments of the dynamic get index operation.</param> /// <returns>The <see cref="DynamicMetaObject"/> representing the result of the binding.</returns> public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { ArgumentNullException.ThrowIfNull(target); ContractUtils.RequiresNotNullItems(args, nameof(args)); return(target.BindGetIndex(this, args)); }
/// <summary> /// Performs the binding of the dynamic get index operation. /// </summary> /// <param name="target">The target of the dynamic get index operation.</param> /// <param name="args">An array of arguments of the dynamic get index operation.</param> /// <returns>The <see cref="DynamicMetaObject"/> representing the result of the binding.</returns> public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { ContractUtils.RequiresNotNull(target, nameof(target)); ContractUtils.RequiresNotNullItems(args, nameof(args)); return target.BindGetIndex(this, args); }
public override DynamicMetaObject/*!*/ FallbackOperation(DynamicMetaObject target, DynamicMetaObject/*!*/[]/*!*/ args, DynamicMetaObject onBindingError) { // TODO: until we use the real GetIndex and SetIndex binders, we // need to do this for COM interop if (Operation == "GetItem") { return target.BindGetIndex(new GetIndexAdapter(this), args); } if (Operation == "SetItem") { DynamicMetaObject[] indexes = ArrayUtils.RemoveLast(args); DynamicMetaObject value = args[args.Length - 1]; return target.BindSetIndex(new SetIndexAdapter(this), indexes, value); } return PythonProtocol.Operation(this, ArrayUtils.Insert(target, args)); }
public static bool TryBindGetIndex(GetIndexBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result) { ContractUtils.RequiresNotNull(binder, "binder"); ContractUtils.RequiresNotNull(instance, "instance"); ContractUtils.RequiresNotNull(args, "args"); if (TryGetMetaObject(ref instance)) { // // Demand Full Trust to proceed with the binding. // new PermissionSet(PermissionState.Unrestricted).Demand(); result = instance.BindGetIndex(binder, args); return true; } else { result = null; return false; } }
public static void TestMetaObject(DynamicMetaObject target, int index, bool isValid = true) { string expectedMethodSignature = "System.Json.JsonValue GetValue(Int32)"; GetIndexBinder binder = new TestGetIndexBinder(); DynamicMetaObject[] indexes = { new DynamicMetaObject(Expression.Parameter(typeof(int)), BindingRestrictions.Empty, index) }; DynamicMetaObject result = target.BindGetIndex(binder, indexes); Assert.IsNotNull(result); MethodCallExpression expression = result.Expression as MethodCallExpression; Assert.IsNotNull(expression); Assert.AreEqual<string>(expectedMethodSignature, expression.Method.ToString()); }
public static void TestBindParams(DynamicMetaObject target) { GetIndexBinder binder = new TestGetIndexBinder(); Expression typeExpression = Expression.Parameter(typeof(int)); DynamicMetaObject[] indexes = { new DynamicMetaObject(typeExpression, BindingRestrictions.Empty, 0), new DynamicMetaObject(typeExpression, BindingRestrictions.Empty, 1), new DynamicMetaObject(typeExpression, BindingRestrictions.Empty, 2) }; ExceptionTestHelper.ExpectException<ArgumentNullException>(() => { var result = target.BindGetIndex(null, indexes); }); ExceptionTestHelper.ExpectException<ArgumentNullException>(() => { var result = target.BindGetIndex(binder, null); }); DynamicMetaObject[][] invalidIndexesParam = { indexes, new DynamicMetaObject[] { new DynamicMetaObject(typeExpression, BindingRestrictions.Empty, null) }, new DynamicMetaObject[] { null }, new DynamicMetaObject[] { } }; foreach (DynamicMetaObject[] indexesParam in invalidIndexesParam) { DynamicMetaObject metaObj = target.BindGetIndex(binder, indexesParam); Expression<Action> expression = Expression.Lambda<Action>(Expression.Block(metaObj.Expression), new ParameterExpression[] { }); ExceptionTestHelper.ExpectException<ArgumentException>(() => { expression.Compile().Invoke(); }, NonSingleNonNullIndexNotSupported); } }
/// <summary> /// Tries to perform binding of the dynamic get index operation. /// </summary> /// <param name="binder">An instance of the <see cref="GetIndexBinder"/> that represents the details of the dynamic operation.</param> /// <param name="instance">The target of the dynamic operation. </param> /// <param name="args">An array of <see cref="DynamicMetaObject"/> instances - arguments to the invoke member operation.</param> /// <param name="result">The new <see cref="DynamicMetaObject"/> representing the result of the binding.</param> /// <returns>true if operation was bound successfully; otherwise, false.</returns> public static bool TryBindGetIndex(GetIndexBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result) { ContractUtils.RequiresNotNull(binder, "binder"); ContractUtils.RequiresNotNull(instance, "instance"); ContractUtils.RequiresNotNull(args, "args"); if (TryGetMetaObjectInvoke(ref instance)) { result = instance.BindGetIndex(binder, args); return true; } else { result = null; return false; } }
/// <summary> /// Tries to perform binding of the dynamic get index operation. /// </summary> /// <param name="binder">An instance of the <see cref="GetIndexBinder"/> that represents the details of the dynamic operation.</param> /// <param name="instance">The target of the dynamic operation. </param> /// <param name="args">An array of <see cref="DynamicMetaObject"/> instances - arguments to the invoke member operation.</param> /// <param name="result">The new <see cref="DynamicMetaObject"/> representing the result of the binding.</param> /// <returns>true if operation was bound successfully; otherwise, false.</returns> public static bool TryBindGetIndex(GetIndexBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result) { if (TryGetMetaObject(ref instance)) { result = instance.BindGetIndex(binder, args); return true; } else { result = null; return false; } }