ToArray() private method

private ToArray ( ) : System.Reflection.MemberInfo[]
return System.Reflection.MemberInfo[]
Example #1
0
        public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
        {
            MemberInfoList  mems       = new MemberInfoList();
            SimpleHashtable uniqueMems = new SimpleHashtable(32);

            if (!this.noExpando && this.field_table != null) //Add any expando properties
            {
                IEnumerator enu = this.field_table.GetEnumerator();
                while (enu.MoveNext())
                {
                    FieldInfo field = (FieldInfo)enu.Current;
                    mems.Add(field);
                    uniqueMems[field.Name] = field;
                }
            }

            //Add the public members of the built-in objects if they don't already exist
            if (this.isASubClass)
            {
                MemberInfo[] ilMembers = this.GetType().GetMembers(bindingAttr & ~BindingFlags.NonPublic); //Never expose non public members of old style objects
                for (int i = 0, n = ilMembers.Length; i < n; i++)
                {
                    MemberInfo ilMem = ilMembers[i];

                    //Hide any infrastructure stuff in JSObject
                    if (!ilMem.DeclaringType.IsAssignableFrom(Typeob.JSObject) && uniqueMems[ilMem.Name] == null)
                    {
                        MethodInfo method = ilMem as MethodInfo;
                        if (method == null || !method.IsSpecialName)
                        {
                            mems.Add(ilMem);
                            uniqueMems[ilMem.Name] = ilMem;
                        }
                    }
                }
            }

            //Add parent members if they don't already exist
            if (this.parent != null)
            {
                SimpleHashtable cache = this.parent.wrappedMemberCache;
                if (cache == null)
                {
                    cache = this.parent.wrappedMemberCache = new SimpleHashtable(8);
                }
                MemberInfo[] parentMems = ScriptObject.WrapMembers(((IReflect)this.parent).GetMembers(bindingAttr & ~BindingFlags.NonPublic), this.parent, cache);
                for (int i = 0, n = parentMems.Length; i < n; i++)
                {
                    MemberInfo parentMem = parentMems[i];
                    if (uniqueMems[parentMem.Name] == null)
                    {
                        mems.Add(parentMem);
                        //uniqueMems[parentMem.Name] = parentMem; //No need to add to lookup table - no one else will be looking.
                    }
                }
            }

            return(mems.ToArray());
        }
        public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
        {
            MemberInfoList  list      = new MemberInfoList();
            SimpleHashtable hashtable = new SimpleHashtable(0x20);

            if (!this.noExpando && (this.field_table != null))
            {
                IEnumerator enumerator = this.field_table.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    FieldInfo current = (FieldInfo)enumerator.Current;
                    list.Add(current);
                    hashtable[current.Name] = current;
                }
            }
            if (this.isASubClass)
            {
                MemberInfo[] members = base.GetType().GetMembers(bindingAttr & ~BindingFlags.NonPublic);
                int          index   = 0;
                int          length  = members.Length;
                while (index < length)
                {
                    MemberInfo elem = members[index];
                    if (!elem.DeclaringType.IsAssignableFrom(Typeob.JSObject) && (hashtable[elem.Name] == null))
                    {
                        MethodInfo info3 = elem as MethodInfo;
                        if ((info3 == null) || !info3.IsSpecialName)
                        {
                            list.Add(elem);
                            hashtable[elem.Name] = elem;
                        }
                    }
                    index++;
                }
            }
            if (base.parent != null)
            {
                SimpleHashtable wrappedMemberCache = base.parent.wrappedMemberCache;
                if (wrappedMemberCache == null)
                {
                    wrappedMemberCache = base.parent.wrappedMemberCache = new SimpleHashtable(8);
                }
                MemberInfo[] infoArray2 = ScriptObject.WrapMembers(base.parent.GetMembers(bindingAttr & ~BindingFlags.NonPublic), base.parent, wrappedMemberCache);
                int          num3       = 0;
                int          num4       = infoArray2.Length;
                while (num3 < num4)
                {
                    MemberInfo info4 = infoArray2[num3];
                    if (hashtable[info4.Name] == null)
                    {
                        list.Add(info4);
                    }
                    num3++;
                }
            }
            return(list.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());
        }
        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 #5
