From 76c50ec52e87d7d269948bce634e5b0f6e6ae70a Mon Sep 17 00:00:00 2001 From: BT Templeton Date: Thu, 11 Aug 2011 23:47:36 -0400 Subject: [PATCH] `%plist-member' fix * module/language/elisp/boot.el (%plist-member): Use recursion to avoid using `catch' and `throw'. --- module/language/elisp/boot.el | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/module/language/elisp/boot.el b/module/language/elisp/boot.el index c1b91177f..a5346d577 100644 --- a/module/language/elisp/boot.el +++ b/module/language/elisp/boot.el @@ -400,11 +400,13 @@ ;;; Property lists (defun %plist-member (plist property test) - (catch 'loop - (while plist - (if (funcall test (car plist) property) - (throw 'loop (cdr plist)) - (setq plist (cddr plist)))))) + (cond + ((null plist) nil) + ((consp plist) + (if (funcall test (car plist) property) + (cdr plist) + (%plist-member (cdr (cdr plist)) property test))) + (t (signal 'wrong-type-argument `(listp ,plist))))) (defun %plist-get (plist property test) (car (%plist-member plist property test)))