* pretty-print now handles vectors
This commit is contained in:
		
							parent
							
								
									38082fc489
								
							
						
					
					
						commit
						bf23a8a1b7
					
				| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
  (define-record sbox (length string))
 | 
			
		||||
  (define-record pbox (length ls last))
 | 
			
		||||
  (define-record mbox (length str val))
 | 
			
		||||
  (define-record vbox (length ls))
 | 
			
		||||
  (define (box-length x)
 | 
			
		||||
    (cond
 | 
			
		||||
      [(string? x) (string-length x)]
 | 
			
		||||
| 
						 | 
				
			
			@ -14,6 +15,7 @@
 | 
			
		|||
      [(sbox? x)   (sbox-length x)]
 | 
			
		||||
      [(pbox? x)   (pbox-length x)]
 | 
			
		||||
      [(mbox? x)   (mbox-length x)]
 | 
			
		||||
      [(vbox? x)   (vbox-length x)]
 | 
			
		||||
      [else (error 'boxify "invalid box ~s" x)]))
 | 
			
		||||
  (define (boxify x)
 | 
			
		||||
    (define (conc . a*)
 | 
			
		||||
| 
						 | 
				
			
			@ -121,13 +123,22 @@
 | 
			
		|||
           (string #\# #\c 
 | 
			
		||||
                   (hexify (fxquotient n 16))
 | 
			
		||||
                   (hexify (fxremainder n 16)))])))
 | 
			
		||||
    (define (boxify-vector x)
 | 
			
		||||
      (let ([ls (map boxify (vector->list x))])
 | 
			
		||||
        (let ([n
 | 
			
		||||
               (let f ([ls ls] [n 0])
 | 
			
		||||
                 (cond
 | 
			
		||||
                   [(null? ls) n]
 | 
			
		||||
                   [else
 | 
			
		||||
                    (f (cdr ls) (fx+ n (box-length (car ls))))]))])
 | 
			
		||||
          (make-vbox (fx+ (fx+ n 2) (vector-length x)) ls))))
 | 
			
		||||
    (cond
 | 
			
		||||
      [(number? x)    (number->string x)]
 | 
			
		||||
      [(symbol? x)    (boxify-symbol x)]
 | 
			
		||||
      [(string? x)    (boxify-string x)]
 | 
			
		||||
      [(null? x)      "()"]
 | 
			
		||||
      [(boolean? x)   (if x "#t" "#f")]
 | 
			
		||||
      ;[(vector? x)    (boxify-vector x)]
 | 
			
		||||
      [(vector? x)    (boxify-vector x)]
 | 
			
		||||
      [(list? x)      (boxify-list x)]
 | 
			
		||||
      [(pair? x)      (boxify-pair x)]
 | 
			
		||||
      [(char? x)      (boxify-char x)]
 | 
			
		||||
| 
						 | 
				
			
			@ -314,6 +325,31 @@
 | 
			
		|||
    (define (output-mbox x p col)
 | 
			
		||||
      (display (mbox-str x) p)
 | 
			
		||||
      (f (mbox-val x) p (fx+ col (string-length (mbox-str x)))))
 | 
			
		||||
    (define (output-vbox x p col)
 | 
			
		||||
      (let ([ls (vbox-ls x)])
 | 
			
		||||
        (cond
 | 
			
		||||
          [(null? ls)
 | 
			
		||||
           (display "#()" p)
 | 
			
		||||
           (fx+ col 3)]
 | 
			
		||||
          [else
 | 
			
		||||
           (display "#(" p)
 | 
			
		||||
           (let g ([ls (cdr ls)] [p p]
 | 
			
		||||
                   [col (f (car ls) p (fx+ col 2))]
 | 
			
		||||
                   [start (fx+ col 2)])
 | 
			
		||||
             (cond
 | 
			
		||||
               [(null? ls)
 | 
			
		||||
                (display ")" p)
 | 
			
		||||
                (fx+ col 1)]
 | 
			
		||||
               [(fx<= (fx+ (fx+ col 1) (box-length (car ls))) (pretty-width))
 | 
			
		||||
                (display " " p)
 | 
			
		||||
                (g (cdr ls) p 
 | 
			
		||||
                   (f (car ls) p (fx+ col 1))
 | 
			
		||||
                   start)]
 | 
			
		||||
               [else
 | 
			
		||||
                (tab start p)
 | 
			
		||||
                (g (cdr ls) p 
 | 
			
		||||
                   (f (car ls) p start)
 | 
			
		||||
                   start)]))])))
 | 
			
		||||
    (define (f x p col)
 | 
			
		||||
      (cond
 | 
			
		||||
        [(string? x) 
 | 
			
		||||
| 
						 | 
				
			
			@ -324,6 +360,7 @@
 | 
			
		|||
        [(sbox? x)   (output-sbox x p col)]
 | 
			
		||||
        [(pbox? x)   (output-pbox x p col)]
 | 
			
		||||
        [(mbox? x)   (output-mbox x p col)]
 | 
			
		||||
        [(vbox? x)   (output-vbox x p col)]
 | 
			
		||||
        [else (error 'pretty-print-output "invalid ~s" x)]))
 | 
			
		||||
    (f x p 0)
 | 
			
		||||
    (newline p))
 | 
			
		||||
| 
						 | 
				
			
			@ -386,4 +423,44 @@
 | 
			
		|||
        97314897 318947138974 981374 89137489 1374897 13498713
 | 
			
		||||
        894713894 137894 89137489 1374 891348314 12 17 9000000 . 17))
 | 
			
		||||
 | 
			
		||||
(test '(',,@#''(quote 1 2)))
 | 
			
		||||
(test '(',,@#''(quote (syntax unquote-splicing . 2) 2)))
 | 
			
		||||
 | 
			
		||||
(test '#(1 2 3))
 | 
			
		||||
 | 
			
		||||
(test '#(384 7384 83947 893478 9137489 3894789 134789314 79817238
 | 
			
		||||
         97314897 318947138974 981374 89137489 1374897 13498713
 | 
			
		||||
         894713894 137894 89137489))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(define (test-file x)
 | 
			
		||||
  (printf "testing file ~s ...\n" x)
 | 
			
		||||
  (with-input-from-file x 
 | 
			
		||||
    (lambda ()
 | 
			
		||||
      (let f ()
 | 
			
		||||
        (let ([x (read)])
 | 
			
		||||
          (unless (eof-object? x)
 | 
			
		||||
            (let ([y
 | 
			
		||||
                   (begin
 | 
			
		||||
                     (call-with-output-file "tmp.pp"
 | 
			
		||||
                        (lambda (p) 
 | 
			
		||||
                          (pretty-print x p))
 | 
			
		||||
                        'replace)
 | 
			
		||||
                     (with-input-from-file "tmp.pp" read))])
 | 
			
		||||
              (if (equal? x y)
 | 
			
		||||
                  (f)
 | 
			
		||||
                  (error 'test-file "mismatch ~s ~s" x y)))))))))
 | 
			
		||||
 | 
			
		||||
(for-each test-file 
 | 
			
		||||
  '("../src/fact.ss" "../src/libhash.ss" "../src/foo.ss"
 | 
			
		||||
    "../src/libintelasm.ss" "../src/libassembler.ss"
 | 
			
		||||
    "../src/libnumerics.ss" "../src/libcafe.ss" "../src/libposix.ss"
 | 
			
		||||
    "../src/libchezio.ss" "../src/librecord.ss"
 | 
			
		||||
    "../src/libcollect.ss" "../src/libtimers.ss"
 | 
			
		||||
    "../src/libcompile.ss" "../src/libtokenizer.ss"
 | 
			
		||||
    "../src/libcontrol.ss" "../src/libtoplevel.ss"
 | 
			
		||||
    "../src/libcore.ss" "../src/libtrace.ss" "../src/libcxr.ss"
 | 
			
		||||
    "../src/libwriter.ss" "../src/libengines.ss" "../src/makefile.ss"
 | 
			
		||||
    "../src/libfasl.ss" "../src/psyntax-7.1.ss"
 | 
			
		||||
    "../src/libguardians.ss" "../src/self-exporting-module.ss"
 | 
			
		||||
    "../src/libhandlers.ss" "../src/set-operations.ss"))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue