AddRange() private method

private AddRange ( MemberInfo elems ) : void
elems System.Reflection.MemberInfo
return void
Example #1
0
        //Called when class is used as a base class. Need to give the same information as the type would, once this is compiled to IL.
        //However, bindingAttr is ignored because this method is never legitimately called by something other than the compiler.
        public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
        {
            MemberInfoList mems = new MemberInfoList();
            IEnumerator    enu  = this.field_table.GetEnumerator();

            while (enu.MoveNext())
            {
                FieldInfo field = (FieldInfo)enu.Current;
                if (field.IsLiteral && field is JSMemberField)
                {
                    Object val = null;
                    if ((val = ((JSMemberField)field).value) is FunctionObject)
                    {
                        if (((FunctionObject)val).isConstructor)
                        {
                            continue; //Suppress constructors, they are awkward to handle. The compiler always obtains them via GetConstructor
                        }
                        ((JSMemberField)field).AddOverloadedMembers(mems, this,
                                                                    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly);
                    }
                    else if (val is JSProperty)
                    {
                        mems.Add((MemberInfo)val);
                    }
                    else
                    {
                        mems.Add(field);
                    }
                }
                else
                {
                    mems.Add(field);
                }
            }
            if (this.parent != null) //Add any members found on the prototype
            {
                mems.AddRange(this.parent.GetMembers(bindingAttr));
            }
            return(mems.ToArray());
        }
        public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
        {
            MemberInfoList mems       = new MemberInfoList();
            IEnumerator    enumerator = base.field_table.GetEnumerator();

            while (enumerator.MoveNext())
            {
                FieldInfo current = (FieldInfo)enumerator.Current;
                if (current.IsLiteral && (current is JSMemberField))
                {
                    object obj2 = null;
                    if ((obj2 = ((JSMemberField)current).value) is FunctionObject)
                    {
                        if (!((FunctionObject)obj2).isConstructor)
                        {
                            ((JSMemberField)current).AddOverloadedMembers(mems, this, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
                        }
                    }
                    else if (obj2 is JSProperty)
                    {
                        mems.Add((MemberInfo)obj2);
                    }
                    else
                    {
                        mems.Add(current);
                    }
                }
                else
                {
                    mems.Add(current);
                }
            }
            if (base.parent != null)
            {
                mems.AddRange(base.parent.GetMembers(bindingAttr));
            }
            return(mems.ToArray());
        }
Example #3
0
 //Called when class is used as a base class. Need to give the same information as the type would, once this is compiled to IL.
 //However, bindingAttr is ignored because this method is never legitimately called by something other than the compiler.
 public override MemberInfo[] GetMembers(BindingFlags bindingAttr){
   MemberInfoList mems = new MemberInfoList();
   IEnumerator enu = this.field_table.GetEnumerator();
   while (enu.MoveNext()){
     FieldInfo field = (FieldInfo)enu.Current;
     if (field.IsLiteral && field is JSMemberField){
       Object val = null;
       if ((val = ((JSMemberField)field).value) is FunctionObject){
         if (((FunctionObject)val).isConstructor)
           continue; //Suppress constructors, they are awkward to handle. The compiler always obtains them via GetConstructor
         ((JSMemberField)field).AddOverloadedMembers(mems, this, 
            BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static|BindingFlags.DeclaredOnly);
       }else if (val is JSProperty){
         mems.Add((MemberInfo)val);
       }else
         mems.Add(field);
     }else
       mems.Add(field);
   }
   if (this.parent != null) //Add any members found on the prototype
     mems.AddRange(this.parent.GetMembers(bindingAttr));
   return mems.ToArray();
 }
 internal static MemberInfo[] GetInterfaceMembers(string name, Type t)
 {
     BindingFlags bindingAttr = BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly;
     MemberInfo[] member = t.GetMember(name, bindingAttr);
     Type[] interfaces = t.GetInterfaces();
     if ((interfaces == null) || (interfaces.Length == 0))
     {
         return member;
     }
     ArrayList list = new ArrayList(interfaces);
     MemberInfoList list2 = new MemberInfoList();
     list2.AddRange(member);
     for (int i = 0; i < list.Count; i++)
     {
         Type type = (Type) list[i];
         member = type.GetMember(name, bindingAttr);
         if (member != null)
         {
             list2.AddRange(member);
         }
         foreach (Type type2 in type.GetInterfaces())
         {
             if (list.IndexOf(type2) == -1)
             {
                 list.Add(type2);
             }
         }
     }
     return list2.ToArray();
 }
Example #5
0
 //Returns a list of member infos that are sorted by declaring type. Superclass members always follow derived class members.
 private MemberInfoList GetAllKnownInstanceBindingsForThisName(){
   IReflect[] classes = this.GetAllEligibleClasses();
   MemberInfoList result = new MemberInfoList();
   foreach (IReflect c in classes){
     if (c is ClassScope){
       if (((ClassScope)c).ParentIsInSamePackage())
         result.AddRange(c.GetMember(name, BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.DeclaredOnly));
       else
         result.AddRange(c.GetMember(name, BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance));
     }else
       result.AddRange(c.GetMember(name, BindingFlags.Public|BindingFlags.Instance));
   }
   return result;
 }
Example #6
0
 internal static MemberInfo[] GetInterfaceMembers(String name, Type t){
   BindingFlags flags = BindingFlags.Public|BindingFlags.Instance|BindingFlags.Static|BindingFlags.DeclaredOnly;
   MemberInfo[] members = t.GetMember(name, flags);
   Type[] baseInts = t.GetInterfaces();
   if (baseInts == null || baseInts.Length == 0) return members;
   ArrayList baseInterfaces = new ArrayList(baseInts);
   MemberInfoList result = new MemberInfoList();
   result.AddRange(members);
   for (int i = 0; i < baseInterfaces.Count; i++){
     Type bi = (Type)baseInterfaces[i];
     members = bi.GetMember(name, flags);
     if (members != null) result.AddRange(members);
     foreach (Type bbi in bi.GetInterfaces()){
       if (baseInterfaces.IndexOf(bbi) == -1)
         baseInterfaces.Add(bbi);
     }
   }
   return result.ToArray();
 }
 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
 {
     MemberInfoList mems = new MemberInfoList();
     IEnumerator enumerator = base.field_table.GetEnumerator();
     while (enumerator.MoveNext())
     {
         FieldInfo current = (FieldInfo) enumerator.Current;
         if (current.IsLiteral && (current is JSMemberField))
         {
             object obj2 = null;
             if ((obj2 = ((JSMemberField) current).value) is FunctionObject)
             {
                 if (!((FunctionObject) obj2).isConstructor)
                 {
                     ((JSMemberField) current).AddOverloadedMembers(mems, this, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
                 }
             }
             else if (obj2 is JSProperty)
             {
                 mems.Add((MemberInfo) obj2);
             }
             else
             {
                 mems.Add(current);
             }
         }
         else
         {
             mems.Add(current);
         }
     }
     if (base.parent != null)
     {
         mems.AddRange(base.parent.GetMembers(bindingAttr));
     }
     return mems.ToArray();
 }