racket/collects/syntax/parse/experimental/contract.rkt
Ryan Culpepper 4fbf087e17 syntax/parse: add expr/c to main module
Merge to release branch
(cherry picked from commit 0aecbf97ff)
2011-07-11 14:55:13 -04:00

36 lines
1.5 KiB
Racket

#lang racket/base
(require "../private/sc.rkt"
"../private/lib.rkt"
"provide.rkt"
unstable/wrapc
(only-in "../private/runtime.rkt"
this-context-syntax)
racket/contract/base)
(define-syntax-class (expr/c ctc-stx
#:positive [pos-blame 'use-site]
#:negative [neg-blame 'from-macro]
#:macro [macro-name #f]
#:name [expr-name #f]
#:context [ctx #f])
#:attributes (c)
(pattern y:expr
#:with
c (wrap-expr/c ctc-stx
#'y
#:positive pos-blame
#:negative neg-blame
#:name expr-name
#:macro macro-name
#:context (or ctx (this-context-syntax)))))
(provide-syntax-class/contract
[expr/c (syntax-class/c (syntax?)
(#:positive (or/c syntax? string? module-path-index?
'from-macro 'use-site 'unknown)
#:negative (or/c syntax? string? module-path-index?
'from-macro 'use-site 'unknown)
#:name (or/c identifier? string? symbol? #f)
#:macro (or/c identifier? string? symbol? #f)
#:context (or/c syntax? #f)))])