scsh-0.5/debug/describe.scm

42 lines
1.1 KiB
Scheme

; Copyright (c) 1993, 1994 Richard Kelsey and Jonathan Rees. See file COPYING.
(define (describe x)
(if (and (stob? x)
(< (stob-type x) least-b-vector-type))
(let ((tag (string-append (number->string x) ": "))
(len (bytes->cells (stob-length-in-bytes x))))
(do ((i -1 (+ i 1)))
((= i len))
(describe-1 (stob-ref x i) tag)))
(describe-1 x "")))
(define (describe-1 x addr)
(cond ((fixnum? x) (display " fixnum ") (write (extract-fixnum x)))
((header? x)
(display addr)
(if (immutable-header? x)
(display " immutable"))
(display " header ")
(let ((type (header-type x)))
(if (< type stob-count)
(write (vector-ref stob type))
(write type)))
(display " ")
(write (header-length-in-bytes x)))
((immediate? x)
(cond (else
(display " immediate ")
(let ((type (immediate-type x)))
(if (< type imm-count)
(write (vector-ref imm type))
(write type)))
(display " ")
(write (immediate-info x)))))
((stob? x)
(display " stob ") (write x))
(else (display " ? ") (write x)))
(newline))