Microsoft.JScript.LateBinding.BindToMember C# (CSharp) Method

BindToMember() private method

private BindToMember ( ) : MemberInfo
return System.Reflection.MemberInfo
      internal MemberInfo BindToMember(){
        Debug.Assert(this.obj != null && this.name != null);
        if (this.obj == this.last_object && this.last_member != null)
          return this.last_member;
        BindingFlags flags = BindingFlags.Instance|BindingFlags.Public;
        Object obj = this.obj;
        Type t = obj.GetType();
        TypeReflector tr = TypeReflector.GetTypeReflectorFor(t);
        IReflect ir = null;
        if (tr.ImplementsIReflect()){
          ir = obj as ScriptObject;
          if (ir != null){
            if (obj is ClassScope)
              flags = BindingFlags.Static|BindingFlags.Public;
          }else{
            ir = obj as Type;
            if (ir != null)
              flags = BindingFlags.Static|BindingFlags.Public;
            else
              ir = (IReflect)obj;
          }
        }else
          ir = tr;
        this.last_object = this.obj;
        this.last_ir = ir;
        MemberInfo[] members = this.last_members = ir.GetMember(this.name, flags);
        this.last_member = LateBinding.SelectMember(members);
        if (this.obj is Type){ //Add instance members of type Type to the member list
          MemberInfo[] tmembers = typeof(Type).GetMember(this.name, BindingFlags.Instance|BindingFlags.Public);
          int n = 0, m = 0;
          if (tmembers != null && (n = tmembers.Length) > 0){
            if (members == null || (m = members.Length) == 0)
              this.last_member = LateBinding.SelectMember(this.last_members = tmembers);
            else{
              MemberInfo[] jmembers = new MemberInfo[n + m];
              ArrayObject.Copy(members, 0, jmembers, 0, m);
              ArrayObject.Copy(tmembers, 0, jmembers, m, n);
              this.last_member = LateBinding.SelectMember(this.last_members = jmembers);
            }
          }
        }
        return this.last_member;
      }