PasteRack.org
Paste # 82067
2016-10-24 18:12:36

Fork as a new paste.

Paste viewed 86 times.


Embed:

  1. #lang racket/base
  2.  
  3. (require (for-syntax racket/base))
  4.  
  5. (begin-for-syntax
  6.   (define (assert-number stx)
  7.     (unless (number? (syntax->datum stx))
  8.       (raise-syntax-error 'test-syntax "not a number" stx))))
  9.  
  10. (define-syntax (test-syntax stx)
  11.   (syntax-case stx ()
  12.         ((_ a b)
  13.      (begin
  14.        (assert-number #'a)
  15.        (assert-number #'b)
  16.        #'(+ a b)))))
  17.  
  18. (module+ test
  19.   (require rackunit)
  20.  
  21.   (check-equal? (test-syntax 1 2) 3)
  22.  
  23.   #;(check-exn
  24.    exn:fail:syntax?
  25.    (lambda ()
  26.      (test-syntax 1 'a)))
  27.  
  28.   )

=>