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); }
private IValue ConvertReturnValue <TRet>(TRet param) { return(ContextValuesMarshaller.ConvertReturnValue <TRet>(param)); }