0.9.1.48:
[sbcl.git] / src / compiler / locall.lisp
index 18d051b..f8211b7 100644 (file)
   (aver (null (functional-entry-fun fun)))
   (with-ir1-environment-from-node (lambda-bind (main-entry fun))
     (let ((res (ir1-convert-lambda (make-xep-lambda-expression fun)
-                                  :debug-name (debug-namify
-                                               "XEP for "
-                                               (leaf-debug-name fun)))))
+                                  :debug-name (debug-name 
+                                                'xep (leaf-debug-name fun)))))
       (setf (functional-kind res) :external
            (leaf-ever-used res) t
            (functional-entry-fun res) fun
                   (values nil
                           (ir1-convert-lambda
                            (functional-inline-expansion original-functional)
-                           :debug-name (debug-namify
-                                        "local inline "
-                                        (leaf-debug-name
-                                         original-functional)))))))
+                           :debug-name (debug-name 'local-inline 
+                                                   (leaf-debug-name 
+                                                    original-functional)))))))
           (cond (losing-local-object
                  (if (functional-p losing-local-object)
                      (let ((*compiler-error-context* call))
            `(lambda ,vars
               (declare (ignorable ,@ignores))
               (%funcall ,entry ,@args))
-           :debug-name (debug-namify "hairy function entry "
-                                     (lvar-fun-name
-                                      (basic-combination-fun call)))))))
+           :debug-name (debug-name 'hairy-function-entry 
+                                    (lvar-fun-name
+                                     (basic-combination-fun call)))))))
     (convert-call ref call new-fun)
     (dolist (ref (leaf-refs entry))
       (convert-call-if-possible ref (lvar-dest (node-lvar ref))))))
            (let ((name (lvar-value lvar))
                  (dummy (first temp))
                  (val (second temp)))
-              ;; FIXME: check whether KEY was supplied earlier
               (when (and (eq name :allow-other-keys) (not allow-found))
                 (let ((val (second key)))
                   (cond ((constant-lvar-p val)
                                (setq loser (list name)))))
                (let ((info (lambda-var-arg-info var)))
                  (when (eq (arg-info-key info) name)
-                   (ignores dummy)
-                   (supplied (cons var val))
-                   (return)))))))
+                     (ignores dummy)
+                     (if (member var (supplied) :key #'car)
+                         (ignores val)
+                         (supplied (cons var val)))
+                     (return)))))))
 
        (when (and loser (not (optional-dispatch-allowp fun)) (not allowp))
          (compiler-warn "function called with unknown argument keyword ~S"