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