Hi!
On my quest for defmethods that needed defgenerics, I found an inconsistency in the API. I have no idea if this project has any provisions or policies about breaking APIs, so I'm mailing the list.
The add-* apis use the object to add to as the first parameter and the object to be added as the second. So does the remove-channel api, except for one point: (remove-channel <channel-object> <user-object>). Resolving this item is not critical, but nice to have. Since parts of code of external parties might depend on the api, I decided to add a warn statement, but leave the api in place. I added a new defmethod which is the same, except that it has its parameters reversed.
I'll rewrite the library (and possibly the examples) to use the new API ofcourse - given that there will be no objections.
bye,
Erik.
PS: I don't think I can remember the changes I am committing some months from now, so I'll institute the ChangeLog as previously discussed.
The patch:
Index: protocol.lisp =================================================================== RCS file: /project/cl-irc/cvsroot/cl-irc/protocol.lisp,v diff -u -r1.2 protocol.lisp --- protocol.lisp 8 Jan 2004 23:11:47 -0000 1.2 +++ protocol.lisp 14 Mar 2004 18:34:35 -0000 @@ -437,6 +437,14 @@
(defmethod remove-channel ((channel channel) (user user)) "Remove `channel' from `user'." + (warn + (concat 'string + "use of depricated API (remove-channel channel user): " + "(remove-channel user channel) is now preferred")) + (remove-channel user channel)) + +(defmethod remove-channel ((user user) (channel channel)) + "Remove `channel' from `user'." (setf (channels user) (remove channel (channels user))))
(defmethod remove-user ((connection connection) (user user))