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