Changeset 14059


Ignore:
Timestamp:
08/05/12 20:40:13 (8 years ago)
Author:
ehuelsmann
Message:

Follow up to r14058: efficient binding of required vars.
Also:

  • Fixes for r14058
  • Removal of a macro no longer in use
  • Code comments as to my opinion on the current state
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/clos.lisp

    r14058 r14059  
    11661166                    aux))))
    11671167
    1168 (defmacro getk (plist key init-form)
    1169   "Similar to getf except eval and return INIT-FORM if KEY has no value in PLIST."
    1170   (let ((not-exist (gensym))
    1171         (value (gensym)))
    1172     `(let ((,value (getf ,plist ,key ',not-exist)))
    1173        (if (eq ',not-exist ,value) ,init-form ,value))))
    1174 
    11751168(defun wrap-with-call-method-macro (gf args-var emf-form)
    11761169  `(macrolet
     
    12761269                              `((,whole ',args-var)))
    12771270                      ,@(when rest
     1271                              ;; ### TODO: use a fresh symbol for the rest
     1272                              ;;   binding being generated and pushed into binding-forms
    12781273                              `((,rest (progn
    12791274                                         (push `(,',rest
     
    12821277                                               ,binding-forms)
    12831278                                         ',rest))))
    1284                         ,@(loop for var in required
    1285                              and i upfrom 0
     1279                        ,@(loop for var in required and i upfrom 0
     1280                               for var-binding = (gensym)
    12861281                             collect `(,var (when (< ,i nreq)
    1287                                               `(nth ,,i ,',args-var))))
     1282                                              (push `(,',var-binding
     1283                                                      (nth ,,i ,',args-var))
     1284                                                    ,binding-forms)
     1285                                              ',var-binding)))
    12881286                        ,@(loop for (var initform supplied-var) in optional
    12891287                             and i upfrom 0
     
    13031301                                       (when (< ,i nopt)
    13041302                                         (setq ,needs-args-len-var t)
     1303                              ;; ### TODO: use a fresh symbol for the supplied binding
     1304                              ;;   binding being generated and pushed into binding-forms
    13051305                                         (push `(,',supplied-binding
    13061306                                                 (< ,(+ ,i nreq) ,',args-len-var))
     
    13241324                             collect `(,supplied-binding
    13251325                                       (progn
     1326                              ;; ### TODO: use a fresh symbol for the rest
     1327                              ;;   binding being generated and pushed into binding-forms
    13261328                                         (push `(,',supplied-binding
    1327                                                  (member ,',key ,',rest)))
     1329                                                 (member ,',key ,',rest))
     1330                                               ,binding-forms)
    13281331                                         ',supplied-binding))
    13291332                             collect `(,var (progn
     
    13321335                                                          (cadr ,',supplied-binding)
    13331336                                                          ,',initform))
    1334                                                     ,binding-forms))))
     1337                                                    ,binding-forms)
     1338                                              ',var-binding)))
    13351339                        ,@(loop for (var initform) in aux
    13361340                             for var-binding = (gensym)
Note: See TracChangeset for help on using the changeset viewer.