Changeset 14058
- Timestamp:
- 08/05/12 20:27:10 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/clos.lisp
r14055 r14058 1255 1255 (whole required optional rest keys aux) 1256 1256 (parse-define-method-combination-args-lambda-list args-lambda-list) 1257 (unless rest 1258 (when keys 1259 (setf rest (gensym)))) 1257 1260 (let* ((gf-lambda-list (gensym)) 1258 1261 (args-var (gensym)) … … 1273 1276 `((,whole ',args-var))) 1274 1277 ,@(when rest 1275 `((,rest `(subseq ,',args-var 1276 (+ ,nreq ,nopt))))) 1278 `((,rest (progn 1279 (push `(,',rest 1280 (subseq ,',args-var 1281 ,(+ nreq nopt))) 1282 ,binding-forms) 1283 ',rest)))) 1277 1284 ,@(loop for var in required 1278 1285 and i upfrom 0 … … 1308 1315 ,binding-forms) 1309 1316 ',var-binding))) 1310 ,@(loop for ((key var) initform) in keys 1317 ,@(loop for ((key var) initform supplied-var) in keys 1318 for supplied-binding = (or supplied-var (gensym)) 1319 for var-binding = (gensym) 1311 1320 ;; Same as optional parameters: 1312 1321 ;; even though keywords can't be supplied in 1313 1322 ;; excess, we should bind "supplied-p" in case 1314 1323 ;; the key isn't supplied in the arguments list 1315 collect `(,var `(getk (subseq ,',args-var 1316 (+ ,nreq ,nopt)) ,',key 1317 ,',initform))) 1324 collect `(,supplied-binding 1325 (progn 1326 (push `(,',supplied-binding 1327 (member ,',key ,',rest))) 1328 ',supplied-binding)) 1329 collect `(,var (progn 1330 (push `(,',var-binding 1331 (if ,',supplied-binding 1332 (cadr ,',supplied-binding) 1333 ,',initform)) 1334 ,binding-forms)))) 1318 1335 ,@(loop for (var initform) in aux 1319 1336 for var-binding = (gensym)
Note: See TracChangeset
for help on using the changeset viewer.