Example #1
0
 public object this[int index]
 {
     get { return(engine.PrepareResult(list[index], elementType, ScriptMemberFlags.None, true)); }
     set { list[index] = value; }
 }
Example #2
0
        public override bool TryInvokeAuxMember(ScriptEngine engine, 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(engine, value, invokeFlags, args, bindArgs, typeof(IDynamicMetaObjectProvider).IsAssignableFrom(typeof(T)), out result))
                    {
                        return(true);
                    }

                    if (invokeFlags.HasFlag(BindingFlags.GetField) && (args.Length < 1))
                    {
                        result = engine.PrepareResult(value, true);
                        return(true);
                    }

                    result = null;
                    return(false);
                }

                if ((invokeFlags & getPropertyFlags) != 0)
                {
                    result = engine.PrepareResult(value, true);
                    return(true);
                }

                if ((invokeFlags & setPropertyFlags) != 0)
                {
                    if (args.Length == 1)
                    {
                        result = engine.PrepareResult(((IHostVariable)this).Value = args[0], typeof(T), true);
                        return(true);
                    }
                }
            }

            result = null;
            return(false);
        }