private MemberInfo[] GetMember(string name, BindingFlags bindingAttr, bool wrapMembers) { MemberInfo[] members = this.GetLocalMember(name, bindingAttr, wrapMembers); if (members.Length <= 0) { if (base.parent == null) { return(new MemberInfo[0]); } if (base.parent is JSObject) { members = ((JSObject)base.parent).GetMember(name, bindingAttr, true); wrapMembers = false; } else { members = base.parent.GetMember(name, bindingAttr); } foreach (MemberInfo info in members) { if (info.MemberType == MemberTypes.Field) { FieldInfo info2 = (FieldInfo)info; JSMemberField field = info as JSMemberField; if (field != null) { if (!field.IsStatic) { JSGlobalField field2 = new JSGlobalField(this, name, field.value, FieldAttributes.Public); this.NameTable[name] = field2; this.field_table.Add(field2); info2 = field; } } else { info2 = new JSPrototypeField(base.parent, (FieldInfo)info); if (!this.noExpando) { this.NameTable[name] = info2; this.field_table.Add(info2); } } return(new MemberInfo[] { info2 }); } if (!this.noExpando && (info.MemberType == MemberTypes.Method)) { FieldInfo info3 = new JSPrototypeField(base.parent, new JSGlobalField(this, name, LateBinding.GetMemberValue(base.parent, name, null, members), FieldAttributes.InitOnly | FieldAttributes.Public)); this.NameTable[name] = info3; this.field_table.Add(info3); return(new MemberInfo[] { info3 }); } } if (wrapMembers) { return(ScriptObject.WrapMembers(members, base.parent)); } } return(members); }
public virtual bool MoveNext() { if (this.index >= this.enumerators.Count) { return(false); } IEnumerator ienum = (IEnumerator)this.enumerators[this.index]; bool result = ienum.MoveNext(); if (!result) { this.index++; return(this.MoveNext()); } Object ob = ienum.Current; String pname; FieldInfo field = ob as FieldInfo; if (field != null) { JSPrototypeField pfield = ob as JSPrototypeField; if (pfield != null && pfield.value is Missing) { return(this.MoveNext()); } pname = field.Name; Object val = field.GetValue(this.objects[this.index]); if (val is Missing) { return(this.MoveNext()); } } else if (ob is String) { pname = (String)ob; } else if (ob is MemberInfo) { pname = ((MemberInfo)ob).Name; } else { pname = ob.ToString(); } if (this.visited_names[pname] != null) { return(this.MoveNext()); } this.visited_names[pname] = pname; return(true); }
public virtual bool MoveNext() { string name; if (this.index >= this.enumerators.Count) { return(false); } IEnumerator enumerator = (IEnumerator)this.enumerators[this.index]; if (!enumerator.MoveNext()) { this.index++; return(this.MoveNext()); } object current = enumerator.Current; FieldInfo info = current as FieldInfo; if (info != null) { JSPrototypeField field = current as JSPrototypeField; if ((field != null) && (field.value is Microsoft.JScript.Missing)) { return(this.MoveNext()); } name = info.Name; if (info.GetValue(this.objects[this.index]) is Microsoft.JScript.Missing) { return(this.MoveNext()); } } else if (current is string) { name = (string)current; } else if (current is MemberInfo) { name = ((MemberInfo)current).Name; } else { name = current.ToString(); } if (this.visited_names[name] != null) { return(this.MoveNext()); } this.visited_names[name] = name; return(true); }
private MemberInfo[] GetMember(String name, BindingFlags bindingAttr, bool wrapMembers){ MemberInfo[] members = this.GetLocalMember(name, bindingAttr, wrapMembers); if (members.Length > 0) return members; if (this.parent != null){ if (this.parent is JSObject){ members = ((JSObject)this.parent).GetMember(name, bindingAttr, true); wrapMembers = false; }else members = this.parent.GetMember(name, bindingAttr); foreach (MemberInfo mem in members){ if (mem.MemberType == MemberTypes.Field){ FieldInfo field = (FieldInfo)mem; JSMemberField mfield = mem as JSMemberField; if (mfield != null){ //This can only happen when running in the Evaluator if (!mfield.IsStatic){ JSGlobalField gfield = new JSGlobalField(this, name, mfield.value, FieldAttributes.Public); this.NameTable[name] = gfield; this.field_table.Add(gfield); field = mfield; } }else{ field = new JSPrototypeField(this.parent, (FieldInfo)mem); if (!this.noExpando){ this.NameTable[name] = field; this.field_table.Add(field); } } return new MemberInfo[]{field}; } if (!this.noExpando){ if (mem.MemberType == MemberTypes.Method){ FieldInfo field = new JSPrototypeField(this.parent, new JSGlobalField(this, name, LateBinding.GetMemberValue(this.parent, name, null, members), FieldAttributes.Public|FieldAttributes.InitOnly)); this.NameTable[name] = field; this.field_table.Add(field); return new MemberInfo[]{field}; } } } if (wrapMembers) return ScriptObject.WrapMembers(members, this.parent); else return members; } return new MemberInfo[0]; }
private MemberInfo[] GetMember(String name, BindingFlags bindingAttr, bool wrapMembers) { MemberInfo[] members = this.GetLocalMember(name, bindingAttr, wrapMembers); if (members.Length > 0) { return(members); } if (this.parent != null) { if (this.parent is JSObject) { members = ((JSObject)this.parent).GetMember(name, bindingAttr, true); wrapMembers = false; } else { members = this.parent.GetMember(name, bindingAttr); } foreach (MemberInfo mem in members) { if (mem.MemberType == MemberTypes.Field) { FieldInfo field = (FieldInfo)mem; JSMemberField mfield = mem as JSMemberField; if (mfield != null) //This can only happen when running in the Evaluator { if (!mfield.IsStatic) { JSGlobalField gfield = new JSGlobalField(this, name, mfield.value, FieldAttributes.Public); this.NameTable[name] = gfield; this.field_table.Add(gfield); field = mfield; } } else { field = new JSPrototypeField(this.parent, (FieldInfo)mem); if (!this.noExpando) { this.NameTable[name] = field; this.field_table.Add(field); } } return(new MemberInfo[] { field }); } if (!this.noExpando) { if (mem.MemberType == MemberTypes.Method) { FieldInfo field = new JSPrototypeField(this.parent, new JSGlobalField(this, name, LateBinding.GetMemberValue(this.parent, name, null, members), FieldAttributes.Public | FieldAttributes.InitOnly)); this.NameTable[name] = field; this.field_table.Add(field); return(new MemberInfo[] { field }); } } } if (wrapMembers) { return(ScriptObject.WrapMembers(members, this.parent)); } else { return(members); } } return(new MemberInfo[0]); }