From cfbf245ec74ee05bbaec8c4f80b23d21fc2c65f6 Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Mon, 10 May 2010 22:08:48 +0200 Subject: [PATCH] The compiler checks whether the forms it parses are properlist. --- src/cmp/cmputil.lsp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/cmp/cmputil.lsp b/src/cmp/cmputil.lsp index 1757cc314..e211ba215 100644 --- a/src/cmp/cmputil.lsp +++ b/src/cmp/cmputil.lsp @@ -218,8 +218,21 @@ (print-compiler-message c t) (abort))) -(defun check-args-number (operator args &optional (min 0) (max nil)) - (let ((l (length args))) +(defun safe-list-length (l) + (cond ((null l) + 0) + ((atom l) + nil) + (t + (handler-case (list-length l) + (error (c) nil))))) + +(defun check-args-number (operator args &optional (min 0) (max most-positive-fixnum)) + + (let ((l (safe-list-length args))) + (when (null l) + (let ((*print-circle* t)) + (cmperr "Improper or circular list passed to ~A~%~A" operator args))) (when (< l min) (too-few-args operator min l)) (when (and max (> l max))