X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=luna.el;h=f33b83f634053895cdc743a27025f2146c715be8;hb=117825e27b57133e758b2cc6167b63ae266bcac3;hp=b307ad9ab9622e0ac7465540fac1b26d6e71eb22;hpb=e65ec46bf79392ed22bca0549170102a2fa83290;p=elisp%2Fflim.git diff --git a/luna.el b/luna.el index b307ad9..f33b83f 100644 --- a/luna.el +++ b/luna.el @@ -1,6 +1,6 @@ ;;; luna.el --- tiny OOP system kernel -;; Copyright (C) 1999,2000 Free Software Foundation, Inc. +;; Copyright (C) 1999,2000,2002 Free Software Foundation, Inc. ;; Author: MORIOKA Tomohiko ;; Keywords: OOP @@ -97,15 +97,7 @@ The optional 2nd arg SLOTS is a list of slots CLASS will have." (defun luna-class-find-member (class member-name) (or (stringp member-name) (setq member-name (symbol-name member-name))) - (or (intern-soft member-name (luna-class-obarray class)) - (let ((parents (luna-class-parents class)) - ret) - (while (and parents - (null - (setq ret (luna-class-find-member - (luna-find-class (pop parents)) - member-name))))) - ret))) + (intern-soft member-name (luna-class-obarray class))) ;; Return a member (slot or method) of CLASS that has name @@ -172,8 +164,13 @@ The optional 5th BODY is the body of the method." (sym (luna-class-find-or-make-member (luna-find-class ',class) ',name)) (cache (get ',name 'luna-method-cache))) - (if cache - (unintern ',class cache)) + (and cache + (fboundp sym) + (mapatoms + (lambda (s) + (if (memq (symbol-function sym) (symbol-value s)) + (unintern s cache))) + cache)) (fset sym func) (put sym 'luna-method-qualifier ,method-qualifier))))