/[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.25 by ram, Thu Apr 9 20:09:58 1992 UTC revision 1.26 by ram, Tue Apr 14 16:24:13 1992 UTC
# Line 727  Line 727 
727  ;;; FUN is the function we are calling, CALL is a call to FUN, and NEXT-BLOCK  ;;; FUN is the function we are calling, CALL is a call to FUN, and NEXT-BLOCK
728  ;;; is the return point for a non-tail call, or NULL if call is a tail call.  ;;; is the return point for a non-tail call, or NULL if call is a tail call.
729  ;;;  ;;;
730    ;;; If the call is not a tail call, then we must do UNCONVERT-TAIL-CALLS, since
731    ;;; a tail call is a call which returns its value out of the enclosing non-let
732    ;;; function.  When call is non-TR, we must convert it back to an ordinary
733    ;;; local call, since the value must be delivered to the receiver of CALL's
734    ;;; value.
735    ;;;
736  ;;; We do different things depending on whether the caller and callee have  ;;; We do different things depending on whether the caller and callee have
737  ;;; returns left:  ;;; returns left:
738  ;;; -- If the callee has no return, it doesn't return, so we just do  ;;; -- If the callee has no return we just do MOVE-LET-CALL-CONT.  Either the
739  ;;;    MOVE-LET-CALL-CONT.  ;;;    function doesn't return, or all returns are via tail-recursive local
740    ;;;    calls.
741  ;;; -- If CALL is a non-tail call, or if both have returns, then we  ;;; -- If CALL is a non-tail call, or if both have returns, then we
742  ;;;    delete the callee's return, move its uses to the call's result  ;;;    delete the callee's return, move its uses to the call's result
743  ;;;    continuation, and transfer control to the appropriate return point.  ;;;    continuation, and transfer control to the appropriate return point.
# Line 752  Line 759 
759                                 (or next-block (node-block call-return)))))                                 (or next-block (node-block call-return)))))
760            (t            (t
761             (assert (node-tail-p call))             (assert (node-tail-p call))
  (break "Yow!")  
762             (setf (lambda-return call-fun) return)             (setf (lambda-return call-fun) return)
763             (setf (return-lambda return) call-fun))))             (setf (return-lambda return) call-fun))))
764    (move-let-call-cont fun)    (move-let-call-cont fun)

Legend:
Removed from v.1.25  
changed lines
  Added in v.1.26

  ViewVC Help
Powered by ViewVC 1.1.5