0
 public override MemberInfo[] GetMembers(BindingFlags bindingAttr){
   MemberInfoList mems = new MemberInfoList();
   SimpleHashtable uniqueMems = new SimpleHashtable(32);
   
   if (!this.noExpando && this.field_table != null){ //Add any expando properties
     IEnumerator enu = this.field_table.GetEnumerator();
     while (enu.MoveNext()){
       FieldInfo field = (FieldInfo)enu.Current;
       mems.Add(field);
       uniqueMems[field.Name] = field;
     }
   }
   
   //Add the public members of the built-in objects if they don't already exist
   if (this.isASubClass){ 
     MemberInfo[] ilMembers = this.GetType().GetMembers(bindingAttr & ~BindingFlags.NonPublic); //Never expose non public members of old style objects
     for (int i = 0, n = ilMembers.Length; i < n; i++){
       MemberInfo ilMem = ilMembers[i];
       
       //Hide any infrastructure stuff in JSObject
       if (!ilMem.DeclaringType.IsAssignableFrom(Typeob.JSObject) && uniqueMems[ilMem.Name] == null){
         MethodInfo method = ilMem as MethodInfo;
         if (method == null || !method.IsSpecialName){
           mems.Add(ilMem);
           uniqueMems[ilMem.Name] = ilMem;
         }
       }
     }
   }
   
   //Add parent members if they don't already exist
   if (this.parent != null){
     SimpleHashtable cache = this.parent.wrappedMemberCache;
     if (cache == null)
       cache = this.parent.wrappedMemberCache = new SimpleHashtable(8);
     MemberInfo[] parentMems = ScriptObject.WrapMembers(((IReflect)this.parent).GetMembers(bindingAttr & ~BindingFlags.NonPublic), this.parent, cache);
     for(int i = 0, n = parentMems.Length; i < n; i++){
       MemberInfo parentMem = parentMems[i];
       if(uniqueMems[parentMem.Name] == null){
         mems.Add(parentMem);
         //uniqueMems[parentMem.Name] = parentMem; //No need to add to lookup table - no one else will be looking.
       }
     }
   }
   
   return mems.ToArray();
 }
 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
 {
     if (this.recursive)
     {
         return new MemberInfo[0];
     }
     MemberInfoList list = new MemberInfoList();
     if (this.isComponentScope)
     {
         MemberInfo[] members = Globals.TypeRefs.ToReferenceContext(base.GetType()).GetMembers(bindingAttr | BindingFlags.DeclaredOnly);
         if (members != null)
         {
             foreach (MemberInfo info in members)
             {
                 list.Add(info);
             }
         }
     }
     else
     {
         if (this.componentScopes != null)
         {
             int num = 0;
             int count = this.componentScopes.Count;
             while (num < count)
             {
                 GlobalScope scope = (GlobalScope) this.componentScopes[num];
                 this.recursive = true;
                 MemberInfo[] infoArray2 = null;
                 try
                 {
                     infoArray2 = scope.GetMembers(bindingAttr);
                 }
                 finally
                 {
                     this.recursive = false;
                 }
                 if (infoArray2 != null)
                 {
                     foreach (MemberInfo info2 in infoArray2)
                     {
                         list.Add(info2);
                     }
                 }
                 num++;
             }
         }
         IEnumerator enumerator = base.field_table.GetEnumerator();
         while (enumerator.MoveNext())
         {
             FieldInfo current = (FieldInfo) enumerator.Current;
             list.Add(current);
         }
     }
     if ((base.parent != null) && (this.isComponentScope || ((bindingAttr & BindingFlags.DeclaredOnly) == BindingFlags.Default)))
     {
         this.recursive = true;
         MemberInfo[] infoArray3 = null;
         try
         {
             infoArray3 = base.parent.GetMembers(bindingAttr);
         }
         finally
         {
             this.recursive = false;
         }
         if (infoArray3 != null)
         {
             foreach (MemberInfo info4 in infoArray3)
             {
                 list.Add(info4);
             }
         }
     }
     return list.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();
 }
        public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
        {
            if (this.recursive)
            {
                return(new MemberInfo[0]);
            }
            MemberInfoList result = new MemberInfoList();

            if (this.isComponentScope)
            {
                MemberInfo[] mems = Globals.TypeRefs.ToReferenceContext(this.GetType()).GetMembers(bindingAttr | BindingFlags.DeclaredOnly);
                if (mems != null)
                {
                    foreach (MemberInfo mem in mems)
                    {
                        result.Add(mem);
                    }
                }
            }
            else
            {
                if (this.componentScopes != null)
                {
                    for (int i = 0, n = this.componentScopes.Count; i < n; i++)
                    {
                        GlobalScope sc = (GlobalScope)this.componentScopes[i];
                        this.recursive = true;
                        MemberInfo[] mems = null;
                        try
                        {
                            mems = sc.GetMembers(bindingAttr);
                        }
                        finally
                        {
                            this.recursive = false;
                        }
                        if (mems != null)
                        {
                            foreach (MemberInfo mem in mems)
                            {
                                result.Add(mem);
                            }
                        }
                    }
                }
                IEnumerator enu = this.field_table.GetEnumerator();
                while (enu.MoveNext())
                {
                    FieldInfo field = (FieldInfo)enu.Current;
                    result.Add(field);
                }
            }
            if (this.parent != null && (this.isComponentScope || ((bindingAttr & BindingFlags.DeclaredOnly) == 0)))
            {
                this.recursive = true;
                MemberInfo[] mems = null;
                try
                {
                    mems = ((ScriptObject)this.parent).GetMembers(bindingAttr);
                }
                finally
                {
                    this.recursive = false;
                }
                if (mems != null)
                {
                    foreach (MemberInfo mem in mems)
                    {
                        result.Add(mem);
                    }
                }
            }
            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();
 }
