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();
}