[LMH]Re: CATCH/THROW?

Paul Fuqua pf@ti.com
Thu Jul 24 21:08:01 2003


    Date: Thu, 24 Jul 2003 23:51:39 -0400 (EDT)
    From: Nyef <nyef@softhome.net>

    00dd: 0c02 <-IMMED 2
    00de: e7e9 BR-NOT-NIL 00c8
    00df: fd66 BR 0046
    00e0: 005d auxop #o135 (%Close-Catch-Unwind-Protect)
    00e1: 007f auxop #o177 (Long-PUSHJ)
    00e2: 00e5 auxop #o345
    00e3: 005a auxop #o132 (%Unwind-Protect-Continue)
    00e4: fc03 BR 00e8
    00e5: 5140 PUSH local[0]
    00e6: 881c CALL-1-DEST-INDS FEF[28]
    00e7: 000c auxop #o14 (POPJ)
    00e8: 1007 TEST FEF[7]
    00e9: e401 BR-NIL 00eb
    00ea: 0052 auxop #o122 (Return-NIL)
    00eb: 841d CALL-0-DEST-RETURN FEF[29]

I booted my Explorer for the first time in months -- it's in a small
bedroom with inadequate cooling and it's already hot enough in Dallas --
and the corresponding bit of disassembly for SYS:CONFIGURE-NUPI-DISK-SYSTEM
is

221 <-immed     2
222 br-not-null 200
223 br          70
224 (aux) %close-catch-unwind-protect
225 (aux) long-pushj 229
227 (aux) %unwind-protect-continue
228 br          232
229 push        local|0 ; rqb
230 test call-1 fef|20  ; #'sys:return-disk-rqb
231 (aux) popj
232 test        fef|7   ; sys::*disk-present*
233 br-null     235
234 (aux) return-nil
235 return call-0 fef|29        ; #'sys::set-all-pack-names

What we have here is an internal call (long-pushj -- offset in second 16
bits, hence "long") to do the cleanup-forms (SYS:RETURN-DISK-RQB, hidden
under the WITH-RQB macro), then the return (popj) back to do the
%unwind-protect-continue.  Then depending on SYS::*DISK-PRESENT* we
return NIL immediately or call SYS::SET-ALL-PACK-NAMES.

                              pf

ps  Anybody have a good solution for Explorer filters?  The originals are
trashed and I hate to think about all the dust blowing around in there.