File: bigfloat-syntax.rkt

package info (click to toggle)
racket 7.2%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 125,432 kB
  • sloc: ansic: 258,980; pascal: 59,975; sh: 33,650; asm: 13,558; lisp: 7,124; makefile: 3,329; cpp: 2,889; exp: 499; python: 274; xml: 11
file content (32 lines) | stat: -rw-r--r-- 1,462 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#lang racket/base

(require (only-in "mpfr.rkt" consts 0ary-funs)
         "bigfloat-constants.rkt"
         racket/promise
         (for-syntax racket/base racket/syntax syntax/strip-context))

(define-syntax (req/prov-constants stx)
  (syntax-case stx ()
    [(_ module collection force)
     (with-syntax ([require-it-name  (datum->syntax stx (gensym 'require-it))])
       (syntax/loc stx
         (begin
           (define-syntax (require-it-name stx1)
             (syntax-case stx1 ()
               [(require-it-name)
                (with-syntax* ([(name (... ...))  (replace-context #'require-it-name collection)]
                               [(stx-name (... ...))  (map (λ (name) (format-id name "stx:~a" name))
                                                           (syntax->list #'(name (... ...))))])
                  #'(begin (require (only-in module name (... ...)))
                           (define-syntax (stx-name stx)
                             (syntax-case stx ()
                               [(_ . args)  (syntax/loc stx ((force name) . args))]
                               [_  (syntax/loc stx (force name))]))
                           (... ...)
                           (provide (rename-out [stx-name name] (... ...)))))]))
           (require-it-name))))]))

(define-syntax-rule (apply0 x) (x))

(req/prov-constants "bigfloat-constants.rkt" consts force)
(req/prov-constants "bigfloat-constants.rkt" 0ary-funs apply0)