Ejemplo n.º 1
0
 internal void AddOverloadedMembers(MemberInfoList mems, ClassScope scope, BindingFlags attrs){
   JSMemberField field = this;
   while (field != null){
     MethodInfo meth = ((JSMemberField)field).GetAsMethod(scope);
     if (meth.IsStatic){
       if ((attrs & BindingFlags.Static) == 0) goto next;
     }else{
       if ((attrs & BindingFlags.Instance) == 0) goto next;
     }
     if (meth.IsPublic){
       if ((attrs & BindingFlags.Public) == 0) goto next;
     }else{
       if ((attrs & BindingFlags.NonPublic) == 0) goto next;
     }
     mems.Add(meth);
   next:
     field = field.nextOverload;
   }
   if ((attrs & BindingFlags.DeclaredOnly) != 0 && (attrs&BindingFlags.FlattenHierarchy) == 0) return;
   IReflect superClass = scope.GetSuperType();
   MemberInfo[] supMembers = superClass.GetMember(this.Name, attrs&~BindingFlags.DeclaredOnly);
   foreach (MemberInfo supMember in supMembers)
     if (supMember.MemberType == MemberTypes.Method)
       mems.Add(supMember);
 }
 internal TypeReflector(Type type)
   : base(null){
   this.defaultMembers = null;
   ArrayList memberLookupTable = new ArrayList(512);
   int count = 0;
   SimpleHashtable staticMembers = new SimpleHashtable(256);
   foreach (MemberInfo member in type.GetMembers(BindingFlags.Public|BindingFlags.Static|BindingFlags.FlattenHierarchy)){
     String name = member.Name;
     Object ob = staticMembers[name];
     if (ob == null){
       staticMembers[name] = count++; //Avoid allocating an array until needed
       memberLookupTable.Add(member);
     }else{
       int index = (int)ob;
       ob = memberLookupTable[index];
       MemberInfo firstMember = ob as MemberInfo;
       if (firstMember != null){
         MemberInfoList mems = new MemberInfoList(); //Allocate a flexarray of MemberInfo, and turn it into a fixed array when GetMember is called for this name
         mems.Add(firstMember);
         mems.Add(member);
         memberLookupTable[index] = mems;
       }else
         ((MemberInfoList)ob).Add(member);
     }
   }
   this.staticMembers = staticMembers;
   SimpleHashtable instanceMembers = new SimpleHashtable(256);
   foreach (MemberInfo member in type.GetMembers(BindingFlags.Public|BindingFlags.Instance)){
     String name = member.Name;
     Object ob = instanceMembers[name];
     if (ob == null){
       instanceMembers[name] = count++; //Avoid allocating an array until needed
       memberLookupTable.Add(member);
     }else{
       int index = (int)ob;
       ob = memberLookupTable[index];
       MemberInfo firstMember = ob as MemberInfo;
       if (firstMember != null){
         MemberInfoList mems = new MemberInfoList();
         mems.Add(firstMember);
         mems.Add(member);
         memberLookupTable[index] = mems;
       }else
         ((MemberInfoList)ob).Add(member);
     }
   }
   this.instanceMembers = instanceMembers;
   this.memberLookupTable = memberLookupTable;
   this.memberInfos = new MemberInfo[count][];
   this.type = type;
   this.implementsIReflect = null;
   this.hashCode = (uint)type.GetHashCode();
   this.next = null;
 }
Ejemplo n.º 3
0
        internal void AddOverloadedMembers(MemberInfoList mems, ClassScope scope, BindingFlags attrs)
        {
            for (JSMemberField field = this; field != null; field = field.nextOverload)
            {
                MethodInfo asMethod = field.GetAsMethod(scope);
                if (asMethod.IsStatic)
                {
                    if ((attrs & BindingFlags.Static) != BindingFlags.Default)
                    {
                        goto Label_0020;
                    }
                    continue;
                }
                if ((attrs & BindingFlags.Instance) == BindingFlags.Default)
                {
                    continue;
                }
Label_0020:
                if (asMethod.IsPublic)
                {
                    if ((attrs & BindingFlags.Public) != BindingFlags.Default)
                    {
                        goto Label_0036;
                    }
                    continue;
                }
                if ((attrs & BindingFlags.NonPublic) == BindingFlags.Default)
                {
                    continue;
                }
Label_0036:
                mems.Add(asMethod);
            }
            if (((attrs & BindingFlags.DeclaredOnly) == BindingFlags.Default) || ((attrs & BindingFlags.FlattenHierarchy) != BindingFlags.Default))
            {
                foreach (MemberInfo info2 in scope.GetSuperType().GetMember(this.Name, attrs & ~BindingFlags.DeclaredOnly))
                {
                    if (info2.MemberType == MemberTypes.Method)
                    {
                        mems.Add(info2);
                    }
                }
            }
        }
 internal void AddOverloadedMembers(MemberInfoList mems, ClassScope scope, BindingFlags attrs)
 {
     for (JSMemberField field = this; field != null; field = field.nextOverload)
     {
         MethodInfo asMethod = field.GetAsMethod(scope);
         if (asMethod.IsStatic)
         {
             if ((attrs & BindingFlags.Static) != BindingFlags.Default)
             {
                 goto Label_0020;
             }
             continue;
         }
         if ((attrs & BindingFlags.Instance) == BindingFlags.Default)
         {
             continue;
         }
     Label_0020:
         if (asMethod.IsPublic)
         {
             if ((attrs & BindingFlags.Public) != BindingFlags.Default)
             {
                 goto Label_0036;
             }
             continue;
         }
         if ((attrs & BindingFlags.NonPublic) == BindingFlags.Default)
         {
             continue;
         }
     Label_0036:
         mems.Add(asMethod);
     }
     if (((attrs & BindingFlags.DeclaredOnly) == BindingFlags.Default) || ((attrs & BindingFlags.FlattenHierarchy) != BindingFlags.Default))
     {
         foreach (MemberInfo info2 in scope.GetSuperType().GetMember(this.Name, attrs & ~BindingFlags.DeclaredOnly))
         {
             if (info2.MemberType == MemberTypes.Method)
             {
                 mems.Add(info2);
             }
         }
     }
 }
