Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv27362
Modified Files: compiler.lisp Log Message: Fix compilation of unused &key vars.
--- /project/movitz/cvsroot/movitz/compiler.lisp 2007/02/19 21:57:33 1.176 +++ /project/movitz/cvsroot/movitz/compiler.lisp 2007/02/20 21:57:13 1.177 @@ -8,7 +8,7 @@ ;;;; Created at: Wed Oct 25 12:30:49 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: compiler.lisp,v 1.176 2007/02/19 21:57:33 ffjeld Exp $ +;;;; $Id: compiler.lisp,v 1.177 2007/02/20 21:57:13 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------
@@ -1473,7 +1473,7 @@ ;;;;
(defun print-code (x code) - (let ((*print-level* 3)) + (let ((*print-level* 4)) (format t "~&~A code:~{~& ~A~}" x code)) code)
@@ -2691,9 +2691,12 @@ (find-if (lambda (b-loc) (destructuring-bind (binding . binding-location) b-loc - (or (and (not (bindingp binding)) + (or (and (eq binding nil) ; nil means "back off!" (eql sub-location binding-location)) - (and (eql sub-location (stack-location binding)) + (and (not (bindingp binding)) + (eql sub-location binding-location)) + (and (bindingp binding) + (eql sub-location (stack-location binding)) (labels ((z (b) (when b @@ -2715,7 +2718,8 @@ (append values (list binding)) (list new-value) `(let ((,(car stores) (progn - (assert (not (new-binding-located-p ,binding-var ,getter))) + (assert (or (null binding) + (not (new-binding-located-p ,binding-var ,getter)))) (check-type ,new-value (or keyword binding (integer 0 *) @@ -3145,7 +3149,8 @@ (init-with-register (take-note-of-binding binding t pc) (when (and (typep init-with-register 'binding) - (not (typep binding 'forwarding-binding))) ; XXX + (not (typep binding 'forwarding-binding)) + (not (typep binding 'keyword-function-argument))) ; XXX (take-note-of-binding init-with-register)))))) (t (mapcar #'take-note-of-binding (find-read-bindings instruction)) @@ -3369,19 +3374,22 @@ binding)) 2))) (loop for key-var in (key-vars function-env) - as key-binding = - (or (movitz-binding key-var function-env nil) - (error "No binding for key-var ~S." key-var)) - as supplied-p-binding = + as key-binding = (or (movitz-binding key-var function-env nil) + (error "No binding for key-var ~S." key-var)) + as used-key-binding = + (when (plusp (car (gethash key-binding var-counts '(0)))) + key-binding) + as used-supplied-p-binding = (when (optional-function-argument-supplied-p-var key-binding) - (or (movitz-binding (optional-function-argument-supplied-p-var key-binding) - function-env nil) - (error "No binding for supplied-p-var ~S." - (optional-function-argument-supplied-p-var key-binding)))) + (let ((b (or (movitz-binding (optional-function-argument-supplied-p-var key-binding) + function-env nil) + (error "No binding for supplied-p-var ~S." + (optional-function-argument-supplied-p-var key-binding))))) + (when (plusp (car (gethash key-binding var-counts '(0)))) + b))) as location upfrom 3 by 2 - do (set-exclusive-location key-binding location) - (assert supplied-p-binding) - (set-exclusive-location supplied-p-binding (1+ location)))) + do (set-exclusive-location used-key-binding location) + (set-exclusive-location used-supplied-p-binding (1+ location)))) ;; Now, use assing-env-bindings on the remaining bindings. (loop for env in (loop with z = nil @@ -3595,7 +3603,7 @@ 'integer)) (warn "ecx from ~S" binding))) (when (movitz-env-get (binding-name binding) 'ignore nil (binding-env binding)) - (warn "The variable ~S is used even if it was declared ignored." + (break "The variable ~S is used even if it was declared ignored." (binding-name binding))) (let ((binding (ensure-local-binding binding funobj)) (protect-registers (cons :edx protect-registers))) @@ -4443,15 +4451,16 @@ (shadow-when-special formal env)) (supplied-p-parameter (or supplied-p - (gensym "supplied-p-")))) + #+ignore (gensym "supplied-p-")))) (movitz-env-add-binding env (make-instance 'keyword-function-argument :name formal 'init-form init-form 'supplied-p-var supplied-p-parameter :keyword-name keyword-name :rest-var-name rest-var-name)) - (movitz-env-add-binding env (make-instance 'supplied-p-function-argument - :name (shadow-when-special supplied-p-parameter env))) + (when supplied-p-parameter + (movitz-env-add-binding env (make-instance 'supplied-p-function-argument + :name (shadow-when-special supplied-p-parameter env)))) formal)))) #+ignore (multiple-value-bind (key-decode-map key-decode-shift) @@ -4980,30 +4989,31 @@ as binding = (movitz-binding key-var-name env) as supplied-p-binding = - (movitz-binding (optional-function-argument-supplied-p-var binding) - env) + (when (optional-function-argument-supplied-p-var binding) + (movitz-binding (optional-function-argument-supplied-p-var binding) + env)) as keyword-ok-label = (make-symbol (format nil "keyword-~A-ok" key-var-name)) do (assert binding) ;; (not (movitz-constantp (optional-function-argument-init-form binding))) append - `((:init-lexvar ,binding - :init-with-register ,binding - :init-with-type t - :shared-reference-p t) - (:init-lexvar ,supplied-p-binding - :init-with-register ,supplied-p-binding - :init-with-type t - :shared-reference-p t)) - append - (when (optional-function-argument-init-form binding) - `((:cmpl :edi (:ebp ,(stack-frame-offset (1+ key-location)))) - (:jne ',keyword-ok-label) - ,@(compiler-call #'compile-form - :form (optional-function-argument-init-form binding) - :env env - :funobj funobj - :result-mode binding) - ,keyword-ok-label)) + (append `((:init-lexvar ,binding + :init-with-register ,binding + :init-with-type t + :shared-reference-p t)) + (when supplied-p-binding + `((:init-lexvar ,supplied-p-binding + :init-with-register ,supplied-p-binding + :init-with-type t + :shared-reference-p t))) + (when (optional-function-argument-init-form binding) + `((:cmpl :edi (:ebp ,(stack-frame-offset (1+ key-location)))) + (:jne ',keyword-ok-label) + ,@(compiler-call #'compile-form + :form (optional-function-argument-init-form binding) + :env env + :funobj funobj + :result-mode binding) + ,keyword-ok-label))) ;;; else append ;;; nil #+ignore