;;; -*-Scheme-*-
;;;
-;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/unpars.scm,v 13.45 1987/06/15 18:22:43 cph Exp $
+;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/unpars.scm,v 13.46 1987/06/15 23:42:12 cph Exp $
;;;
;;; Copyright (c) 1987 Massachusetts Institute of Technology
;;;
(let ((nmv-type (microcode-type 'manifest-nm-vector))
(snmv-type (microcode-type 'manifest-special-nm-vector)))
(lambda (vector)
- (let ((length (vector-length vector)))
+ (let ((length (vector-length vector))
+ (element
+ (lambda (index)
+ (if (with-interrupt-mask interrupt-mask-none
+ (lambda (ie)
+ (or (primitive-type? nmv-type (vector-ref vector index))
+ (primitive-type? snmv-type (vector-ref vector index)))))
+ (error "Attempt to unparse partially marked vector" 0)
+ (vector-ref vector index)))))
(let ((normal
(lambda ()
- (*unparse-char #\#)
- (let loop ((index 0))
- (cond ((= index length)
- (*unparse-char #\)))
- ((with-interrupt-mask interrupt-mask-none
- (lambda (ie)
- (or (primitive-type? nmv-type
- (vector-ref vector index))
- (primitive-type?
- snmv-type
- (vector-ref vector index)))))
- (error "Attempt to unparse partially marked vector"))
+ (*unparse-string "#(")
+ (*unparse-object-or-future (element 0))
+ (let loop ((index 1))
+ (cond ((= index length) (*unparse-char #\)))
(else
(*unparse-char #\Space)
- (*unparse-object-or-future (vector-ref vector index))
+ (*unparse-object-or-future (element index))
(loop (1+ index))))))))
- (cond ((zero? length)
- (*unparse-string "#()"))
- ((future? vector)
- (normal))
- (else
- (let ((entry
- (assq (vector-ref vector 0) *unparser-special-objects*)))
- (if entry
- ((cdr entry) vector)
- (normal)))))))))
+ (cond ((zero? length)
+ (*unparse-string "#()"))
+ ((future? vector)
+ (normal))
+ (else
+ (let ((entry (assq (element 0) *unparser-special-objects*)))
+ (if entry
+ ((cdr entry) vector)
+ (normal))))))))))
(define *unparser-special-objects* '())