From 667686f86779a13a988ea048518842ad11813f59 Mon Sep 17 00:00:00 2001 From: ram <ram> Date: Sat, 10 Mar 1990 16:52:51 +0000 Subject: [PATCH] Added code to emit the IR2-ENVIRONMENT-ELSEWHERE-START label. --- compiler/codegen.lisp | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/compiler/codegen.lisp b/compiler/codegen.lisp index 1b1fd64bb..7383e5bcb 100644 --- a/compiler/codegen.lisp +++ b/compiler/codegen.lisp @@ -30,21 +30,26 @@ ;;; Generate-Code -- Interface ;;; (defun generate-code (component) - (do-ir2-blocks (block component) - (let ((1block (ir2-block-block block))) - (when (eq (block-info 1block) block) - (emit-label (block-label 1block)))) + (let ((prev-env nil)) + (do-ir2-blocks (block component) + (let* ((1block (ir2-block-block block)) + (lambda (block-lambda 1block))) + (when (and (eq (block-info 1block) block) lambda) + (emit-label (block-label 1block)) + (let ((env (lambda-environment lambda))) + (unless (eq env prev-env) + (let ((lab (gen-label))) + (setf (ir2-environment-elsewhere-start (environment-info env)) + lab) + (emit-label-elsewhere lab)) + (setq prev-env env))))) - (do ((vop (ir2-block-start-vop block) (vop-next vop))) - ((null vop)) - (let ((gen (vop-info-generator-function (vop-info vop)))) - (if gen - (funcall gen vop) - (format t "Missing generator for ~S.~%" - (template-name (vop-info vop))))))) + (do ((vop (ir2-block-start-vop block) (vop-next vop))) + ((null vop)) + (let ((gen (vop-info-generator-function (vop-info vop)))) + (if gen + (funcall gen vop) + (format t "Missing generator for ~S.~%" + (template-name (vop-info vop)))))))) (finish-assembly)) - - -;;;; Post-assembly: -;;; -- GitLab