Ejemplo n.º 5
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());
        }
Ejemplo n.º 6
0
 internal TypeReflector(Type type)
   : base(null){
   this.defaultMembers = null;
   SimpleHashtable staticMembers = new SimpleHashtable(256);
   foreach (MemberInfo member in type.GetMembers(BindingFlags.Public|BindingFlags.Static|BindingFlags.FlattenHierarchy)){
     String name = member.Name;
     Object ob = staticMembers[name];
     if (ob == null)
       staticMembers[name] = member; //Avoid allocating an array until needed
     else if (ob is MemberInfo){
       MemberInfoList mems = new MemberInfoList(); //Allocate a flexarray of MemberInfo, and turn it into a fixed array when GetMember is called for this name
       mems.Add((MemberInfo)ob);
       mems.Add(member);
       staticMembers[name] = mems;
     }else
       ((MemberInfoList)ob).Add(member);
   }
   this.staticMembers = staticMembers;
   SimpleHashtable instanceMembers = new SimpleHashtable(256);
   foreach (MemberInfo member in type.GetMembers(BindingFlags.Public|BindingFlags.Instance)){
     String name = member.Name;
     Object ob = instanceMembers[name];
     if (ob == null)
       instanceMembers[name] = member; //Avoid allocating an array until needed
     else if (ob is MemberInfo){
       MemberInfoList mems = new MemberInfoList();
       mems.Add((MemberInfo)ob);
       mems.Add(member);
       instanceMembers[name] = mems;
     }else
       ((MemberInfoList)ob).Add(member);
   }
   this.instanceMembers = instanceMembers;
   this.memberInfos = new MemberInfo[staticMembers.count+instanceMembers.count][];
   this.count = 0;
   this.type = type;
   this.implementsIReflect = null;
   this.hashCode = (uint)type.GetHashCode();
   this.next = null;
 }
        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());
        }
 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();
 }
Ejemplo n.º 9
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();
 }
        internal TypeReflector(Type type) : base(null)
        {
            this.defaultMembers = null;
            ArrayList       list      = new ArrayList(0x200);
            int             num       = 0;
            SimpleHashtable hashtable = new SimpleHashtable(0x100);

            foreach (MemberInfo info in type.GetMembers(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static))
            {
                string name = info.Name;
                object obj2 = hashtable[name];
                if (obj2 == null)
                {
                    hashtable[name] = num++;
                    list.Add(info);
                }
                else
                {
                    int num2 = (int)obj2;
                    obj2 = list[num2];
                    MemberInfo elem = obj2 as MemberInfo;
                    if (elem != null)
                    {
                        MemberInfoList list2 = new MemberInfoList();
                        list2.Add(elem);
                        list2.Add(info);
                        list[num2] = list2;
                    }
                    else
                    {
                        ((MemberInfoList)obj2).Add(info);
                    }
                }
            }
            this.staticMembers = hashtable;
            SimpleHashtable hashtable2 = new SimpleHashtable(0x100);

            foreach (MemberInfo info3 in type.GetMembers(BindingFlags.Public | BindingFlags.Instance))
            {
                string str2 = info3.Name;
                object obj3 = hashtable2[str2];
                if (obj3 == null)
                {
                    hashtable2[str2] = num++;
                    list.Add(info3);
                }
                else
                {
                    int num3 = (int)obj3;
                    obj3 = list[num3];
                    MemberInfo info4 = obj3 as MemberInfo;
                    if (info4 != null)
                    {
                        MemberInfoList list3 = new MemberInfoList();
                        list3.Add(info4);
                        list3.Add(info3);
                        list[num3] = list3;
                    }
                    else
                    {
                        ((MemberInfoList)obj3).Add(info3);
                    }
                }
            }
            this.instanceMembers   = hashtable2;
            this.memberLookupTable = list;
            this.memberInfos       = new MemberInfo[num][];
            this.type = type;
            this.implementsIReflect = null;
            this.is__ComObject      = null;
            this.hashCode           = (uint)type.GetHashCode();
            this.next = null;
        }
 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();
 }
Ejemplo n.º 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();
 }
