public override object Invoke(HostItem hostItem) { if (reflectionMethods.Contains(method, MemberComparer <MethodInfo> .Instance)) { hostItem.Engine.CheckReflection(); } return(InvokeHelpers.InvokeMethod(hostItem, hostTarget.InvokeTarget, method, args)); }
public override object Invoke(ScriptEngine engine) { if (method == getTypeMethod) { engine.CheckReflection(); } return(InvokeHelpers.InvokeMethod(hostTarget.InvokeTarget, method, args)); }
public override object Invoke(HostItem hostItem) { if (method == getTypeMethod) { hostItem.Engine.CheckReflection(); } return(InvokeHelpers.InvokeMethod(hostItem, hostTarget.InvokeTarget, method, args)); }
public override bool TryInvokeAuxMember(IHostInvokeContext context, string name, BindingFlags invokeFlags, object[] args, object[] bindArgs, out object result) { const BindingFlags getPropertyFlags = BindingFlags.GetField | BindingFlags.GetProperty; const BindingFlags setPropertyFlags = BindingFlags.SetProperty | BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty; if (name == "out") { if ((invokeFlags & getPropertyFlags) != 0) { result = new OutArg <T>(this); return(true); } } else if (name == "ref") { if ((invokeFlags & getPropertyFlags) != 0) { result = new RefArg <T>(this); return(true); } } else if (name == "value") { if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) { if (InvokeHelpers.TryInvokeObject(context, value, invokeFlags, args, bindArgs, typeof(IDynamicMetaObjectProvider).IsAssignableFrom(typeof(T)), out result)) { return(true); } if (invokeFlags.HasFlag(BindingFlags.GetField) && (args.Length < 1)) { result = context.Engine.PrepareResult(value, ScriptMemberFlags.None, false); return(true); } result = null; return(false); } if ((invokeFlags & getPropertyFlags) != 0) { result = context.Engine.PrepareResult(value, ScriptMemberFlags.None, false); return(true); } if ((invokeFlags & setPropertyFlags) != 0) { if (args.Length == 1) { result = context.Engine.PrepareResult(((IHostVariable)this).Value = args[0], typeof(T), ScriptMemberFlags.None, false); return(true); } } } result = null; return(false); }