1#lang racket/base 2 3(require "../utils/utils.rkt" syntax/private/id-table) 4(provide id< 5 sorted-free-id-table-map 6 sorted-free-id-table-for-each 7 in-sorted-free-id-table 8 in-sorted-free-id-table-keys) 9 10(define (id< a b) (symbol<? (syntax-e a) (syntax-e b))) 11 12(define-syntax-rule (in-sorted-free-id-table table) 13 (in-assoc (sort (for/list ([(k v) (in-free-id-table table)]) 14 (cons k v)) 15 (λ (entry1 entry2) (id< (car entry1) (car entry2)))))) 16 17(define-syntax-rule (in-sorted-free-id-table-keys table) 18 (in-list (sort (for/list ([(k _) (in-free-id-table table)]) 19 k) 20 id<))) 21 22(define (sorted-free-id-table-map table f) 23 (for/list ([(k v) (in-sorted-free-id-table table)]) 24 (f k v))) 25 26(define (sorted-free-id-table-for-each table f) 27 (for ([(k v) (in-sorted-free-id-table table)]) 28 (f k v))) 29