| 
88 | 88 |                    (basic-text "..." (default-style)))))  | 
89 | 89 |        (hole "[]"))))  | 
90 | 90 | 
 
  | 
 | 91 | +  ;; generate the assoc-table lookup entries to rewrite atoms  | 
 | 92 | +  ;; (i.e. since internally all atom literals will be a string  | 
 | 93 | +  ;;       of some sort)  | 
 | 94 | +  (define (generate-atom-entries atom transformer)  | 
 | 95 | +    (match atom  | 
 | 96 | +      [(or (? symbol?) (? string?))  | 
 | 97 | +       (list (list atom transformer))]  | 
 | 98 | +      [#t (list (list "#t" transformer)  | 
 | 99 | +                (list "#T" transformer)  | 
 | 100 | +                (list "#true" transformer))]  | 
 | 101 | +      [#f (list (list "#f" transformer)  | 
 | 102 | +                (list "#F" transformer)  | 
 | 103 | +                (list "#false" transformer))]  | 
 | 104 | +      [(? number?) (list (list (number->string atom) transformer))]))  | 
 | 105 | + | 
91 | 106 |   (define-syntax-rule   | 
92 | 107 |     (with-atomic-rewriter name rewriter body)  | 
93 | 108 |     (with-atomic-rewriters ([name rewriter]) body))  | 
94 | 109 |   (define-syntax (with-atomic-rewriters stx)  | 
95 | 110 |     (syntax-parse stx  | 
96 | 111 |       [(_ ([name transformer] ...) e:expr)  | 
97 | 112 |        #:declare name  | 
98 |  | -       (expr/c #'symbol?  | 
 | 113 | +       (expr/c #'(or/c symbol? string? boolean? number?)  | 
99 | 114 |                #:name "atomic-rewriter name")  | 
100 | 115 |        #:declare transformer  | 
101 | 116 |        (expr/c #'(or/c (-> pict?) string?)  | 
102 | 117 |                #:name "atomic-rewriter rewrite")  | 
103 | 118 |        #`(parameterize ([atomic-rewrite-table  | 
104 |  | -                         (append (list (list name.c transformer.c) ...)  | 
 | 119 | +                         (apply append  | 
 | 120 | +                                (generate-atom-entries name.c transformer.c)  | 
 | 121 | +                                 ...  | 
105 | 122 |                                  (atomic-rewrite-table))])  | 
106 | 123 |            e)]))  | 
107 | 124 | 
 
  | 
 | 
803 | 820 |                 (string=? "#:" (substring atom 0 2))))  | 
804 | 821 |        (list (make-string-token col span atom (paren-style)))]  | 
805 | 822 |       [(string? atom)  | 
806 |  | -       (list (make-string-token col span atom (default-style)))]  | 
 | 823 | +       (list (or (rewrite-atomic col span atom literal-style)  | 
 | 824 | +                 (make-string-token col span atom (default-style))))]  | 
807 | 825 |       [else (error 'atom->tokens "unk ~s" atom)]))  | 
808 | 826 | 
 
  | 
809 | 827 |   (define (rewrite-atomic col span e get-style)  | 
 | 
818 | 836 |     [(assoc e (atomic-rewrite-table))  | 
819 | 837 |      =>  | 
820 | 838 |      (λ (m)  | 
821 |  | -       (when (eq? (cadr m) e)  | 
 | 839 | +       (when (equal? (cadr m) e)  | 
822 | 840 |          (error 'apply-rewrites "rewritten version of ~s is still ~s" e e))  | 
823 | 841 |        (let ([p (cadr m)])  | 
824 | 842 |          (if (procedure? p)  | 
 | 
0 commit comments