Exemplo n.º 1
0
 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());
 }
Exemplo n.º 2
0
        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;
            }
        }