AjTalk.Machine.SendMessage C# (CSharp) Method

SendMessage() public method

public SendMessage ( object obj, string msgname, object args, Interpreter interpreter ) : object
obj object
msgname string
args object
interpreter AjTalk.Language.Interpreter
return object
        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);
        }