Example #10
0
        public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
        {
            if (this.recursive)
            {
                return(new MemberInfo[0]);
            }
            MemberInfoList list = new MemberInfoList();

            if (this.isComponentScope)
            {
                MemberInfo[] members = Globals.TypeRefs.ToReferenceContext(base.GetType()).GetMembers(bindingAttr | BindingFlags.DeclaredOnly);
                if (members != null)
                {
                    foreach (MemberInfo info in members)
                    {
                        list.Add(info);
                    }
                }
            }
            else
            {
                if (this.componentScopes != null)
                {
                    int num   = 0;
                    int count = this.componentScopes.Count;
                    while (num < count)
                    {
                        GlobalScope scope = (GlobalScope)this.componentScopes[num];
                        this.recursive = true;
                        MemberInfo[] infoArray2 = null;
                        try
                        {
                            infoArray2 = scope.GetMembers(bindingAttr);
                        }
                        finally
                        {
                            this.recursive = false;
                        }
                        if (infoArray2 != null)
                        {
                            foreach (MemberInfo info2 in infoArray2)
                            {
                                list.Add(info2);
                            }
                        }
                        num++;
                    }
                }
                IEnumerator enumerator = base.field_table.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    FieldInfo current = (FieldInfo)enumerator.Current;
                    list.Add(current);
                }
            }
            if ((base.parent != null) && (this.isComponentScope || ((bindingAttr & BindingFlags.DeclaredOnly) == BindingFlags.Default)))
            {
                this.recursive = true;
                MemberInfo[] infoArray3 = null;
                try
                {
                    infoArray3 = base.parent.GetMembers(bindingAttr);
                }
                finally
                {
                    this.recursive = false;
                }
                if (infoArray3 != null)
                {
                    foreach (MemberInfo info4 in infoArray3)
                    {
                        list.Add(info4);
                    }
                }
            }
            return(list.ToArray());
        }
