]> git.eshelyaron.com Git - emacs.git/commitdiff
adding non locals
authorAndrea Corallo <andrea_corallo@yahoo.it>
Sun, 21 Jul 2019 09:38:26 +0000 (11:38 +0200)
committerAndrea Corallo <akrl@sdf.org>
Wed, 1 Jan 2020 10:33:56 +0000 (11:33 +0100)
lisp/emacs-lisp/comp.el

index a3c2db4283fcb7d372c51e6fe743ef43b8195faf..62b80a0a5ac07236a2a92a91ad09722bb9447289 100644 (file)
@@ -466,8 +466,25 @@ the annotation emission."
                                           :constant arg)
                          ,(make-comp-mvar :const-vld t
                                           :constant nil))))
-      (byte-pophandler)
-      (byte-pushconditioncase)
+      (byte-pophandler
+       (comp-emit '(pop-handler)))
+      (byte-pushconditioncase
+       (let ((blocks (comp-func-blocks comp-func))
+             (fall-bb (comp-new-block-sym))) ;; Fall through block
+         (puthash fall-bb
+                 (make-comp-block :sp (comp-sp))
+                 blocks)
+         (let ((target (comp-lap-to-limple-bb (cl-third inst)))
+               (handler-type (cdr (last inst))))
+           (comp-emit (list 'push-handler (comp-slot-next)
+                            handler-type
+                            target
+                            fall-bb))
+           (puthash target
+                   (make-comp-block :sp (comp-sp))
+                   blocks)
+           (comp-mark-block-closed))
+         (comp-emit-block fall-bb)))
       (byte-pushcatch)
       (byte-nth auto)
       (byte-symbolp auto)