Microsoft.JScript.Member.HandleNoSuchMemberError C# (CSharp) Method

HandleNoSuchMemberError() protected method

protected HandleNoSuchMemberError ( ) : void
return void
      protected override void HandleNoSuchMemberError(){
        IReflect obType = this.rootObject.InferType(null);
        Object obVal = null;

        if (this.rootObject is ConstantWrapper)
          obVal = this.rootObject.Evaluate();
        
        if ((obType == Typeob.Object && !this.isNonVirtual) || 
            (obType is JSObject && !((JSObject)obType).noExpando) ||
            (obType is GlobalScope && !((GlobalScope)obType).isKnownAtCompileTime))
          return;
        if (obType is Type){
          Type t = (Type)obType;
          if (Typeob.ScriptFunction.IsAssignableFrom(t) || t == Typeob.MathObject){
            //dealing with an assigment to a member of a builtin constructor function. 
            Debug.Assert(this.fast);
            this.memberNameContext.HandleError(JSError.OLENoPropOrMethod);
            return;
          }
          if (Typeob.IExpando.IsAssignableFrom(t)) return;
          if (!this.fast)
            if (t == Typeob.Boolean || t == Typeob.String || Convert.IsPrimitiveNumericType(t)) return;

          // Check to see if we couldn't get the member because it is non-static.
          if (obVal is ClassScope){
            MemberInfo[] members = ((ClassScope)obVal).GetMember(this.name, BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance);
            if (members.Length > 0){
               this.memberNameContext.HandleError(JSError.NonStaticWithTypeName);
               return;
            }
          }
        }

        if (obVal is FunctionObject){
          this.rootObject = new ConstantWrapper(((FunctionObject)obVal).name, this.rootObject.context);
          this.memberNameContext.HandleError(JSError.OLENoPropOrMethod);
          return;
        }
        
        // Check to see if we couldn't get the member because it is static.
        if (obType is ClassScope){
          MemberInfo[] members = ((ClassScope)obType).GetMember(this.name, BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static);
          if (members.Length > 0){
            this.memberNameContext.HandleError(JSError.StaticRequiresTypeName);
            return;
          }
        }
        
        if (obVal is Type)
          this.memberNameContext.HandleError(JSError.NoSuchStaticMember, Convert.ToTypeName((Type)obVal));
        else if (obVal is ClassScope)
          this.memberNameContext.HandleError(JSError.NoSuchStaticMember, Convert.ToTypeName((ClassScope)obVal));
        else if (obVal is Namespace)
          this.memberNameContext.HandleError(JSError.NoSuchType, ((Namespace)obVal).Name+"."+this.name);
        else{
          if (obType == FunctionPrototype.ob && this.rootObject is Binding && 
            ((Binding)this.rootObject).member is JSVariableField && ((JSVariableField)((Binding)this.rootObject).member).value is FunctionObject)
            return;            
          this.memberNameContext.HandleError(JSError.NoSuchMember, Convert.ToTypeName(obType));
        }
      }