Example #11
0
        public override MemberInfo[] GetMember(String name, BindingFlags bindingAttr)
        {
            MemberInfoList mems  = new MemberInfoList();
            FieldInfo      field = (FieldInfo)(this.name_table[name]);

            if (field != null)
            {
                if (field.IsPublic)
                {
                    if ((bindingAttr & BindingFlags.Public) == 0)
                    {
                        goto parent;
                    }
                }
                else
                {
                    if ((bindingAttr & BindingFlags.NonPublic) == 0)
                    {
                        goto parent;
                    }
                }
                if (field.IsLiteral)
                {
                    Object val = ((JSMemberField)field).value;
                    if (val is FunctionObject)
                    {
                        FunctionObject func = (FunctionObject)val;
                        if (func.isConstructor)
                        {
                            return(new MemberInfo[0]); //Suppress constructors, they are awkward to handle. The compiler always obtains them via GetConstructor
                        }
                        if (func.isExpandoMethod)
                        {
                            if ((bindingAttr & BindingFlags.Instance) == 0)
                            {
                                goto parent;
                            }
                            mems.Add(field);
                        }
                        else
                        {
                            ((JSMemberField)field).AddOverloadedMembers(mems, this, bindingAttr | BindingFlags.DeclaredOnly);
                        }
                        goto parent;
                    }
                    else if (val is JSProperty)
                    {
                        JSProperty prop           = (JSProperty)val;
                        MethodInfo getterOrSetter = prop.getter != null ? prop.getter : prop.setter;
                        if (getterOrSetter.IsStatic)
                        {
                            if ((bindingAttr & BindingFlags.Static) == 0)
                            {
                                goto parent;
                            }
                        }
                        else
                        {
                            if ((bindingAttr & BindingFlags.Instance) == 0)
                            {
                                goto parent;
                            }
                        }
                        mems.Add(prop);
                        goto parent;
                    }
                    else if (val is ClassScope)
                    {
                        if ((bindingAttr & BindingFlags.Instance) != 0)
                        {
                            if (!((ClassScope)val).owner.isStatic)
                            {
                                mems.Add(field);
                                goto parent;
                            }
                        }
                    }
                }
                if (field.IsStatic)
                {
                    if ((bindingAttr & BindingFlags.Static) == 0)
                    {
                        goto parent;
                    }
                }
                else
                {
                    if ((bindingAttr & BindingFlags.Instance) == 0)
                    {
                        goto parent;
                    }
                }
                mems.Add(field);
            }
parent:
            if (this.owner != null && this.owner.isInterface && ((bindingAttr & BindingFlags.DeclaredOnly) == 0))
            {
                return(this.owner.GetInterfaceMember(name));
            }
            if (this.parent != null && ((bindingAttr & BindingFlags.DeclaredOnly) == 0)) //Add any members found on the superclass
            {
                MemberInfo[] supMembers = this.parent.GetMember(name, bindingAttr);
                if (supMembers != null)
                {
                    foreach (MemberInfo mem in supMembers)
                    {
                        if (mem.MemberType == MemberTypes.Field)
                        {
                            field = (FieldInfo)mem;
                            if (!field.IsStatic && !field.IsLiteral && !(field is JSWrappedField))
                            {
                                field = new JSWrappedField(field, this.parent);
                            }
                            mems.Add(field);
                        }
                        else
                        {
                            mems.Add(ScriptObject.WrapMember(mem, this.parent));
                        }
                    }
                }
            }
            return(mems.ToArray());
        }
