public object SendMessage(object obj, string msgname, object[] args, Interpreter interpreter)
{
if (this.debug)
{
if (obj == null)
Trace.Write("UndefinedObject");
else if ((obj as IObject) == null)
Trace.Write(obj.GetType().FullName);
else
{
IObject io = (IObject)obj;
if (io.Behavior is IMetaClass)
{
IClass cls = ((IMetaClass)io.Behavior).ClassInstance;
if (cls == null)
Trace.Write("meta");
else
Trace.Write(cls.Name);
Trace.Write(" class");
}
else
Trace.Write(((IClass)io.Behavior).Name);
}
Trace.Write(">>");
Trace.WriteLine(msgname);
}
if (obj == null)
return this.nilclass.SendMessageToNilObject(this, msgname, args);
IObject iobj = obj as IObject;
if (iobj != null)
if (interpreter == null)
return iobj.Behavior.SendMessageToObject(iobj, this, msgname, args);
else
return iobj.Behavior.SendMessageToObject(iobj, interpreter, msgname, args);
if (interpreter != null)
return DotNetObject.SendMessage(interpreter, obj, msgname, args);
return DotNetObject.SendMessage(this, obj, msgname, args);
}