public override bool TrySetIndex(SetIndexBinder binder, object[] indexes, object value)
        {
            if (!IsIndexed)
            {
                return(false);
            }

            var index = ContextValuesMarshaller.ConvertReturnValue(indexes[0], indexes[0].GetType());

            SetIndexedValue(index, ContextValuesMarshaller.ConvertReturnValue(value, value.GetType()));
            return(true);
        }
        public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result)
        {
            if (!IsIndexed)
            {
                result = null;
                return(false);
            }

            var index = ContextValuesMarshaller.ConvertReturnValue(indexes[0], indexes[0].GetType());

            result = ContextValuesMarshaller.ConvertToCLRObject(GetIndexedValue(index));
            return(true);
        }
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            try
            {
                var propIdx = FindProperty(binder.Name);
                if (IsPropWritable(propIdx))
                {
                    return(false);
                }

                SetPropValue(propIdx, ContextValuesMarshaller.ConvertReturnValue(value, value.GetType()));

                return(true);
            }
            catch (PropertyAccessException)
            {
                return(false);
            }
            catch (NotSupportedException)
            {
                return(false);
            }
        }
        public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
        {
            int methIdx;

            try
            {
                methIdx = FindMethod(binder.Name);
            }
            catch (MethodAccessException)
            {
                result = null;
                return(false);
            }

            var methInfo   = GetMethodInfo(methIdx);
            var valueArgs  = new IValue[methInfo.Params.Length];
            var passedArgs = args.Select(x => ContextValuesMarshaller.ConvertReturnValue(x, x.GetType())).ToArray();

            for (int i = 0; i < valueArgs.Length; i++)
            {
                if (i < passedArgs.Length)
                {
                    valueArgs[i] = passedArgs[i];
                }
                else
                {
                    valueArgs[i] = ValueFactory.CreateInvalidValueMarker();
                }
            }

            IValue methResult;

            CallAsFunction(methIdx, valueArgs, out methResult);
            result = methResult == null? null : ContextValuesMarshaller.ConvertToCLRObject(methResult);

            return(true);
        }
Exemple #5
0
 private IValue ConvertReturnValue <TRet>(TRet param)
 {
     return(ContextValuesMarshaller.ConvertReturnValue <TRet>(param));
 }