adjust syntax browser to work better for literal hashes and vectors

closes PR 13537

original commit: 4b8813bb0e5ff5934c0ab1443fee7c245a757bb5
This commit is contained in:
Robby Findler 2013-02-23 20:25:50 -06:00
parent 2d510cb940
commit 7cba5db017

View File

@ -128,12 +128,22 @@ needed to really make this work:
(push!) (push!)
(record val enclosing-stx) (record val enclosing-stx)
(begin0 (begin0
(let lst-loop ([val (vector->list val)]) (apply
(cond vector
[(pair? val) (let lst-loop ([val (vector->list val)])
(cons (loop (car val) #f) (cond
(lst-loop (cdr val)))] [(pair? val)
[(null? val) '()])) (cons (loop (car val) #f)
(lst-loop (cdr val)))]
[(null? val) '()])))
(pop!))]
[(hash? val)
(push!)
(record val enclosing-stx)
(begin0
(for/hash ([(k v) (in-hash val)])
(values (loop k #f)
(loop v #f)))
(pop!))] (pop!))]
[else [else
(push!) (push!)
@ -241,11 +251,17 @@ needed to really make this work:
(small-newline info-port info-text))) (small-newline info-port info-text)))
(define/private (replace-syntaxes obj) (define/private (replace-syntaxes obj)
(cond (let loop ([obj obj])
[(pair? obj) (cons (replace-syntaxes (car obj)) (cond
(replace-syntaxes (cdr obj)))] [(pair? obj) (cons (loop (car obj)) (loop (cdr obj)))]
[(syntax? obj) (make-object syntax-snip% obj)] [(syntax? obj) (make-object syntax-snip% obj)]
[else obj])) [(hash? obj)
(for/hash ([(k v) (in-hash obj)])
(values (loop k) (loop v)))]
[(vector? obj)
(for/vector ([v (in-vector obj)])
(loop v))]
[else obj])))
(define/private (insert/bold str) (define/private (insert/bold str)
(let ([pos (send info-text last-position)]) (let ([pos (send info-text last-position)])
@ -575,10 +591,10 @@ needed to really make this work:
`(pair ,(cons (marshall-object (car obj)) `(pair ,(cons (marshall-object (car obj))
(marshall-object (cdr obj))))] (marshall-object (cdr obj))))]
[(or (symbol? obj) [(or (symbol? obj)
(char? obj) (char? obj)
(number? obj) (number? obj)
(string? obj) (string? obj)
(boolean? obj) (boolean? obj)
(null? obj)) (null? obj))
`(other ,obj)] `(other ,obj)]
[else (string->symbol (format "unknown-object: ~s" obj))])) [else (string->symbol (format "unknown-object: ~s" obj))]))