Ejemplo n.º 13
0
 internal ListIter(MemberInfoList list)
 {
     current = list.Head;
 }
Ejemplo n.º 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());
        }
Ejemplo n.º 15
0
        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());
        }
Ejemplo n.º 16
0
        internal ChainHash(int size)
        {
            bucket = new MemberInfoList [size];

            for (int i = 0; i < size; i++)
                bucket [i] = new MemberInfoList ();
        }
Ejemplo n.º 17
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();
 }
Ejemplo n.º 19
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();
 }
Ejemplo n.º 20
0
 internal ListIter(MemberInfoList list)
 {
     current = list.Head;
 }
Ejemplo n.º 21
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());
        }
Ejemplo n.º 22
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;
 }
 internal TypeReflector(Type type) : base(null)
 {
     this.defaultMembers = null;
     ArrayList list = new ArrayList(0x200);
     int num = 0;
     SimpleHashtable hashtable = new SimpleHashtable(0x100);
     foreach (MemberInfo info in type.GetMembers(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static))
     {
         string name = info.Name;
         object obj2 = hashtable[name];
         if (obj2 == null)
         {
             hashtable[name] = num++;
             list.Add(info);
         }
         else
         {
             int num2 = (int) obj2;
             obj2 = list[num2];
             MemberInfo elem = obj2 as MemberInfo;
             if (elem != null)
             {
                 MemberInfoList list2 = new MemberInfoList();
                 list2.Add(elem);
                 list2.Add(info);
                 list[num2] = list2;
             }
             else
             {
                 ((MemberInfoList) obj2).Add(info);
             }
         }
     }
     this.staticMembers = hashtable;
     SimpleHashtable hashtable2 = new SimpleHashtable(0x100);
     foreach (MemberInfo info3 in type.GetMembers(BindingFlags.Public | BindingFlags.Instance))
     {
         string str2 = info3.Name;
         object obj3 = hashtable2[str2];
         if (obj3 == null)
         {
             hashtable2[str2] = num++;
             list.Add(info3);
         }
         else
         {
             int num3 = (int) obj3;
             obj3 = list[num3];
             MemberInfo info4 = obj3 as MemberInfo;
             if (info4 != null)
             {
                 MemberInfoList list3 = new MemberInfoList();
                 list3.Add(info4);
                 list3.Add(info3);
                 list[num3] = list3;
             }
             else
             {
                 ((MemberInfoList) obj3).Add(info3);
             }
         }
     }
     this.instanceMembers = hashtable2;
     this.memberLookupTable = list;
     this.memberInfos = new MemberInfo[num][];
     this.type = type;
     this.implementsIReflect = null;
     this.is__ComObject = null;
     this.hashCode = (uint) type.GetHashCode();
     this.next = null;
 }
Ejemplo n.º 24
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());
        }
Ejemplo n.º 26
0
        internal TypeReflector(Type type)
            : base(null)
        {
            this.defaultMembers = null;
            ArrayList       memberLookupTable = new ArrayList(512);
            int             count             = 0;
            SimpleHashtable staticMembers     = new SimpleHashtable(256);

            foreach (MemberInfo member in type.GetMembers(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy))
            {
                String name = member.Name;
                Object ob   = staticMembers[name];
                if (ob == null)
                {
                    staticMembers[name] = count++; //Avoid allocating an array until needed
                    memberLookupTable.Add(member);
                }
                else
                {
                    int index = (int)ob;
                    ob = memberLookupTable[index];
                    MemberInfo firstMember = ob as MemberInfo;
                    if (firstMember != null)
                    {
                        MemberInfoList mems = new MemberInfoList(); //Allocate a flexarray of MemberInfo, and turn it into a fixed array when GetMember is called for this name
                        mems.Add(firstMember);
                        mems.Add(member);
                        memberLookupTable[index] = mems;
                    }
                    else
                    {
                        ((MemberInfoList)ob).Add(member);
                    }
                }
            }
            this.staticMembers = staticMembers;
            SimpleHashtable instanceMembers = new SimpleHashtable(256);

            foreach (MemberInfo member in type.GetMembers(BindingFlags.Public | BindingFlags.Instance))
            {
                String name = member.Name;
                Object ob   = instanceMembers[name];
                if (ob == null)
                {
                    instanceMembers[name] = count++; //Avoid allocating an array until needed
                    memberLookupTable.Add(member);
                }
                else
                {
                    int index = (int)ob;
                    ob = memberLookupTable[index];
                    MemberInfo firstMember = ob as MemberInfo;
                    if (firstMember != null)
                    {
                        MemberInfoList mems = new MemberInfoList();
                        mems.Add(firstMember);
                        mems.Add(member);
                        memberLookupTable[index] = mems;
                    }
                    else
                    {
                        ((MemberInfoList)ob).Add(member);
                    }
                }
            }
            this.instanceMembers   = instanceMembers;
            this.memberLookupTable = memberLookupTable;
            this.memberInfos       = new MemberInfo[count][];
            this.type = type;
            this.implementsIReflect = null;
            this.hashCode           = (uint)type.GetHashCode();
            this.next = null;
        }
 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();
 }