[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.