Annotation of 43BSD/ucb/lisp/lisplib/fix.l, revision 1.1.1.1

1.1       root        1: (setq rcs-fix-
                      2:    "$Header: /usr/lib/lisp/RCS/fix.l,v 1.2 83/08/06 08:39:58 jkf Exp $")
                      3: 
                      4: ; vi: set lisp :
                      5: 
                      6: (eval-when (compile eval)
                      7:   (or (get 'cmumacs 'version) (load 'cmumacs)))
                      8: 
                      9: ; LWE 1/11/81 Hack hack....
                     10: ;
                     11: ; LWE 1/11/81 Bet you didn't know this, but this won't work INTERPRETED,
                     12: ;            but Dave assures me it works compiled. (In MACLisp...)
                     13: ; 
                     14: (declare (special cmd frame x cnt var init label part incr limit selectq))
                     15: 
                     16: (dv fixfns
                     17:     ((*** This is FIXIT written by David Touretzky and adapted to Franz by Don
                     18:       Cohen)
                     19:      (declare (special framelist rframelist interrupt-handlers handler-labels)
                     20:               (special prinlevel prinlength evalhook-switch traced-stuff)
                     21:               (special lastword piport hush-debug)
                     22:               (*fexpr editf step type))
                     23:      (sstatus feature fixit)
                     24:      (*rset t)
                     25:      ER%tpl
                     26:      fixit
                     27:      debug
                     28:      debug-iter
                     29:      debug1
                     30:      debug-bktrace
                     31:      debug-print
                     32:      debug-print1
                     33:      debug-findcall
                     34:      debug-replace-function-name
                     35:      debug-scanflist
                     36:      debug-scanstk
                     37:      debug-getframes
                     38:      debug-nextframe
                     39:      debug-upframe
                     40:      debug-dnframe
                     41:      debug-upfn
                     42:      debug-dnfn
                     43:      debug-showvar
                     44:      debug-nedit
                     45:      debug-insidep
                     46:      debug-findusrfn
                     47:      debug-findexpr
                     48:      debug-pop
                     49:      debug-where
                     50:      debug-sysp
                     51:      interrupt-handlers
                     52:      handler-labels
                     53:      (or (boundp 'traced-stuff) (setq traced-stuff nil))
                     54:      (or (boundp 'evalhook-switch) (setq evalhook-switch nil))
                     55:      (setq hush-debug nil)))
                     56: 
                     57: (or (boundp 'traced-stuff) (setq traced-stuff nil))
                     58: (or (boundp 'evalhook-switch) (setq evalhook-switch nil))
                     59: (or (boundp 'debug-sysmode) (setq debug-sysmode nil))
                     60: (setq hush-debug nil)
                     61: 
                     62: (*** This is FIXIT written by David Touretzky and adapted to Franz by Don Cohen)
                     63: 
                     64: (declare (special framelist rframelist interrupt-handlers handler-labels)
                     65:          (special prinlevel prinlength evalhook-switch traced-stuff)
                     66:          (special lastword piport hush-debug debug-sysmode)
                     67:          (*fexpr editf step type))
                     68: 
                     69: (defvar fixit-eval nil)
                     70: (defvar fixit-print nil)
                     71: (defvar fixit-pp nil)
                     72: 
                     73: (sstatus feature fixit)
                     74: 
                     75: (*rset t)
                     76: 
                     77: ; (jkf) it is not clear that you want this to take over on all errors,
                     78: ; but the cmu people seem to want that.
                     79: #+cmu (progn 'compile
                     80:             (dv ER%tpl fixit)
                     81:             (dv ER%all fixit) ; LWE 1/17/81 MAYBE THIS WILL FIX THIS code
                     82:             )
                     83: 
                     84: ;--- eval, print and pretty-print functions are user-selectable by just
                     85: ; assigning another value to fixit-eval, fixit-print and fixit-pp.
                     86: ;
                     87: (defmacro fix-eval (&rest args)
                     88:    `(cond ((and fixit-eval
                     89:                (getd fixit-eval))
                     90:           (funcall fixit-eval ,@args))
                     91:          (t (eval ,@args))))
                     92: 
                     93: (defmacro fix-print (&rest args)
                     94:    `(cond ((and fixit-print
                     95:                (getd fixit-print))
                     96:           (funcall fixit-print ,@args))
                     97:          (t (print ,@args))))
                     98: 
                     99: (defmacro fix-pp (&rest args)
                    100:    `(cond ((and fixit-pp
                    101:                (getd fixit-pp))
                    102:           (funcall fixit-pp ,@args))
                    103:          (t ($prpr ,@args))))
                    104: 
                    105: (def fixit
                    106:   (nlambda (l)
                    107:     (prog (piport)
                    108:           (do nil (nil) (eval (cons 'debug l))))))
                    109: 
                    110: (def debug
                    111:   (nlambda (params)
                    112:     (prog (cmd frame framelist rframelist nframe val infile)
                    113:           (setq infile t)
                    114:           (and evalhook-switch (step nil))
                    115:           (setq rframelist
                    116:                 (reverse
                    117:                  (setq framelist
                    118:                        (or (debug-getframes)
                    119:                            (list
                    120:                             (debug-scanstk '(nil) '(debug)))))))
                    121:           (setq frame (debug-findexpr (car framelist)))
                    122:           ;(tab 0)
                    123:           (cond
                    124:            ((and (car params) (not (eq (car params) 'edit)))
                    125:             (terpri)
                    126:             (princ '|;debug: |)
                    127:             (princ (cadddr params))
                    128:             (cond ((cddddr params)
                    129:                    (princ '| -- |)
                    130:                    (fix-print (cddddr params))))
                    131:             (terpri)
                    132:             (go loop)))
                    133:           (debug-print1 frame nil)
                    134:           (terpri)
                    135:           (cond (hush-debug (setq hush-debug nil) (go loop))
                    136:                 ((not (memq 'edit params)) (go loop)))
                    137:           (drain nil)
                    138:           (princ '|type e to edit, <cr> to debug: |)
                    139:           (setq val (tyi))
                    140:           (cond ((or (= val 69) (= val 101))
                    141:                  (and (errset (debug-nedit frame))
                    142:                       (setq cmd '(ok))
                    143:                       (go cmdr)))
                    144:                 ((or (= val 78) (= val 110)) (terpri) (debug-pop)))
                    145:      loop (terpri)
                    146:           (princ ':)
                    147:           (cond ((null (setq cmd (lineread))) (reset)))
                    148:      cmdr (cond
                    149:            ((dtpr (car cmd))
                    150:             (setq val (fix-eval (car cmd) (cadddr frame)))
                    151:             (fix-print val)
                    152:             (terpri)
                    153:             (go loop)))
                    154:           (setq nframe (debug1 cmd frame))
                    155:           (and (not (atom nframe)) (setq frame nframe) (go loop))
                    156:           (fix-print (or nframe (car cmd)))
                    157:           (princ '" Huh? - type h for help")
                    158:           (go loop))))
                    159: 
                    160: (def debug-iter
                    161:   (macro (x)
                    162:     (cons 'prog
                    163:           (cons 'nil
                    164:                 (cons 'loop
                    165:                       (cons (list 'setq 'nframe (cadr x))
                    166:                             '((setq cnt (|1-| cnt))
                    167:                               (and (or (null nframe) (zerop cnt))
                    168:                                    (return nframe))
                    169:                               (setq frame nframe)
                    170:                               (go loop))))))))
                    171: 
                    172: (def debug1
                    173:   (lambda (cmd frame)
                    174:     (prog (nframe val topframe cnt item)
                    175:           (setq topframe (car framelist))
                    176:           (or (eq (typep (car cmd)) 'symbol) (return nil))
                    177:           ; if "> name", replace function or variable name with new atom
                    178:           (and (eq (car cmd) '>)
                    179:                (return (debug-replace-function-name cmd topframe)))
                    180:           (and (eq (getchar (car cmd) 1) 'b)
                    181:                (eq (getchar (car cmd) 2) 'k)
                    182:                (return (debug-bktrace cmd frame)))
                    183:           (setq cnt
                    184:                 (cond ((fixp (cadr cmd)) (cadr cmd))
                    185:                       ((fixp (caddr cmd)) (caddr cmd))
                    186:                       (t 1)))
                    187:           (and (< cnt 1) (setq cnt 1))
                    188:           (setq item
                    189:                 (cond ((symbolp (cadr cmd)) (cadr cmd))
                    190:                       ((symbolp (caddr cmd)) (caddr cmd))))
                    191:           (and item
                    192:                (cond ((memq (car cmd) '(u up))
                    193:                       (setq cmd (cons 'ups (cdr cmd))))
                    194:                      ((memq (car cmd) '(d dn))
                    195:                       (setq cmd (cons 'dns (cdr cmd))))))
                    196:           (selectq (car cmd)
                    197:                    (top (debug-print1 (setq frame topframe) nil))
                    198:                    (bot (debug-print1 (setq frame (car rframelist)) nil))
                    199:                    (p (debug-print1 frame nil))
                    200:                    (pp (fix-pp (caddr frame)))
                    201:                    (where (debug-where frame))
                    202:                    (help
                    203:                     (cond ((cdr cmd) (eval cmd))
                    204:                           (t (ty |/usr/lib/lisp/fixit.ref|))))
                    205:                    ((? h) (ty |/usr/lib/lisp/fixit.ref|))
                    206:                    ((go ok)
                    207:                     (setq frame (debug-findexpr topframe))
                    208:                     (cond ((eq (caaddr frame) 'debug)
                    209:                            (freturn (cadr frame) t))
                    210:                           (t (fretry (cadr frame) frame))))
                    211:                    (pop (debug-pop))
                    212:                    (step (setq frame (debug-findexpr frame))
                    213:                          (step t)
                    214:                          (fretry (cadr (debug-dnframe frame)) frame))
                    215:                    (redo (and item
                    216:                               (setq frame
                    217:                                     (debug-findcall item frame framelist)))
                    218:                          (and frame (fretry (cadr frame) frame)))
                    219:                    (return (setq val (eval (cadr cmd)))
                    220:                            (freturn (cadr frame) val))
                    221:                    (edit (debug-nedit frame))
                    222:                    (editf
                    223:                     (cond ((null item)
                    224:                            (setq frame
                    225:                                  (or (debug-findusrfn (debug-nedit frame))
                    226:                                      (car rframelist))))
                    227:                           ((dtpr (getd item))
                    228:                            (errset (funcall 'editf (list item))))
                    229:                           (t (setq frame nil))))
                    230:                    (u (debug-iter (debug-upframe frame))
                    231:                       (cond
                    232:                        ((null nframe) (terpri) (princ '|<top of stack>|)))
                    233:                       (debug-print1 (setq frame (or nframe frame)) nil))
                    234:                    (d (setq nframe
                    235:                             (or (debug-iter (debug-dnframe frame)) frame))
                    236:                       (debug-print1 nframe nil)
                    237:                       (cond ((eq frame nframe)
                    238:                              (terpri)
                    239:                              (princ '|<bottom of stack>|))
                    240:                             (t (setq frame nframe))))
                    241:                    (up (setq nframe (debug-iter (debug-upfn frame)))
                    242:                        (cond
                    243:                         ((null nframe) (terpri) (princ '|top of stack|)))
                    244:                        (setq frame (or nframe topframe))
                    245:                        (debug-print1 frame nil))
                    246:                    (dn (setq frame
                    247:                              (or (debug-iter (debug-dnfn frame))
                    248:                                  (car rframelist)))
                    249:                        (debug-print1 frame nil)
                    250:                        (cond
                    251:                         ((not (eq frame nframe))
                    252:                          (terpri)
                    253:                          (princ '|<bottom of stack>|))))
                    254:                    (ups (setq frame
                    255:                               (debug-iter
                    256:                                (debug-findcall item frame rframelist)))
                    257:                         (and frame (debug-print1 frame nil)))
                    258:                    (dns (setq frame
                    259:                               (debug-iter
                    260:                                (debug-findcall item frame framelist)))
                    261:                         (and frame (debug-print1 frame nil)))
                    262:                   (sys (setq debug-sysmode (not debug-sysmode))
                    263:                        (patom "sysmode now ")(patom debug-sysmode) (terpr))
                    264:                    (cond ((not (dtpr (car cmd)))
                    265:                           (*** should there also be a boundp test here)
                    266:                           (debug-showvar (car cmd) frame))
                    267:                          (t (setq frame (car cmd)))))
                    268:           (return (or frame item)))))
                    269: 
                    270: (def debug-replace-function-name 
                    271:   (lambda (cmd frame)
                    272:     (prog (oldname newname errorcall nframe)
                    273:          (setq errorcall (caddr frame))
                    274:          (cond ((eq (caddddr errorcall) '|eval: Undefined function |)
                    275:                 (setq oldname (cadddddr errorcall))
                    276:                 (setq newname (cadr cmd))
                    277:                 (setq cnt 3.)
                    278:                 (setq frame (debug-iter (debug-dnframe frame)))
                    279:                 (dsubst newname oldname frame)
                    280:                 (fretry (cadr frame) frame))
                    281:                ((eq (caddddr errorcall) '|Unbound Variable:|)
                    282:                 (setq oldname (cadddddr errorcall))
                    283:                 (setq newname (eval (cadr cmd)))
                    284:                 (setq cnt 3.)
                    285:                 (setq frame (debug-iter (debug-dnframe frame)))
                    286:                 (dsubst newname oldname frame)
                    287:                 (fretry (cadr frame) frame))
                    288:                ( t (return nil))))))
                    289: 
                    290: (def debug-bktrace
                    291:   (lambda (cmd oframe)
                    292:     (prog (sel cnt item frame nframe)
                    293:           (mapc '(lambda (x)
                    294:                          (setq sel
                    295:                                (cons (selectq x
                    296:                                               (f 'fns)
                    297:                                               (a 'sysp)
                    298:                                               (v 'bind)
                    299:                                               (e 'expr)
                    300:                                               (c 'current)
                    301:                                               'bogus)
                    302:                                      sel)))
                    303:                 (cddr (explodec (car cmd))))
                    304:           (setq item
                    305:                 (cond ((eq (typep (cadr cmd)) 'symbol) (cadr cmd))
                    306:                       ((eq (typep (caddr cmd)) 'symbol) (caddr cmd))))
                    307:           (cond ((debug-sysp item) (setq sel (cons 'sysp sel)))
                    308:                 ((not (memq 'sysp sel))
                    309:                  (setq sel (cons 'user sel))))
                    310:           (setq cnt
                    311:                 (cond ((fixp (cadr cmd)) (cadr cmd))
                    312:                       ((fixp (caddr cmd)) (caddr cmd))
                    313:                       (item 1)))
                    314:           (cond ((null cnt)
                    315:                  (setq frame
                    316:                        (cond ((memq 'current sel) oframe)
                    317:                              (t (car rframelist))))
                    318:                  (go dbpr))
                    319:                 ((null item)
                    320:                  (setq frame (car framelist))
                    321:                  (and (or (not (memq 'user sel))
                    322:                           (atom (caddr (car framelist)))
                    323:                           (not (debug-sysp (caaddr (car framelist)))))
                    324:                       (setq cnt (|1-| cnt)))
                    325:                  (setq frame
                    326:                        (cond ((zerop cnt) frame)
                    327:                              ((memq 'user sel)
                    328:                               (debug-iter (debug-dnfn frame)))
                    329:                              (t (debug-iter (debug-dnframe frame)))))
                    330:                  (setq frame (or frame (car rframelist)))
                    331:                  (go dbpr))
                    332:                 (t (setq frame (car framelist))))
                    333:           (setq frame
                    334:                 (cond ((and (= cnt 1)
                    335:                             (not (atom (caddr (car framelist))))
                    336:                             (eq item (caaddr (car framelist))))
                    337:                        (car framelist))
                    338:                       ((debug-iter (debug-findcall item frame framelist)))
                    339:                       (t (car rframelist))))
                    340:      dbpr (debug-print frame sel oframe)
                    341:           (cond ((eq frame (car rframelist))
                    342:                  (terpri)
                    343:                  (princ '|<bottom of stack>|)
                    344:                  (terpri))
                    345:                 (t (terpri)))
                    346:           (cond
                    347:            ((memq 'bogus sel)
                    348:             (terpri)
                    349:             (princ (car cmd))
                    350:             (princ '| contains an invalid bk modifier|)))
                    351:           (return oframe))))
                    352: 
                    353: (def debug-print
                    354:   (lambda (frame sel ptr)
                    355:     (prog (curframe)
                    356:           (setq curframe (car framelist))
                    357:      loop (cond ((not
                    358:                   (and (memq 'user sel)
                    359:                        (not (atom (caddr curframe)))
                    360:                        (debug-sysp (caaddr curframe))))
                    361:                  (debug-print1 curframe sel)
                    362:                  (and (eq curframe ptr) (princ '|   <--- you are here|)))
                    363:                 ((eq curframe ptr)
                    364:                  (terpri)
                    365:                  (princ '|  <--- you are somewhere in here|)))
                    366:           (and (eq curframe frame) (return frame))
                    367:           (setq curframe (debug-dnframe curframe))
                    368:           (or curframe (return frame))
                    369:           (go loop))))
                    370: 
                    371: (def debug-print1
                    372:   (lambda (frame sel)
                    373:     (prog (prinlevel prinlength varlist)
                    374:           (and (not (memq 'expr sel))
                    375:                (setq prinlevel 2)
                    376:                (setq prinlength 5))
                    377:           (cond
                    378:            ((atom (caddr frame))
                    379:             (terpri)
                    380:             (princ '|   |)
                    381:             (fix-print (caddr frame))
                    382:             (princ '| <- eval error|)
                    383:             (return t)))
                    384:           (and (memq 'bind sel)
                    385:                (cond ((memq (caaddr frame) '(prog lambda))
                    386:                       (setq varlist (cadr (caddr frame))))
                    387:                      ((and (atom (caaddr frame)) (dtpr (getd (caaddr frame))))
                    388:                       (setq varlist (cadr (getd (caaddr frame))))))
                    389:                (mapc (function
                    390:                       (lambda (v)
                    391:                               (debug-showvar v
                    392:                                              (or (debug-upframe frame)
                    393:                                                  frame))))
                    394:                      (cond ((and varlist (atom varlist)) (ncons varlist))
                    395:                            (t varlist))))
                    396:           (and (memq 'user sel)
                    397:                (debug-sysp (caaddr frame))
                    398:                (return nil))
                    399:           (cond ((memq (caaddr frame) interrupt-handlers)
                    400:                  (terpri)
                    401:                  (princ '<------------)
                    402:                  (fix-print (cadr (assq (caaddr frame) handler-labels)))
                    403:                  (princ '-->))
                    404:                 ((eq (caaddr frame) 'debug)
                    405:                  (terpri)
                    406:                  (princ '<------debug------>))
                    407:                 ((memq 'fns sel)
                    408:                  (terpri)
                    409:                  (and (debug-sysp (caaddr frame)) (princ '|  |))
                    410:                  (fix-print (caaddr frame)))
                    411:                 (t (terpri)
                    412:                    (fix-print
                    413:                     (cond ((eq (car frame) 'eval) (caddr frame))
                    414:                           (t (cons (caaddr frame) (cadr (caddr frame))))))))
                    415:           (or (not (symbolp (caaddr frame)))
                    416:               (eq (caaddr frame) (concat (caaddr frame)))
                    417:               (princ '|  <not interned>|))
                    418:           (return t))))
                    419: 
                    420: (def debug-findcall
                    421:   (lambda (fn frame flist)
                    422:     (prog nil
                    423:      loop (setq frame (debug-nextframe frame flist nil))
                    424:           (or frame (return nil))
                    425:           (cond ((atom (caddr frame))
                    426:                  (cond ((eq (caddr frame) fn) (return frame)) (t (go loop))))
                    427:                 ((eq (caaddr frame) fn) (return frame))
                    428:                 (t (go loop))))))
                    429: 
                    430: (def debug-scanflist
                    431:   (lambda (frame fnset)
                    432:     (prog nil
                    433:      loop (or frame (return nil))
                    434:           (and (not (atom (caddr frame)))
                    435:                (memq (caaddr frame) fnset)
                    436:                (return frame))
                    437:           (setq frame (debug-dnframe frame))
                    438:           (go loop))))
                    439: 
                    440: (def debug-scanstk
                    441:   (lambda (frame fnset)
                    442:     (prog nil
                    443:      loop (or frame (return nil))
                    444:           (and (not (atom (caddr frame)))
                    445:                (memq (caaddr frame) fnset)
                    446:                (return frame))
                    447:           (setq frame (evalframe (cadr frame)))
                    448:           (go loop))))
                    449: 
                    450: (def debug-getframes
                    451:   (lambda nil
                    452:     (prog (flist fnew)
                    453:           (setq fnew
                    454:                 (debug-scanstk '(nil)
                    455:                                (cons 'debug interrupt-handlers)))
                    456:      loop (and (not debug-sysmode)
                    457:               (not (atom (caddr fnew)))
                    458:                (eq (caaddr fnew) 'debug)
                    459:                (eq (car (evalframe (cadr fnew))) 'apply)
                    460:                (memq (caaddr (evalframe (cadr fnew))) interrupt-handlers)
                    461:                (setq fnew (evalframe (cadr fnew))))
                    462:           (and (not debug-sysmode)
                    463:               (null flist)
                    464:                (eq (car fnew) 'apply)
                    465:                (memq (caaddr fnew) interrupt-handlers)
                    466:                (setq fnew (evalframe (cadr fnew))))
                    467:           (and (not debug-sysmode)
                    468:               (eq (car fnew) 'apply)
                    469:                (eq (typep (caaddr fnew)) 'symbol)
                    470:                (not (eq (caaddr fnew) (concat (caaddr fnew))))
                    471:                (setq fnew (evalframe (cadr fnew)))
                    472:                (setq fnew (evalframe (cadr fnew)))
                    473:                (setq fnew (evalframe (cadr fnew)))
                    474:                (setq fnew (evalframe (cadr fnew)))
                    475:                (go loop))
                    476:           (and (not debug-sysmode)
                    477:               (not (atom (caddr fnew)))
                    478:                (memq (caaddr fnew) '(evalhook* evalhook))
                    479:                (setq fnew (evalframe (cadr fnew)))
                    480:                (go loop))
                    481:           (and (not debug-sysmode)
                    482:               (eq (car fnew) 'apply)
                    483:                (eq (caaddr fnew) 'eval)
                    484:                (cadadr (caddr fnew))
                    485:                (or (not (fixp (cadadr (caddr fnew))))
                    486:                    (= (cadadr (caddr fnew)) -1))
                    487:                (setq fnew (evalframe (cadr fnew)))
                    488:                (go loop))
                    489:           (and fnew
                    490:                (setq flist (cons fnew flist))
                    491:                (setq fnew (evalframe (cadr fnew)))
                    492:                (go loop))
                    493:           (return (nreverse flist)))))
                    494: 
                    495: (def debug-nextframe
                    496:   (lambda (frame flist sel)
                    497:     (prog nil
                    498:           (setq flist (cdr (memq frame flist)))
                    499:           (and (not (memq 'user sel)) (return (car flist)))
                    500:      loop (or flist (return nil))
                    501:           (cond
                    502:            ((or (atom (caddr (car flist)))
                    503:                 (not (debug-sysp (caaddr (car flist)))))
                    504:             (return (car flist))))
                    505:           (setq flist (cdr flist))
                    506:           (go loop))))
                    507: 
                    508: (def debug-upframe
                    509:   (lambda (frame)
                    510:     (debug-nextframe frame rframelist nil)))
                    511: 
                    512: (def debug-dnframe
                    513:   (lambda (frame)
                    514:     (debug-nextframe frame framelist nil)))
                    515: 
                    516: (def debug-upfn
                    517:   (lambda (frame)
                    518:     (debug-nextframe frame rframelist '(user))))
                    519: 
                    520: (def debug-dnfn
                    521:   (lambda (frame)
                    522:     (debug-nextframe frame framelist '(user))))
                    523: 
                    524: (def debug-showvar
                    525:   (lambda (var frame)
                    526:     (terpri)
                    527:     (princ '|   |)
                    528:     (princ var)
                    529:     (princ '| = |)
                    530:     (fix-print
                    531:      ((lambda (val) (cond ((atom val) '?) (t (car val))))
                    532:       (errset (fix-eval var (cadddr frame)) nil)))))
                    533: 
                    534: (def debug-nedit
                    535:   (lambda (frame)
                    536:     (prog (val body elem nframe)
                    537:           (setq elem (caddr frame))
                    538:           (setq val frame)
                    539:      scan (setq val (debug-findusrfn val))
                    540:           (or val (go nofn))
                    541:           (setq body (getd (caaddr val)))
                    542:           (cond ((debug-insidep elem body)
                    543:                  (princ '=)
                    544:                  (fix-print (caaddr val))
                    545:                  (edite body
                    546:                         (list 'f (cons '== elem) 'tty:)
                    547:                         (caaddr val))
                    548:                  (return frame))
                    549:                 ((or (eq elem (caddr val)) (debug-insidep elem (caddr val)))
                    550:                  (setq val (debug-dnframe val))
                    551:                  (go scan)))
                    552:      nofn (setq nframe (debug-dnframe frame))
                    553:           (or nframe (go doit))
                    554:           (and (debug-insidep elem (caddr nframe))
                    555:                (setq frame nframe)
                    556:                (go nofn))
                    557:      doit (edite (caddr frame)
                    558:                  (and (debug-insidep elem (caddr frame))
                    559:                       (list 'f (cons '== elem) 'tty:))
                    560:                  nil)
                    561:           (return frame))))
                    562: 
                    563: (def debug-insidep
                    564:   (lambda (elem expr)
                    565:     (car (errset (edite expr (list 'f (cons '== elem)) nil)))))
                    566: 
                    567: (def debug-findusrfn
                    568:   (lambda (frame)
                    569:     (cond ((null frame) nil)
                    570:           ((and (dtpr (caddr frame))
                    571:                 (symbolp (caaddr frame))
                    572:                 (dtpr (getd (caaddr frame))))
                    573:            frame)
                    574:           (t (debug-findusrfn (debug-dnframe frame))))))
                    575: 
                    576: (def debug-findexpr
                    577:   (lambda (frame)
                    578:     (cond ((null frame) nil)
                    579:           ((and (eq (car frame) 'eval) (not (atom (caddr frame))))
                    580:            frame)
                    581:           (t (debug-findexpr (debug-dnframe frame))))))
                    582: 
                    583: (def debug-pop
                    584:   (lambda nil
                    585:     (prog (frame)
                    586:          (setq frame (car framelist))
                    587:      l    (cond ((null (setq frame (evalframe (cadr frame))))(reset)))
                    588:          (cond ((and (dtpr (caddr frame))(eq (caaddr frame) 'debug))
                    589:                 (freturn (cadr frame) nil)))
                    590:          (go l))))
                    591: 
                    592: (def debug-where
                    593:   (lambda (frame)
                    594:     (prog (lev diff nframe)
                    595:           (setq lev (- (length framelist) (length (memq frame rframelist))))
                    596:           (setq diff (- (length framelist) lev 1))
                    597:           (debug-print1 frame nil)
                    598:           (terpri)
                    599:           (cond ((zerop diff) (princ '|you are at top of stack.|))
                    600:                 ((zerop lev) (princ '|you are at bottom of stack.|))
                    601:                 (t (princ '|you are |)
                    602:                    (princ diff)
                    603:                    (cond ((= diff 1) (princ '| frame from the top.|))
                    604:                          (t (princ '| frames from the top.|)))))
                    605:           (terpri)
                    606:           (and (or (atom (caddr frame)) (not (eq (car frame) 'eval)))
                    607:                (return nil))
                    608:           (setq lev 0)
                    609:           (setq nframe frame)
                    610:      lp   (and (setq nframe (debug-findcall (caaddr nframe) nframe framelist))
                    611:                (setq lev (|1+| lev))
                    612:                (go lp))
                    613:           (princ '|there are |)
                    614:           (princ lev)
                    615:           (princ '| |)
                    616:           (princ (caaddr frame))
                    617:           (princ '|'s below.|)
                    618:           (terpri))))
                    619: 
                    620: (def debug-sysp
                    621:   (lambda (x)
                    622:     (and (sysp x) (symbolp x) (not (dtpr (getd x))))))
                    623: 
                    624: (dv interrupt-handlers (fixit))
                    625: 
                    626: (dv handler-labels
                    627:     ((fixit error)
                    628:      (debug-ubv-handler ubv)
                    629:      (debug-udf-handler udf)
                    630:      (debug-fac-handler fac)
                    631:      (debug-ugt-handler ugt)
                    632:      (debug-wta-handler wta)
                    633:      (debug-wna-handler wna)
                    634:      (debug-iol-handler iol)
                    635:      (debug-*rset-handler rst)
                    636:      (debug-mer-handler mer)
                    637:      (debug-gcd-handler gcd)
                    638:      (debug-gcl-handler gcl)
                    639:      (debug-gco-handler gco)
                    640:      (debug-pdl-handler pdl)))
                    641: 
                    642: 
                    643: (or (boundp 'traced-stuff) (setq traced-stuff nil))
                    644: 
                    645: (or (boundp 'evalhook-switch) (setq evalhook-switch nil))
                    646: 
                    647: (setq hush-debug nil)
                    648: 
                    649: 
                    650: ;; other functions grabbed from other cmu files to make this file complete
                    651: ;; unto itself
                    652: 
                    653: ;- from sysfunc.l
                    654: (declare (special system-functions\))
                    655: (defun build-sysp nil
                    656:   (do ((temp (oblist) (cdr temp))
                    657:        (sysfuncs))
                    658:       ((null temp)(setq system-functions\ sysfuncs));atom has ^G at end
                    659:       (cond ((getd (car temp))
                    660:             (setq sysfuncs (cons (car temp) sysfuncs))))))
                    661: 
                    662: (defun sysp (x) ; (cond ((memq x system-functions\)t))
                    663:        (memq x '(funcallhook* funcallhook evalhook evalhook* 
                    664:                               continue-evaluation)))
                    665: 
                    666: (or (boundp 'system-functions\) (build-sysp))
                    667: 
                    668: (defun fretry (pdlpnt frame)
                    669:   (freturn pdlpnt
                    670:           (cond ((eq (car frame) 'eval) (eval (caddr frame) (cadddr frame)))
                    671:                 ((eq (car frame) 'apply)
                    672:                  (eval `(apply ',(caaddr frame) ',(cadaddr frame)) 
                    673:                        (cadddr frame))))))
                    674: 
                    675: 
                    676: ; - from cmu.l
                    677: 
                    678: (def %lineread
                    679:   (lambda (chan)
                    680:          (prog (ans)
                    681:           loop (setq ans (cons (read chan 'EOF) ans))
                    682:                (cond ((eq (car ans) 'EOF) (return (reverse (cdr ans)))))
                    683:           loop2(cond ((eq 10 (tyipeek chan)) (return (reverse ans)))
                    684:                      ((memq (tyipeek chan) '(41 93))
                    685:                       (tyi chan)
                    686:                       (go loop2))
                    687:                      (t (go loop))))))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.