Example #12
0
 public override MemberInfo[] GetMembers(BindingFlags bindingAttr){
   if (this.recursive)
     return new MemberInfo[0];
   MemberInfoList result = new MemberInfoList();
   if (this.isComponentScope){
     MemberInfo[] mems = this.GetType().GetMembers(bindingAttr | BindingFlags.DeclaredOnly);
     if (mems != null)
       foreach (MemberInfo mem in mems)
         result.Add(mem);
   }else{
     if (this.componentScopes != null){
       for (int i = 0, n = this.componentScopes.Count; i < n; i++){
         GlobalScope sc = (GlobalScope)this.componentScopes[i];
         this.recursive = true;
         MemberInfo[] mems = null;
         try{
           mems = sc.GetMembers(bindingAttr);
         }finally{
           this.recursive = false;
         }
         if (mems != null)
           foreach (MemberInfo mem in mems)
             result.Add(mem);
       }
     }
     IEnumerator enu = this.field_table.GetEnumerator();
     while (enu.MoveNext()){
       FieldInfo field = (FieldInfo)enu.Current;
       result.Add(field);
     }
   }
   if (this.parent != null && (this.isComponentScope || ((bindingAttr & BindingFlags.DeclaredOnly) == 0)) ){
     this.recursive = true;
     MemberInfo[] mems = null;
     try{
       mems = ((ScriptObject)this.parent).GetMembers(bindingAttr);
     }finally{
       this.recursive = false;
     }
     if (mems != null)
       foreach (MemberInfo mem in mems)
         result.Add(mem);
   }
   return result.ToArray();
 }
Example #13
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();
 }
