
Changed backtracking algorithm, runtime representations - syntax classes, ~describe no longer implicitly commit - ~describe no longer delimits effect of cut Added keyword & optional args for stxclasses Added ~do and #:do, ~post, ~commit and #:commit, ~delimit-cut and #:no-delimit-cut Added syntax/parse/debug, syntax/parse/experimental/* - expr/c for contracting macro sub-expressions moved from syntax/parse to syntax/parse/experimental/contract - syntax class reflection (~reflect, ~splicing-reflect) - eh-alternative-sets (~eh-var) - provide-syntax-class/contract (only for params, not attrs so far) Changed ~fail to not include POST progress (#:fail still does) old (~fail _) is now (~post (~fail _)) Made msg argument of ~fail optional Removed generic "repetition constraint violated" msg Removed atom-in-list stxclass Removed unnecessary datum->syntax on cdr of pair pattern massive improvements to long-list microbenchmarks Optimization: integrable syntax classes (id, expr, keyword) need better measurements Optimization: ad hoc elimination of head/tail choice point for (EH ... . ()) patterns Added unstable/wrapc (proc version of expr/c)
36 lines
1.5 KiB
Racket
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 'same-as-use-site 'unknown)
|
|
#:name (or/c identifier? string? symbol? #f)
|
|
#:macro (or/c identifier? string? symbol? #f)
|
|
#:context (or/c syntax? #f)))])
|