syndicate-2017/racket/syndicate/trace/util.rkt

47 lines
1.5 KiB
Racket

#lang racket/base
(provide env-aref
format-pids
format-point
format-patch)
(require racket/set)
(require racket/match)
(require (only-in racket/string string-join))
(require "../trie.rkt")
(require "../patch.rkt")
(require "../trace.rkt")
(require "../treap.rkt")
(require "../tset.rkt")
(define (env-aref varname default alist)
(define key (or (getenv varname) default))
(cond [(assoc key alist) => cadr]
[else (error 'env-aref
"Expected environment variable ~a to contain one of ~v; got ~v"
(map car alist)
key)]))
(define (format-pids process-names pids)
(define pidstr
(match pids
['() "ground"]
[(cons 'meta rest) (format "context of ~a" (format-pids process-names rest))]
[_ (string-join (map number->string (reverse pids)) ":")]))
(match (hash-ref process-names pids #f)
[#f pidstr]
[name (format "~a a.k.a ~v" pidstr name)]))
(define (format-point process-names point)
(match-define (spacetime pids moment) (or point (spacetime #f #f)))
(string-append (if pids (format-pids process-names pids) "?")
(if moment (format " @@~a" moment) "")))
(define (format-patch process-names dataspace-actor-path p)
(define (expand-pid local-pid) (cons local-pid dataspace-actor-path))
(define (format-pid local-pid) (format-pids process-names (expand-pid local-pid)))
(patch->pretty-string
(patch-relabel p
(lambda (local-pids)
(string-join (set-map (treap-keys local-pids) format-pid) ", ")))))