#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/boot.scm,v 14.2 1988/08/05 20:16:26 cph Rel $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/boot.scm,v 14.3 1989/08/09 11:08:31 cph Exp $
Copyright (c) 1988 Massachusetts Institute of Technology
(define (unparser/standard-method name #!optional unparser)
(lambda (state object)
(if (not (unparser-state? state)) (error "Bad unparser state" state))
- (let ((port (unparser-state/port state)))
- (write-string "#[" port)
- (if (string? name)
- (write-string name port)
- (unparse-object state name))
- (write-char #\Space port)
- (write-string (number->string (hash object)) port)
- (if (and (not (default-object? unparser)) unparser)
- (begin (write-char #\Space port)
- (unparser state object)))
- (write-char #\] port))))
+ (let ((port (unparser-state/port state))
+ (hash-string (number->string (hash object))))
+ (if *unparse-with-maximum-readability?*
+ (begin
+ (write-string "#@" port)
+ (write-string hash-string port))
+ (begin
+ (write-string "#[" port)
+ (if (string? name)
+ (write-string name port)
+ (unparse-object state name))
+ (write-char #\space port)
+ (write-string hash-string port)
+ (if (and (not (default-object? unparser)) unparser)
+ (begin (write-char #\Space port)
+ (unparser state object)))
+ (write-char #\] port))))))
+
(define-integrable interrupt-bit/stack #x0001)
(define-integrable interrupt-bit/global-gc #x0002)
(define-integrable interrupt-bit/gc #x0004)
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/unpars.scm,v 14.12 1989/02/09 03:45:14 cph Rel $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/unpars.scm,v 14.13 1989/08/09 11:08:39 cph Exp $
-Copyright (c) 1988 Massachusetts Institute of Technology
+Copyright (c) 1988, 1989 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
(set! *unparser-list-depth-limit* false)
(set! *unparse-primitives-by-name?* false)
(set! *unparse-uninterned-symbols-by-name?* false)
+ (set! *unparse-with-maximum-readability?* false)
(set! system-global-unparser-table (make-system-global-unparser-table))
(set-current-unparser-table! system-global-unparser-table))
(define *unparser-list-depth-limit*)
(define *unparse-primitives-by-name?*)
(define *unparse-uninterned-symbols-by-name?*)
+(define *unparse-with-maximum-readability?*)
(define system-global-unparser-table)
(define *current-unparser-table*)
(define-integrable (*unparse-hash object)
(*unparse-string (number->string (hash object))))
+(define (*unparse-readable-hash object)
+ (*unparse-string "#@")
+ (*unparse-hash object))
+
(define (*unparse-with-brackets name object thunk)
- (*unparse-string "#[")
- (if (string? name)
- (*unparse-string name)
- (*unparse-object name))
- (if object
- (begin (*unparse-char #\Space)
- (*unparse-hash object)))
- (if thunk
- (begin (*unparse-char #\Space)
- (thunk)))
- (*unparse-char #\]))
+ (if (and *unparse-with-maximum-readability?* object)
+ (*unparse-readable-hash object)
+ (begin
+ (*unparse-string "#[")
+ (if (string? name)
+ (*unparse-string name)
+ (*unparse-object name))
+ (if object
+ (begin
+ (*unparse-char #\Space)
+ (*unparse-hash object)))
+ (if thunk
+ (begin
+ (*unparse-char #\Space)
+ (thunk)))
+ (*unparse-char #\]))))
\f
;;;; Unparser Methods
(define (unparse/default object)
- (let ((type (user-object-type object))
- (gc-type ((ucode-primitive primitive-object-gc-type 1) object)))
- (case gc-type
- ((1 2 3 4 -3 -4) ; cell pair triple quad vector compiled
+ (let ((type (user-object-type object)))
+ (case ((ucode-primitive primitive-object-gc-type 1) object)
+ ((1 2 3 4 -3 -4) ; cell pair triple quad vector compiled
(*unparse-with-brackets type object false))
- (else ; non pointer, gc special, undefined
+ ((0) ; non pointer
(*unparse-with-brackets type object
- (lambda ()
- (*unparse-datum object)))))))
+ (lambda ()
+ (*unparse-datum object))))
+ (else ; undefined, gc special
+ (*unparse-with-brackets type false
+ (lambda ()
+ (*unparse-datum object)))))))
(define (user-object-type object)
(let ((type-code (object-type object)))
(let ((type-name (microcode-type/code->name type-code)))
(if type-name
- (let ((entry (assq type-name renamed-user-object-types)))
- (if entry (cdr entry) type-name))
+ (rename-user-object-type type-name)
(intern
(string-append "undefined-type:" (number->string type-code)))))))
+(define (rename-user-object-type type-name)
+ (let ((entry (assq type-name renamed-user-object-types)))
+ (if entry
+ (cdr entry)
+ type-name)))
+
(define renamed-user-object-types
'((FIXNUM . NUMBER)
(BIGNUM . NUMBER)
(let ((unparse-name
(lambda ()
(*unparse-object (primitive-procedure-name procedure)))))
- (if *unparse-primitives-by-name?*
- (unparse-name)
- (*unparse-with-brackets 'PRIMITIVE-PROCEDURE false unparse-name))))
+ (cond (*unparse-primitives-by-name?*
+ (unparse-name))
+ (*unparse-with-maximum-readability?*
+ (*unparse-readable-hash procedure))
+ (else
+ (*unparse-with-brackets 'PRIMITIVE-PROCEDURE false unparse-name)))))
+
(define (unparse/compiled-entry entry)
(let* ((type (compiled-entry-type entry))
(closure?