Example #14
0
 public override MemberInfo[] GetMember(String name, BindingFlags bindingAttr){
   MemberInfoList mems = new MemberInfoList();
   FieldInfo field = (FieldInfo)(this.name_table[name]);
   if (field != null){
     if (field.IsPublic){
       if ((bindingAttr & BindingFlags.Public) == 0) goto parent;
     }else{
       if ((bindingAttr & BindingFlags.NonPublic) == 0) goto parent;
     }
     if (field.IsLiteral){
       Object val = ((JSMemberField)field).value;
       if (val is FunctionObject){
         FunctionObject func = (FunctionObject)val;
         if (func.isConstructor)
           return new MemberInfo[0]; //Suppress constructors, they are awkward to handle. The compiler always obtains them via GetConstructor
         if (func.isExpandoMethod){
           if ((bindingAttr & BindingFlags.Instance) == 0) goto parent;
           mems.Add(field);
         }else
           ((JSMemberField)field).AddOverloadedMembers(mems, this, bindingAttr|BindingFlags.DeclaredOnly);
         goto parent;
       }else if (val is JSProperty){
         JSProperty prop = (JSProperty)val;
         MethodInfo getterOrSetter = prop.getter != null ? prop.getter : prop.setter;
         if (getterOrSetter.IsStatic){
           if ((bindingAttr & BindingFlags.Static) == 0) goto parent;
         }else{
           if ((bindingAttr & BindingFlags.Instance) == 0) goto parent;
         }
         mems.Add(prop);
         goto parent;
       }else if (val is ClassScope){
         if ((bindingAttr & BindingFlags.Instance) != 0){
           if (!((ClassScope)val).owner.isStatic){
             mems.Add(field);
             goto parent;
           }
         }
       }
     }
     if (field.IsStatic){
       if ((bindingAttr & BindingFlags.Static) == 0) goto parent;
     }else{
       if ((bindingAttr & BindingFlags.Instance) == 0) goto parent;
     }
     mems.Add(field);
   }
 parent:
   if (this.owner != null && this.owner.isInterface && ((bindingAttr & BindingFlags.DeclaredOnly) == 0))
     return this.owner.GetInterfaceMember(name);
   if (this.parent != null && ((bindingAttr & BindingFlags.DeclaredOnly) == 0)){ //Add any members found on the superclass
     MemberInfo[] supMembers = this.parent.GetMember(name, bindingAttr);
     if (supMembers != null)
       foreach (MemberInfo mem in supMembers){
         if (mem.MemberType == MemberTypes.Field){
           field = (FieldInfo)mem;
           if (!field.IsStatic && !field.IsLiteral && !(field is JSWrappedField))
             field = new JSWrappedField(field, this.parent);
           mems.Add(field);
         }else
           mems.Add(ScriptObject.WrapMember(mem, this.parent));
       }
   }
   return mems.ToArray();
 }
        public override MemberInfo[] GetMember(string name, BindingFlags bindingAttr)
        {
            MemberInfoList mems = new MemberInfoList();
            FieldInfo      elem = (FieldInfo)base.name_table[name];

            if (elem == null)
            {
                goto Label_0139;
            }
            if (elem.IsPublic)
            {
                if ((bindingAttr & BindingFlags.Public) != BindingFlags.Default)
                {
                    goto Label_0040;
                }
                goto Label_0139;
            }
            if ((bindingAttr & BindingFlags.NonPublic) == BindingFlags.Default)
            {
                goto Label_0139;
            }
Label_0040:
            if (!elem.IsLiteral)
            {
                goto Label_011E;
            }
            object obj2 = ((JSMemberField)elem).value;

            if (obj2 is FunctionObject)
            {
                FunctionObject obj3 = (FunctionObject)obj2;
                if (obj3.isConstructor)
                {
                    return(new MemberInfo[0]);
                }
                if (obj3.isExpandoMethod)
                {
                    if ((bindingAttr & BindingFlags.Instance) != BindingFlags.Default)
                    {
                        mems.Add(elem);
                    }
                }
                else
                {
                    ((JSMemberField)elem).AddOverloadedMembers(mems, this, bindingAttr | BindingFlags.DeclaredOnly);
                }
                goto Label_0139;
            }
            if (!(obj2 is JSProperty))
            {
                if (((obj2 is ClassScope) && ((bindingAttr & BindingFlags.Instance) != BindingFlags.Default)) && !((ClassScope)obj2).owner.isStatic)
                {
                    mems.Add(elem);
                    goto Label_0139;
                }
                goto Label_011E;
            }
            JSProperty property = (JSProperty)obj2;
            MethodInfo info2    = (property.getter != null) ? property.getter : property.setter;

            if (info2.IsStatic)
            {
                if ((bindingAttr & BindingFlags.Static) != BindingFlags.Default)
                {
                    goto Label_00EC;
                }
                goto Label_0139;
            }
            if ((bindingAttr & BindingFlags.Instance) == BindingFlags.Default)
            {
                goto Label_0139;
            }
Label_00EC:
            mems.Add(property);
            goto Label_0139;
Label_011E:
            if (elem.IsStatic)
            {
                if ((bindingAttr & BindingFlags.Static) != BindingFlags.Default)
                {
                    goto Label_0132;
                }
                goto Label_0139;
            }
            if ((bindingAttr & BindingFlags.Instance) == BindingFlags.Default)
            {
                goto Label_0139;
            }
Label_0132:
            mems.Add(elem);
Label_0139:
            if (((this.owner != null) && this.owner.isInterface) && ((bindingAttr & BindingFlags.DeclaredOnly) == BindingFlags.Default))
            {
                return(this.owner.GetInterfaceMember(name));
            }
            if ((base.parent != null) && ((bindingAttr & BindingFlags.DeclaredOnly) == BindingFlags.Default))
            {
                MemberInfo[] member = base.parent.GetMember(name, bindingAttr);
                if (member != null)
                {
                    foreach (MemberInfo info3 in member)
                    {
                        if (info3.MemberType == MemberTypes.Field)
                        {
                            elem = (FieldInfo)info3;
                            if ((!elem.IsStatic && !elem.IsLiteral) && !(elem is JSWrappedField))
                            {
                                elem = new JSWrappedField(elem, base.parent);
                            }
                            mems.Add(elem);
                        }
                        else
                        {
                            mems.Add(ScriptObject.WrapMember(info3, base.parent));
                        }
                    }
                }
            }
            return(mems.ToArray());
        }
