27 lines
632 B
Racket
27 lines
632 B
Racket
#lang racket/base
|
|
|
|
(require (for-syntax racket/base
|
|
syntax/parse))
|
|
|
|
(provide display-commented
|
|
with-dynamic-requires
|
|
box-swap!)
|
|
|
|
(define (display-commented str)
|
|
(eprintf "; ~a\n"
|
|
(regexp-replace* "\n" str "\n; ")))
|
|
|
|
(define-syntax (with-dynamic-requires stx)
|
|
(syntax-parse stx
|
|
[(_ ([lib:id id:id] ...+) body:expr ...+)
|
|
#'(let ([id (dynamic-require 'lib 'id)] ...)
|
|
body ...)]))
|
|
|
|
(define (box-swap! box f . args)
|
|
(let loop ()
|
|
(let* ([old (unbox box)]
|
|
[new (apply f old args)])
|
|
(if (box-cas! box old new)
|
|
new
|
|
(loop)))))
|