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);
 }
예제 #2
0
        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);
        }
예제 #4
0
파일: jsobject.cs 프로젝트: ArildF/masters
 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];
 }
예제 #5
0
파일: jsobject.cs 프로젝트: ydunk/masters
 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]);
 }