Ejemplo n.º 1
0
 public InvocationListElement(IList <object> elements, IServiceProvider services)
 {
     this.HandleFirstElement(elements, services);
     LinkElements(elements);
     Resolve(elements, services);
     this.myTail = (MemberElement)elements[elements.Count - 1];
 }
Ejemplo n.º 2
0
        public void Link(MemberElement nextElement)
        {
            this.myNext = nextElement;
            var flag = nextElement != null;

            if (flag)
            {
                nextElement.myPrevious = this;
            }
        }
Ejemplo n.º 3
0
        private void BindToMethod(ICollection <MethodInfo> methods, MemberElement previous, Type[] argTypes)
        {
            var customInfos = new List <CustomMethodInfo>();

            methods.Each(m => customInfos.Add(new CustomMethodInfo(m)));
            //try
            //{
            //    var enumerator = methods.GetEnumerator();
            //    while (enumerator.MoveNext())
            //    {
            //        var mi = enumerator.Current;
            //        var cmi = new CustomMethodInfo(mi);
            //        customInfos.Add(cmi);
            //    }
            //}
            //finally
            //{
            //    IEnumerator<MethodInfo> enumerator;
            //    if (enumerator != null)
            //    {
            //        enumerator.Dispose();
            //    }
            //}

            var arr = customInfos.ToArray();

            customInfos.Clear();
            var array = arr;

            checked
            {
                for (var i = 0; i < array.Length; i++)
                {
                    var cmi2 = array[i];
                    var flag = cmi2.IsMatch(argTypes);
                    if (flag)
                    {
                        customInfos.Add(cmi2);
                    }
                }
                var flag2 = customInfos.Count == 0;
                if (flag2)
                {
                    this.ThrowFunctionNotFoundException(previous);
                }
                else
                {
                    this.ResolveOverloads(customInfos.ToArray(), previous, argTypes);
                }
            }
        }
Ejemplo n.º 4
0
        private void ThrowNoAccessibleMethodsException(MemberElement previous)
        {
            var flag = previous == null;

            if (flag)
            {
                this.ThrowCompileException("NoAccessibleMatches", CompileExceptionReason.AccessDenied, this.myName, this.myArguments);
            }
            else
            {
                this.ThrowCompileException("NoAccessibleMatchesOnType", CompileExceptionReason.AccessDenied, this.myName,
                                           this.myArguments, previous.TargetType.Name);
            }
        }
Ejemplo n.º 5
0
        private void ThrowFunctionNotFoundException(MemberElement previous)
        {
            var flag = previous == null;

            if (flag)
            {
                this.ThrowCompileException("UndefinedFunction", CompileExceptionReason.UndefinedName, this.myName, this.myArguments);
            }
            else
            {
                this.ThrowCompileException("UndefinedFunctionOnType", CompileExceptionReason.UndefinedName, this.myName,
                                           this.myArguments, previous.TargetType.Name);
            }
        }
Ejemplo n.º 6
0
        private void AddReferencedVariable(MemberElement previous)
        {
            var flag = previous != null;

            if (!flag)
            {
                var flag2 = this.myVariableType != null || this.myOptions.IsOwnerType(this.MemberOwnerType);
                if (flag2)
                {
                    var info = (ExpressionInfo)this.myServices.GetService(typeof(ExpressionInfo));
                    info.AddReferencedVariable(this.myName);
                }
            }
        }
Ejemplo n.º 7
0
        private static void LinkElements(IList <object> elements)
        {
            var num = elements.Count - 1;

            for (var i = 0; i <= num; i++)
            {
                var           current     = (MemberElement)elements[i];
                MemberElement nextElement = null;
                var           flag        = i + 1 < elements.Count;
                if (flag)
                {
                    nextElement = (MemberElement)elements[i + 1];
                }
                current.Link(nextElement);
            }
        }
Ejemplo n.º 8
0
        private bool ResolveVirtualProperty(MemberElement previous)
        {
            var  flag = previous == null;
            bool resolveVirtualProperty;

            if (flag)
            {
                resolveVirtualProperty = false;
            }
            else
            {
                var coll = TypeDescriptor.GetProperties(previous.ResultType);
                this.myPropertyDescriptor = coll.Find(this.myName, true);
                resolveVirtualProperty    = this.myPropertyDescriptor != null;
            }
            return(resolveVirtualProperty);
        }
Ejemplo n.º 9
0
        private bool ResolveFieldProperty(MemberElement previous)
        {
            var members = this.GetMembers(MemberTypes.Field | MemberTypes.Property);

            members = this.GetAccessibleMembers(members);
            var flag = members.Length == 0;
            var resolveFieldProperty = false;

            if (flag)
            {
                resolveFieldProperty = this.ResolveVirtualProperty(previous);
            }
            else
            {
                var flag2 = members.Length > 1;
                if (flag2)
                {
                    var flag3 = previous == null;
                    if (flag3)
                    {
                        this.ThrowCompileException("IdentifierIsAmbiguous", CompileExceptionReason.AmbiguousMatch, this.myName);
                    }
                    else
                    {
                        this.ThrowCompileException("IdentifierIsAmbiguousOnType", CompileExceptionReason.AmbiguousMatch, this.myName,
                                                   previous.TargetType.Name);
                    }
                }
                else
                {
                    this.myField = members[0] as FieldInfo;
                    var flag4 = this.myField != null;
                    if (flag4)
                    {
                        resolveFieldProperty = true;
                    }
                    else
                    {
                        this.myProperty      = (PropertyInfo)members[0];
                        resolveFieldProperty = true;
                    }
                }
            }
            return(resolveFieldProperty);
        }
Ejemplo n.º 10
0
        private void ResolveOverloads(CustomMethodInfo[] infos, MemberElement previous, Type[] argTypes)
        {
            var array = infos;

            checked
            {
                for (var i = 0; i < array.Length; i++)
                {
                    var cmi = array[i];
                    cmi.ComputeScore(argTypes);
                }
                Array.Sort(infos);
                infos = this.GetAccessibleInfos(infos);
                var flag = infos.Length == 0;
                if (flag)
                {
                    this.ThrowNoAccessibleMethodsException(previous);
                }
                this.DetectAmbiguousMatches(infos);
                this.myTargetMethodInfo = infos[0];
            }
        }
Ejemplo n.º 11
0
 protected static bool IsElementPublic(MemberElement e)
 {
     return(e.IsPublic);
 }
Ejemplo n.º 12
0
 public bool IsAccessible(MemberElement owner)
 {
     return(owner.IsMemberAccessible(this.myTarget));
 }