Changeset 331


Ignore:
Timestamp:
Jan 19, 2004, 4:29:22 PM (21 years ago)
Author:
Gary Byers
Message:

GF's need to check keywords after all. Recognize :ALLOW-OTHER-KEYS T sooner,
don't treat :ALLOW-OTHER-KEYS NIL as an unknown argument.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/level-1/l1-dcode.lisp

    r313 r331  
    953953
    954954; vector arg is (vector key-index keyvect combined-method) ; the next combined method
    955 #|
     955
    956956(defun %%check-keywords (vector-arg args)
    957957  (flet ((do-it (vector-arg args)
     
    960960                  (keyvect-len (length keyvect))
    961961                  (key-index (%svref vector-arg 0)))
    962              ; vector arg is (vector key-index keyvect combined-method) ; the next combined method
     962                                        ; vector arg is (vector key-index keyvect combined-method) ; the next combined method
    963963             (declare (fixnum args-len key-index keyvect-len))
    964964             (when (>= args-len key-index)
    965                (let* ((keys-in (- args-len key-index))
    966                       aok)  ; actually * 2
     965               (let* ((keys-in (- args-len key-index))) ; actually * 2
    967966                 (declare (fixnum  key-index keys-in keyvect-len))
    968967                 (when (logbitp 0 keys-in) (odd-keys-error vector-arg (collect-lexpr-args args key-index args-len)))
    969                  (setq aok (%cadr (pl-search args :allow-other-keys)))
    970                  (do ((i key-index (+ i 2))
    971                       (kargs (nthcdr key-index args) (cddr kargs)))
    972                      ((eq i args-len))
    973                    (declare (fixnum i))
    974                    (when aok (return))
    975                    (let ((key (car kargs)))
    976                      (when (and (eq key :allow-other-keys)
    977                                 (cadr kargs))
    978                        (return))
    979                      (when (not (dotimes (i keyvect-len nil)
    980                                   (if (eq key (%svref keyvect i))
    981                                     (return t))))
    982                        ; not found - is :allow-other-keys t in rest of user args
    983                        (when (not (do ((remargs kargs (cddr remargs)))
    984                                       ((null remargs) nil)
    985                                     (when (and (eq (car remargs) :allow-other-keys)
    986                                                (cadr remargs))
    987                                       (setq aok t)
    988                                       (return t))))             
    989                          (bad-key-error key vector-arg (collect-lexpr-args args key-index args-len))))))))
     968                 (unless (%cadr (%pl-search (nthcdr key-index args) :allow-other-keys))
     969                   (do ((i key-index (+ i 2))
     970                        (kargs (nthcdr key-index args) (cddr kargs)))
     971                       ((eq i args-len))
     972                     (declare (fixnum i))
     973                     (let ((key (car kargs)))
     974                       (when (not (or (eq key :allow-other-keys)
     975                                      (dotimes (i keyvect-len nil)
     976                                        (if (eq key (%svref keyvect i))
     977                                          (return t)))))
     978                         (bad-key-error key vector-arg (collect-lexpr-args args key-index args-len))
     979                         ))))))
    990980             (let ((method (%svref vector-arg 2)))
    991                ; magic here ?? not needed
     981                                        ; magic here ?? not needed
    992982               (apply method args)))))
    993983    (if (listp args)
     
    995985      (with-list-from-lexpr (args-list args)
    996986        (do-it vector-arg args-list)))))
    997 |#
    998 
    999 (defun %%check-keywords (vector-arg args)
    1000   (let ((method (%svref vector-arg 2)))
    1001     (if (listp args)
    1002       (apply method args)
    1003       (%apply-lexpr-tail-wise method args))))
     987
     988
     989
    1004990 
    1005991
Note: See TracChangeset for help on using the changeset viewer.