@@ -192,8 +192,15 @@ As soon as one of KEYS fails to match, DEFAULT is returned."
192
192
keys
193
193
:initial-value table))
194
194
195
- (define-compiler-macro href (table &rest keys)
196
- (expand-href table keys))
195
+ (define-compiler-macro href (table key &rest keys)
196
+ (let* ((keys (cons key keys))
197
+ (table-tmp (gensym (string ' table)))
198
+ (key-tmps
199
+ (make-gensym-list (length keys)
200
+ (string ' key))))
201
+ ` (let ((, table-tmp , table)
202
+ ,@ (mapcar #' list key-tmps keys))
203
+ , (expand-href table-tmp key-tmps))))
197
204
198
205
(define-compiler-macro (setf href ) (value table &rest keys)
199
206
` (setf , (expand-href table keys) , value))
@@ -212,16 +219,11 @@ As soon as one of KEYS fails to match, DEFAULT is returned."
212
219
(rec (gethash (car keys) table) (cdr keys))
213
220
(setf (gethash (car keys) table) value))))
214
221
215
- (flet ((expand-@ (table keys)
216
- (reduce
217
- (lambda (table key)
218
- ` (gethash , key , table))
219
- keys
220
- :initial-value table)))
221
- (define-compiler-macro @ (table key &rest keys)
222
- (expand-@ table (cons key keys)))
223
- (define-compiler-macro (setf @ ) (value table key &rest keys)
224
- ` (setf , (expand-@ table (cons key keys)) , value)))
222
+ (define-compiler-macro @ (table key &rest keys)
223
+ ` (href , table , key ,@ keys))
224
+
225
+ (define-compiler-macro (setf @ ) (value table key &rest keys)
226
+ ` (setf (href , table , key ,@ keys) , value))
225
227
226
228
(-> pophash (t hash-table ) (values t boolean &optional ))
227
229
(defun pophash (key hash-table )
0 commit comments