Make TR debug printer work again.

This commit is contained in:
Eric Dobson 2012-08-13 22:47:23 -07:00 committed by Sam Tobin-Hochstadt
parent 5f0717d278
commit cac47c0427
5 changed files with 56 additions and 16 deletions

View File

@ -105,7 +105,6 @@
(define (get-type e [typecheck (compose tc-expr expand)]) (define (get-type e [typecheck (compose tc-expr expand)])
(parameterize ([delay-errors? #f] (parameterize ([delay-errors? #f]
[current-namespace (namespace-anchor->namespace anch)] [current-namespace (namespace-anchor->namespace anch)]
[custom-printer #t]
[infer-param infer] [infer-param infer]
[orig-module-stx (quote-syntax e)]) [orig-module-stx (quote-syntax e)])
(typecheck (datum->syntax #'here e)))) (typecheck (datum->syntax #'here e))))

View File

@ -74,7 +74,6 @@
[(_ e) [(_ e)
#`(parameterize ([delay-errors? #f] #`(parameterize ([delay-errors? #f]
[current-namespace (namespace-anchor->namespace anch)] [current-namespace (namespace-anchor->namespace anch)]
[custom-printer #t]
[infer-param infer] [infer-param infer]
[orig-module-stx (quote-syntax e)]) [orig-module-stx (quote-syntax e)])
(let ([ex (expand 'e)]) (let ([ex (expand 'e)])
@ -86,7 +85,6 @@
[(_ e) [(_ e)
#`(parameterize ([delay-errors? #f] #`(parameterize ([delay-errors? #f]
[current-namespace (namespace-anchor->namespace anch)] [current-namespace (namespace-anchor->namespace anch)]
[custom-printer #t]
[infer-param infer] [infer-param infer]
[orig-module-stx (quote-syntax e)]) [orig-module-stx (quote-syntax e)])
(let ([ex (expand 'e)]) (let ([ex (expand 'e)])

View File

@ -6,7 +6,7 @@
(private with-types type-contract parse-type) (private with-types type-contract parse-type)
(except-in syntax/parse id) (except-in syntax/parse id)
racket/match racket/syntax unstable/match racket/list syntax/stx racket/match racket/syntax unstable/match racket/list syntax/stx
(types utils abbrev generalize) (types utils abbrev generalize printer)
(typecheck provide-handling tc-toplevel tc-app-helper) (typecheck provide-handling tc-toplevel tc-app-helper)
(rep type-rep) (rep type-rep)
(env env-req) (env env-req)

View File

@ -5,9 +5,23 @@
(path-up "rep/type-rep.rkt" "rep/filter-rep.rkt" "rep/object-rep.rkt" (path-up "rep/type-rep.rkt" "rep/filter-rep.rkt" "rep/object-rep.rkt"
"rep/rep-utils.rkt" "types/abbrev.rkt" "types/subtype.rkt" "rep/rep-utils.rkt" "types/abbrev.rkt" "types/subtype.rkt"
"utils/utils.rkt" "utils/utils.rkt"
"utils/tc-utils.rkt")) "utils/tc-utils.rkt")
(for-syntax racket/base))
(provide print-type print-filter print-object print-pathelem) ;; printer-type: (one-of/c 'custom 'debug)
(define-for-syntax printer-type 'custom)
(define-syntax (make-provides stx)
(if (eq? printer-type 'debug)
#'(provide (rename-out
(debug-printer print-type)
(debug-printer print-filter)
(debug-printer print-object)
(debug-printer print-pathelem)))
#'(provide print-type print-filter print-object print-pathelem)))
(make-provides)
(provide print-multi-line-case-> special-dots-printing? print-complex-filters?)
;;TODO try to remove requirement on abbrev once promise is fixed ;;TODO try to remove requirement on abbrev once promise is fixed
@ -17,9 +31,9 @@
;; do we use simple type aliases in printing ;; do we use simple type aliases in printing
(define print-aliases #t) (define print-aliases #t)
(define print-multi-line-case-> (make-parameter #f))
(define special-dots-printing? (make-parameter #f)) (define special-dots-printing? (make-parameter #f))
(define print-complex-filters? (make-parameter #f)) (define print-complex-filters? (make-parameter #f))
(provide special-dots-printing? print-complex-filters?)
;; does t have a type name associated with it currently? ;; does t have a type name associated with it currently?
;; has-name : Type -> Maybe[Symbol] ;; has-name : Type -> Maybe[Symbol]
@ -309,3 +323,37 @@
[else (fp "(Unknown Type: ~a)" (struct->vector c))] [else (fp "(Unknown Type: ~a)" (struct->vector c))]
)) ))
(define-syntax (make-debug-printer stx)
(syntax-local-introduce
(if (eq? printer-type 'debug)
#'(begin
(require racket/pretty)
(require mzlib/pconvert)
(define (converter v basic sub)
(define (gen-constructor sym)
(string->symbol (string-append "make-" (substring (symbol->string sym) 7))))
(match v
[(? (lambda (e) (or (Filter? e)
(Object? e)
(PathElem? e)))
(app (lambda (v) (vector->list (struct->vector v)))
(list-rest tag seq fv fi stx vals)))
`(,(gen-constructor tag) ,@(map sub vals))]
[(? Type?
(app (lambda (v) (vector->list (struct->vector v))) (list-rest tag seq fv fi stx key vals)))
`(,(gen-constructor tag) ,@(map sub vals))]
[_ (basic v)]))
(define (debug-printer v port write?)
((if write?
pretty-write
pretty-print)
(parameterize ((current-print-convert-hook converter))
(print-convert v))
port)))
#'(begin))))
(make-debug-printer)

View File

@ -21,7 +21,7 @@ at least theoretically.
;; logging ;; logging
printf/log show-input? printf/log show-input?
;; struct printing ;; struct printing
print-multi-line-case-> define-struct/printer define-struct/printer
;; provide macros ;; provide macros
rep utils typecheck infer env private types) rep utils typecheck infer env private types)
@ -109,9 +109,6 @@ at least theoretically.
#'(log-debug (format fmt . args))]) #'(log-debug (format fmt . args))])
#'(void))) #'(void)))
;; custom printing
(define-for-syntax custom-printer #t)
(define print-multi-line-case-> (make-parameter #f))
(define-syntax (define-struct/printer stx) (define-syntax (define-struct/printer stx)
(syntax-parse stx (syntax-parse stx
@ -120,11 +117,9 @@ at least theoretically.
#:property prop:custom-print-quotable 'never #:property prop:custom-print-quotable 'never
;; Eta expansion so that printer is not evaluated ;; Eta expansion so that printer is not evaluated
;; until needed. ;; until needed.
#,@(if custom-printer #:methods gen:custom-write
#'(#:methods gen:custom-write
[(define (write-proc v port write?) [(define (write-proc v port write?)
(printer v port write?))]) (printer v port write?))]
#'())
#:transparent)])) #:transparent)]))