/[cmucl]/src/compiler/locall.lisp
ViewVC logotype

Diff of /src/compiler/locall.lisp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.56 by gerd, Sat Oct 11 09:44:45 2003 UTC revision 1.57 by gerd, Sat Oct 11 11:57:55 2003 UTC
# Line 981  Line 981 
981                 (member (functional-kind fun) '(nil :assignment))                 (member (functional-kind fun) '(nil :assignment))
982                 (not (functional-entry-function fun)))                 (not (functional-entry-function fun)))
983        (let* ((ref-cont (node-cont (first refs)))        (let* ((ref-cont (node-cont (first refs)))
984               (dest (continuation-dest ref-cont)))               (call (continuation-dest ref-cont)))
985          (when (and dest          (when (and call
986                     (basic-combination-p dest)                     (basic-combination-p call)
987                     (eq (basic-combination-fun dest) ref-cont)                     (eq (basic-combination-fun call) ref-cont)
988                     (eq (basic-combination-kind dest) :local)                     (eq (basic-combination-kind call) :local)
989                     (not (block-delete-p (node-block dest)))                     (not (block-delete-p (node-block call)))
990                       ;;
991                       ;; Gross hack.  Shouldn't happen that the call has
992                       ;; no successors, but it does happen when Python
993                       ;; eliminates dead code, and the interpreter doesn't
994                       ;; like if we don't let-convert in such a case.
995                       (or *converting-for-interpreter*
996                           (block-succ (node-block call)))
997                     (cond ((ok-initial-convert-p fun) t)                     (cond ((ok-initial-convert-p fun) t)
998                           (t                           (t
999                            (reoptimize-continuation ref-cont)                            (reoptimize-continuation ref-cont)
1000                            nil)))                            nil)))
1001            (when (eq fun (node-home-lambda dest))            (when (eq fun (node-home-lambda call))
1002              (delete-lambda fun)              (delete-lambda fun)
1003              (return-from maybe-let-convert nil))              (return-from maybe-let-convert nil))
1004            (unless (eq (functional-kind fun) :assignment)            (unless (eq (functional-kind fun) :assignment)
1005              (let-convert fun dest))              (let-convert fun call))
1006            (reoptimize-call dest)            (reoptimize-call call)
1007            (setf (functional-kind fun)            (setf (functional-kind fun)
1008                  (if (mv-combination-p dest) :mv-let :let))))                  (if (mv-combination-p call) :mv-let :let))))
1009        t)))        t)))
1010    
1011    

Legend:
Removed from v.1.56  
changed lines
  Added in v.1.57

  ViewVC Help
Powered by ViewVC 1.1.5