File: syntax-utils.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 (37 lines) | stat: -rw-r--r-- 1,104 bytes parent folder | download | duplicates (6)
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
33
34
35
36
37
#lang racket/base

(require (for-syntax racket/base)
         (for-template racket/base)
         racket/syntax)

(provide (all-defined-out)
         (all-from-out (submod "." ensures)))

(define-syntax-rule (define-inline-op name inline-op typed-op inline-pats ...)
  (define-syntax (name stx)
    (syntax-case stx ()
      [(_ . inline-pats)  (syntax/loc stx (inline-op . inline-pats))] ...
      [(_ . args)  (syntax/loc stx (typed-op . args))]
      [_  (syntax/loc stx typed-op)])))

(module ensures racket/base
  (require racket/flonum
           typed/racket/base)
  
  (provide (all-defined-out))

  (define-syntax-rule (ensure-index name n-expr)
    (let: ([n : Integer  n-expr])
      (if (index? n) n (raise-argument-error name "Index" n))))
  
  (define-syntax-rule (ensure-flvector name xs-expr)
    (let: ([xs : FlVector  xs-expr])
      (if (flvector? xs) xs (raise-argument-error name "FlVector" xs))))
  
  (define-syntax-rule (ensure-procedure name f-expr T)
    (let: ([f : T  f-expr])
      (if (procedure? f) f (raise-argument-error name "Procedure" f))))
  
  )

(require 'ensures)