Changeset 14157


Ignore:
Timestamp:
09/29/12 21:17:04 (9 years ago)
Author:
ehuelsmann
Message:

Lambda list keyword ordering checks.
Fixed ordering of lambda list keywords in some method defintions:

we need to adhere to &rest ... &key ordering ourselves too.

File:
1 edited

Legend:

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

    r14156 r14157  
    19451945        (auxs ())
    19461946        (allow-other-keys nil)
    1947         (state :parsing-required))
     1947        (state :required))
    19481948    (dolist (arg lambda-list)
    19491949      (if (member arg lambda-list-keywords)
    19501950          (ecase arg
    19511951            (&optional
    1952              (setq state :parsing-optional))
     1952             (unless (eq state :required)
     1953               (error 'program-error
     1954                      :format-control "~A followed by &OPTIONAL not allowed ~
     1955                                       in lambda list ~S"
     1956                      :format-arguments (list state lambda-list)))
     1957             (setq state '&optional))
    19531958            (&rest
    1954              (setq state :parsing-rest))
     1959             (unless (or (eq state :required)
     1960                         (eq state '&optional))
     1961               (error 'program-error
     1962                      :format-control "~A followed by &REST not allowed ~
     1963                                       in lambda list ~S"
     1964                      :format-arguments (list state lambda-list)))
     1965             (setq state '&rest))
    19551966            (&key
     1967             (unless (or (eq state :required)
     1968                         (eq state '&optional)
     1969                         (eq state '&rest))
     1970               (error 'program-error
     1971                      :format-control "~A followed by &KEY not allowed
     1972                                       in lambda list ~S"
     1973                      :format-arguments (list state lambda-list)))
    19561974             (setq keysp t)
    1957              (setq state :parsing-key))
     1975             (setq state '&key))
    19581976            (&allow-other-keys
     1977             (unless (eq state '&key)
     1978               (error 'program-error
     1979                      :format-control "&ALLOW-OTHER-KEYS not allowed while
     1980                                       parsing ~A in lambda list ~S"
     1981                      :format-arguments (list state lambda-list)))
    19591982             (setq allow-other-keys 't))
    19601983            (&aux
     1984             ;; &aux comes last; any other previous state is fine
    19611985             (setq state :parsing-aux)))
    19621986          (case state
    1963             (:parsing-required
     1987            (:required
    19641988             (push-on-end arg required-args)
    19651989             (if (listp arg)
     
    19681992                 (progn (push-on-end arg required-names)
    19691993                   (push-on-end 't specializers))))
    1970             (:parsing-optional (push-on-end arg optionals))
    1971             (:parsing-rest (setq rest-var arg))
    1972             (:parsing-key
     1994            (&optional (push-on-end arg optionals))
     1995            (&rest (setq rest-var arg))
     1996            (&key
    19731997             (push-on-end (get-keyword-from-arg arg) keys)
    19741998             (push-on-end arg key-args))
    1975             (:parsing-aux (push-on-end arg auxs)))))
     1999            (&aux (push-on-end arg auxs)))))
    19762000    (list  :required-names required-names
    19772001           :required-args required-args
     
    31443168
    31453169(defmethod ensure-class-using-class ((class class) name
     3170                                     &rest all-keys
    31463171                                     &key (metaclass +the-standard-class+ metaclassp)
    3147                                      direct-superclasses &rest all-keys
     3172                                     direct-superclasses
    31483173                                     &allow-other-keys)
    31493174  (declare (ignore name))
     
    38713896
    38723897(defmethod reinitialize-instance :before ((class standard-class)
    3873                                           &key direct-superclasses
    3874                                           &rest all-keys)
     3898                                          &rest all-keys
     3899                                          &key direct-superclasses)
    38753900  (check-initargs (list #'allocate-instance
    38763901                        #'initialize-instance)
     
    38863911
    38873912(defmethod reinitialize-instance :before ((class funcallable-standard-class)
    3888                                           &key direct-superclasses
    3889                                           &rest all-keys)
     3913                                          &rest all-keys
     3914                                          &key direct-superclasses)
    38903915  (check-initargs (list #'allocate-instance
    38913916                        #'initialize-instance)
Note: See TracChangeset for help on using the changeset viewer.