[armedbear-cvs] r12175 - trunk/abcl/src/org/armedbear/lisp

Erik Huelsmann ehuelsmann at common-lisp.net
Sun Oct 4 20:30:58 UTC 2009


Author: ehuelsmann
Date: Sun Oct  4 16:30:57 2009
New Revision: 12175

Log:
Make non-local GO processing a tad more efficient,
resulting in smaller byte code.

Modified:
   trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp

Modified: trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp	(original)
+++ trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp	Sun Oct  4 16:30:57 2009
@@ -4525,18 +4525,16 @@
         ;; to which there is no non-local GO instruction
         (dolist (tag (remove-if-not #'tag-used-non-locally
                                     (tagbody-tags block)))
-          (let ((NEXT (gensym)))
-            (aload tag-register)
-            (emit 'getstatic *this-class*
-                  (if *file-compilation*
-                      (declare-object-as-string (tag-label tag))
-                      (declare-object (tag-label tag)))
-                  +lisp-object+)
-            (emit 'if_acmpne NEXT) ;; Jump if not EQ.
-            (emit 'goto (tag-label tag))
-            (label NEXT)))
-        ;; Not found. Re-throw Go.
+          (aload tag-register)
+          (emit 'getstatic *this-class*
+                (if *file-compilation*
+                    (declare-object-as-string (tag-label tag))
+                    (declare-object (tag-label tag)))
+                +lisp-object+)
+          ;; Jump if EQ.
+          (emit 'if_acmpeq (tag-label tag)))
         (label RETHROW)
+        ;; Not found. Re-throw Go.
         (aload go-register)
         (emit 'aconst_null) ;; load null value
         (emit-move-to-variable (tagbody-id-variable block))




More information about the armedbear-cvs mailing list