From c071421b01be4e06118e771ed9e9c53b5b30860d Mon Sep 17 00:00:00 2001
From: ram <ram>
Date: Thu, 10 Dec 1992 16:48:17 +0000
Subject: [PATCH] Allow non-keyword keyword names when the &key keyword is
 specified separately from the variable.

---
 compiler/ir1tran.lisp | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/compiler/ir1tran.lisp b/compiler/ir1tran.lisp
index f59ef5c80..374a37f15 100644
--- a/compiler/ir1tran.lisp
+++ b/compiler/ir1tran.lisp
@@ -7,7 +7,7 @@
 ;;; Scott Fahlman or slisp-group@cs.cmu.edu.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir1tran.lisp,v 1.82 1992/12/08 17:59:14 ram Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/ir1tran.lisp,v 1.83 1992/12/10 16:48:17 ram Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -1203,10 +1203,11 @@
 ;;; already used by one of the Vars.  We also check that the keyword isn't the
 ;;; magical :allow-other-keys.
 ;;;
-(proclaim '(function make-keyword (symbol list) keyword))
-(defun make-keyword (symbol vars)
-  (let ((key (if (keywordp symbol) symbol
-		 (intern (symbol-name symbol) "KEYWORD"))))
+(proclaim '(function make-keyword (symbol list t) keyword))
+(defun make-keyword (symbol vars keywordify)
+  (let ((key (if (and keywordify (not (keywordp symbol)))
+		 (intern (symbol-name symbol) "KEYWORD")
+		 symbol)))
     (when (eq key :allow-other-keys)
       (compiler-error "You can't have a keyword arg called :allow-other-keys."))
     (dolist (var vars)
@@ -1287,14 +1288,15 @@
 	    (let ((var (varify-lambda-arg spec (names-so-far))))
 	      (setf (lambda-var-arg-info var)
 		    (make-arg-info :kind :keyword
-				   :keyword (make-keyword spec (vars))))
+				   :keyword (make-keyword spec (vars) t)))
 	      (vars var)
 	      (names-so-far spec)))
 	   ((atom (first spec))
 	    (let* ((name (first spec))
 		   (var (varify-lambda-arg name (names-so-far)))
-		   (info (make-arg-info :kind :keyword
-					:keyword (make-keyword name (vars)))))
+		   (info (make-arg-info
+			  :kind :keyword
+			  :keyword (make-keyword name (vars) t))))
 	      (setf (lambda-var-arg-info var) info)
 	      (vars var)
 	      (names-so-far name)
@@ -1305,9 +1307,9 @@
 		(error "Malformed keyword arg specifier: ~S." spec))
 	      (let* ((name (second head))
 		     (var (varify-lambda-arg name (names-so-far)))
-		     (info (make-arg-info :kind :keyword
-					  :keyword (make-keyword (first head)
-								 (vars)))))
+		     (info (make-arg-info
+			    :kind :keyword
+			    :keyword (make-keyword (first head) (vars) nil))))
 		(setf (lambda-var-arg-info var) info)
 		(vars var)
 		(names-so-far name)
-- 
GitLab