Changeset 11802
- Timestamp:
- 04/29/09 21:46:29 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/compiler-pass1.lisp
r11800 r11802 417 417 ,@body2))) 418 418 419 (defun rewrite-aux-vars-process-decls (forms arg-vars aux-vars) 420 (declare (ignore aux-vars)) 421 (let ((lambda-decls nil) 422 (let-decls nil)) 419 (defun split-decls (forms specific-vars) 420 (let ((other-decls nil) 421 (specific-decls nil)) 423 422 (dolist (form forms) 424 423 (unless (and (consp form) (eq (car form) 'DECLARE)) ; shouldn't happen … … 427 426 (case (car decl) 428 427 ((OPTIMIZE DECLARATION DYNAMIC-EXTENT FTYPE INLINE NOTINLINE) 429 (push (list 'DECLARE decl) lambda-decls))428 (push (list 'DECLARE decl) other-decls)) 430 429 (SPECIAL 431 430 (dolist (name (cdr decl)) 432 (if (memq name arg-vars)433 (push (list 'DECLARE (list 'SPECIAL name)) lambda-decls)434 (push (list 'DECLARE (list 'SPECIAL name)) let-decls))))431 (if (memq name specific-vars) 432 (push `(DECLARE (SPECIAL ,name)) specific-decls) 433 (push `(DECLARE (SPECIAL ,name)) other-decls)))) 435 434 (TYPE 436 435 (dolist (name (cddr decl)) 437 (if (memq name arg-vars)438 (push (list 'DECLARE (list 'TYPE (cadr decl) name)) lambda-decls)439 (push (list 'DECLARE (list 'TYPE (cadr decl) name)) let-decls))))436 (if (memq name specific-vars) 437 (push `(DECLARE (TYPE ,(cadr decl) ,name)) specific-decls) 438 (push `(DECLARE (TYPE ,(cadr decl) ,name)) other-decls)))) 440 439 (t 441 440 (dolist (name (cdr decl)) 442 (if (memq name arg-vars) 443 (push (list 'DECLARE (list (car decl) name)) lambda-decls) 444 (push (list 'DECLARE (list (car decl) name)) let-decls))))))) 445 (setq lambda-decls (nreverse lambda-decls)) 446 (setq let-decls (nreverse let-decls)) 447 (values lambda-decls let-decls))) 448 449 (defun maybe-rewrite-aux-vars (form) 441 (if (memq name specific-vars) 442 (push `(DECLARE (,(car decl) ,name)) specific-decls) 443 (push `(DECLARE (,(car decl) ,name)) other-decls))))))) 444 (values (nreverse other-decls) 445 (nreverse specific-decls)))) 446 447 (defun rewrite-aux-vars (form) 450 448 (let* ((lambda-list (cadr form)) 451 449 (lets (cdr (memq '&AUX lambda-list))) … … 453 451 (unless lets 454 452 ;; no rewriting required 455 (return-from maybe-rewrite-aux-vars form))453 (return-from rewrite-aux-vars form)) 456 454 (multiple-value-bind (body decls) 457 455 (parse-body (cddr form)) 458 456 (dolist (form lets) 459 457 (cond ((consp form) 460 (push ( %car form) aux-vars))458 (push (car form) aux-vars)) 461 459 (t 462 460 (push form aux-vars)))) 463 (setq lambda-list (subseq lambda-list 0 (position '&AUX lambda-list)))464 461 (multiple-value-bind (lambda-decls let-decls) 465 (rewrite-aux-vars-process-decls decls 466 (lambda-list-names lambda-list) 467 (nreverse aux-vars)) 468 `(lambda ,lambda-list 462 (split-decls decls aux-vars) 463 `(lambda ,(subseq lambda-list 0 (position '&AUX lambda-list)) 469 464 ,@lambda-decls 470 465 (let* ,lets … … 480 475 (let* ((block-name (fdefinition-block-name name)) 481 476 (lambda-expression 482 ( maybe-rewrite-aux-vars477 (rewrite-aux-vars 483 478 `(lambda ,lambda-list ,@decls (block ,block-name ,@body)))) 484 479 (*visible-variables* *visible-variables*) … … 508 503 (multiple-value-bind (body decls) (parse-body body) 509 504 (setf (compiland-lambda-expression compiland) 510 ( maybe-rewrite-aux-vars505 (rewrite-aux-vars 511 506 `(lambda ,lambda-list ,@decls (block ,name ,@body))))) 512 507 (push variable *all-variables*) … … 569 564 (setf (compiland-lambda-expression compiland) 570 565 ;; if there still was a doc-string present, remove it 571 ( maybe-rewrite-aux-vars566 (rewrite-aux-vars 572 567 `(lambda ,lambda-list ,@decls ,@body))) 573 568 (let ((*visible-variables* *visible-variables*) … … 599 594 "P1-LAMBDA: can't handle optional argument with non-constant initform."))))))) 600 595 (p1-function (list 'FUNCTION 601 ( maybe-rewrite-aux-vars form)))))596 (rewrite-aux-vars form))))) 602 597 603 598 (defun p1-eval-when (form) … … 916 911 (let ((form (compiland-lambda-expression compiland))) 917 912 (aver (eq (car form) 'LAMBDA)) 918 (setf form ( maybe-rewrite-aux-vars form))913 (setf form (rewrite-aux-vars form)) 919 914 (process-optimization-declarations (cddr form)) 920 915
Note: See TracChangeset
for help on using the changeset viewer.