private ToArray ( ) : System.Reflection.MemberInfo[] | ||
Résultat | System.Reflection.MemberInfo[] |
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()); }
//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()); }
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(); }
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()); }
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[] 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(); }
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[] 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()); }
//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(); }