private object InternalValue() { for (int i = 0; i <= mParams.Length - 1; i++) { mParamValues[i] = mParams[i].Value; } if (mBaseObject is iEvalValue) { mBaseValue = (iEvalValue)mBaseObject; mBaseValueObject = mBaseValue.Value; } else { mBaseValueObject = mBaseObject; } return(base.mValueDelegate()); }
private iEvalValue mResultValue; // just for some internal opCodeCallMethod(object baseObject, System.Reflection.MemberInfo method, IList <iEvalTypedValue> @params) { if (@params == null) { @params = new iEvalTypedValue[] { } } ; iEvalTypedValue[] newParams = new iEvalTypedValue[@params.Count - 1 + 1]; object[] newParamValues = new object[@params.Count - 1 + 1]; @params.CopyTo(newParams, 0); foreach (iEvalTypedValue p in newParams) { p.ValueChanged += mParamsValueChanged; } mParams = newParams; mParamValues = newParamValues; mBaseObject = baseObject; mMethod = method; if (mBaseObject is iEvalValue) { if (mBaseObject is iEvalTypedValue) { { var withBlock = (iEvalTypedValue)mBaseObject; mBaseSystemType = withBlock.SystemType; mBaseEvalType = withBlock.EvalType; } } else { mBaseSystemType = mBaseObject.GetType(); mBaseEvalType = Globals.GetEvalType(mBaseSystemType); } } else { mBaseSystemType = mBaseObject.GetType(); mBaseEvalType = Globals.GetEvalType(mBaseSystemType); } System.Reflection.ParameterInfo[] paramInfo = null; if (method is System.Reflection.PropertyInfo) { { var withBlock = (System.Reflection.PropertyInfo)method; mResultSystemType = withBlock.PropertyType; paramInfo = withBlock.GetIndexParameters(); } mValueDelegate = GetProperty; } else if (method is System.Reflection.MethodInfo) { { var withBlock = (System.Reflection.MethodInfo)method; mResultSystemType = withBlock.ReturnType; paramInfo = withBlock.GetParameters(); } mValueDelegate = GetMethod; } else if (method is System.Reflection.FieldInfo) { { var withBlock = (System.Reflection.FieldInfo)method; mResultSystemType = withBlock.FieldType; paramInfo = new System.Reflection.ParameterInfo[] { }; } mValueDelegate = GetField; } for (int i = 0; i <= mParams.Length - 1; i++) { if (i < paramInfo.Length) { ConvertToSystemType(ref mParams[i], paramInfo[i].ParameterType); } } if (typeof(iEvalValue).IsAssignableFrom(mResultSystemType)) { mResultValue = (iEvalValue)InternalValue(); if (mResultValue is iEvalTypedValue) { { var withBlock = (iEvalTypedValue)mResultValue; mResultSystemType = withBlock.SystemType; mResultEvalType = withBlock.EvalType; } } else if (mResultValue == null) { mResultSystemType = typeof(object); mResultEvalType = EvalType.Object; } else { object v = mResultValue.Value; if (v == null) { mResultSystemType = typeof(object); mResultEvalType = EvalType.Object; } else { mResultSystemType = v.GetType(); mResultEvalType = Globals.GetEvalType(mResultSystemType); } } } else { mResultSystemType = SystemType; mResultEvalType = Globals.GetEvalType(SystemType); } if (mBaseValue != null) { mBaseValue.ValueChanged += mBaseVariable_ValueChanged; } if (mResultValue != null) { mResultValue.ValueChanged += mResultVariable_ValueChanged; } }