anchor.diff:  		   collect (cleavir-ast:make-setq-ast
   			    (second parameter)
   			    (convert nil env system))
  -	  else do (return-from inline-lambda-init (noinline)))))
  +	  else when (eq state '&rest)
  +		 collect (cleavir-ast:make-setq-ast
  +			  parameter (make-list-call arg-asts))
  +		 and do (setf rest parameter)
  +	  else when (eq state '&key)
  +		 ;; TODO
  +		 ;; There are 3 major issues with &key inlining:
  +		 ;; 1) in general we need a &rest list. if there's
  +		 ;;    no &rest, that means we have to add an lvar.
  +		 ;; 2) we'd like to deal with constant keys, but
  +		 ;;    these are converted into inscrutable ASTs.
  +		 ;;    One solution would be to avoid converting
  +		 ;;     arguments and just look for keys; the
  +		 ;;     general solution is type inference.
  +		 ;; 3) parsing keys sucks. &aok and getf, oy vey
  +		 do (return (noinline))
  +	  finally (when (and arg-asts (not rest))
  +		    ;; out of parameters; if arg-asts = nil,
  +		    ;;  we return normally
  +		    (return (values nil 'too-many-arguments))))))
   
   (defun make-call (info env arguments system)
     (let ((argument-asts (convert-sequence arguments env system))
   	(ast (cleavir-env:ast info)))
  -    (flet ((err ()
  -	     (generate-ast '(error "bad arguments") env system))
  -	   (noinline ()
  -	     (let ((function-ast
  -		     (convert-function info env system)))
  -	       (cleavir-ast:make-call-ast function-ast
  -					  argument-asts))))
  +    (labels ((err (message)
  +	       ;; here is where we would warn and return a
  +	       ;;  form that signals an error. but for now,
  +	       (declare (ignore message))
  +	       (noinline))
  +	     (noinline ()
  +	       (let ((function-ast
  +		       (convert-function info env system)))
  +		 (cleavir-ast:make-call-ast function-ast
  +					    argument-asts))))
         (if (and (eq (cleavir-env:inline info) 'cl:inline)
   	       (not (null ast)))
   	  ;; We might be able to inline the call.
  
positive.code: 				    (cleavir-ast:lambda-list clone)
  				    argument-asts)
  	      (cond ((eq failure t) (noinline))
  		    (failure (err))
  		    (t
  		     (process-progn
  		      (append
  
negative.code: 		   collect (cleavir-ast:make-setq-ast
  			    parameter (first arg-asts))
  		   and do (setf arg-asts (rest arg-asts))
  	         else do (noinline 'not-enough-arguments)
  	  else when (eq state '&optional)
  		 if arg-asts
  		   collect (cleavir-ast:make-setq-ast
  