anchor.diff:  ;;;;; tré – Copyright (c) 2008–2014 Sven Michael Klose <pixel@copei.de>
   
  -(defun argument-rest-keyword? (x) (in? x '&rest '&body))
  -(defun argument-keyword? (x)      (in? x '&rest '&body '&optional '&key))
  -(defun argument-name? (x)         (atom x))
  -(defun argument-name (x)          x)
  -
  -(defun argument-def-without-type (x)
  -  x)
  +(defun argument-rest-keyword? (x)     (in? x '&rest '&body))
  +(defun argument-keyword? (x)          (in? x '&rest '&body '&optional '&key))
  +(defun argument-name? (x)             (atom x))
  +(defun argument-name (x)              x)
  +(defun argument-def-without-type (x)  x)
   
   (defun error-arguments-missing (fun args)
     (throw "Arguments ~A missing for function ~A." fun args))
  
positive.code:     (cons? defs.) (cadr defs.)
      defs.))
  
  ;; Expands argument definition and argument list to an associative list
  ;; of argument name/value pairs. Argument rest lists start with the
  ;; &REST keyword. The returned list is grouped into static, optional,
  ;; keyword and rest values.
  ;;
  ;; Supports &REST, &BODY, &OPTIONAL and &KEY with default values.
  ;; NIL is used when no default value is given.
  ;; Keywords may occur everywhere in an argument list.
  ;;
  ;; When apply-values is NIL, only the expanded argument definition is
  ;; returned.
  ;;
  ;; 'fun' is only used for error messages.
  (defun argument-expand-0 (fun adef alst apply-values &optional (no-static nil) (argdefs nil) (key-args nil) (num nil) (rest-arg nil))
    (with (err
  		   #'((msg args)
  				(throw (+ "; Call of function ~A: ~A~%"
  					      "; Argument definition: ~A~%"
  
negative.code: 		  '((a . 23) (b . 5) (c &rest))))
    t)
  
  (define-test "argument expansion can handle missing &REST without :apply-values?"
    ((equal (argument-expand-names 'test '(a b &rest c))
  		  '(a b c)))
    t)
  