Example #16
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[] GetMember(string name, BindingFlags bindingAttr)
 {
     MemberInfoList mems = new MemberInfoList();
     FieldInfo elem = (FieldInfo) base.name_table[name];
     if (elem == null)
     {
         goto Label_0139;
     }
     if (elem.IsPublic)
     {
         if ((bindingAttr & BindingFlags.Public) != BindingFlags.Default)
         {
             goto Label_0040;
         }
         goto Label_0139;
     }
     if ((bindingAttr & BindingFlags.NonPublic) == BindingFlags.Default)
     {
         goto Label_0139;
     }
 Label_0040:
     if (!elem.IsLiteral)
     {
         goto Label_011E;
     }
     object obj2 = ((JSMemberField) elem).value;
     if (obj2 is FunctionObject)
     {
         FunctionObject obj3 = (FunctionObject) obj2;
         if (obj3.isConstructor)
         {
             return new MemberInfo[0];
         }
         if (obj3.isExpandoMethod)
         {
             if ((bindingAttr & BindingFlags.Instance) != BindingFlags.Default)
             {
                 mems.Add(elem);
             }
         }
         else
         {
             ((JSMemberField) elem).AddOverloadedMembers(mems, this, bindingAttr | BindingFlags.DeclaredOnly);
         }
         goto Label_0139;
     }
     if (!(obj2 is JSProperty))
     {
         if (((obj2 is ClassScope) && ((bindingAttr & BindingFlags.Instance) != BindingFlags.Default)) && !((ClassScope) obj2).owner.isStatic)
         {
             mems.Add(elem);
             goto Label_0139;
         }
         goto Label_011E;
     }
     JSProperty property = (JSProperty) obj2;
     MethodInfo info2 = (property.getter != null) ? property.getter : property.setter;
     if (info2.IsStatic)
     {
         if ((bindingAttr & BindingFlags.Static) != BindingFlags.Default)
         {
             goto Label_00EC;
         }
         goto Label_0139;
     }
     if ((bindingAttr & BindingFlags.Instance) == BindingFlags.Default)
     {
         goto Label_0139;
     }
 Label_00EC:
     mems.Add(property);
     goto Label_0139;
 Label_011E:
     if (elem.IsStatic)
     {
         if ((bindingAttr & BindingFlags.Static) != BindingFlags.Default)
         {
             goto Label_0132;
         }
         goto Label_0139;
     }
     if ((bindingAttr & BindingFlags.Instance) == BindingFlags.Default)
     {
         goto Label_0139;
     }
 Label_0132:
     mems.Add(elem);
 Label_0139:
     if (((this.owner != null) && this.owner.isInterface) && ((bindingAttr & BindingFlags.DeclaredOnly) == BindingFlags.Default))
     {
         return this.owner.GetInterfaceMember(name);
     }
     if ((base.parent != null) && ((bindingAttr & BindingFlags.DeclaredOnly) == BindingFlags.Default))
     {
         MemberInfo[] member = base.parent.GetMember(name, bindingAttr);
         if (member != null)
         {
             foreach (MemberInfo info3 in member)
             {
                 if (info3.MemberType == MemberTypes.Field)
                 {
                     elem = (FieldInfo) info3;
                     if ((!elem.IsStatic && !elem.IsLiteral) && !(elem is JSWrappedField))
                     {
                         elem = new JSWrappedField(elem, base.parent);
                     }
                     mems.Add(elem);
                 }
                 else
                 {
                     mems.Add(ScriptObject.WrapMember(info3, base.parent));
                 }
             }
         }
     }
     return mems.ToArray();
 }