Use braces for patterns

This commit is contained in:
Georges Dupéron 2016-08-27 01:20:49 +02:00
parent 6f22dcf465
commit 643988a0b9

View File

@ -18,14 +18,14 @@
(define-eh-alternative-mixin structure-kw-instance-or-builder (define-eh-alternative-mixin structure-kw-instance-or-builder
(pattern (pattern
(~optional (~and instance-or-builder {~optional {~and instance-or-builder
(~or (~global-or instance #:instance) {~or {~global-or instance #:instance}
(~global-or builder #:builder))) {~global-or builder #:builder}}}
#:name "either #:instance or #:builder"))) #:name "either #:instance or #:builder"}))
(define-eh-alternative-mixin structure-kw-predicate (define-eh-alternative-mixin structure-kw-predicate
(pattern (~optional (~seq #:? predicate:id) (pattern {~optional {~seq #:? predicate:id}
#:name "#:? predicate"))) #:name "#:? predicate"}))
(define-and-for-syntax no-values-err (define-and-for-syntax no-values-err
(~a "The #:instance keyword implies the use of [field value]," (~a "The #:instance keyword implies the use of [field value],"
@ -41,21 +41,21 @@
(define-eh-alternative-mixin structure-kw-fields (define-eh-alternative-mixin structure-kw-fields
(pattern (pattern
(~optional/else {~optional/else
(~or (~seq (~or-bug [field:id] field:id) …+ {~or {~seq {~or-bug [field:id] field:id} …+
(~global-or builder) {~global-or builder}
(~post-fail no-values-err #:when (attribute instance))) {~post-fail no-values-err #:when (attribute instance)}}
(~seq [field:id : type] …+ {~seq [field:id : type] …+
(~global-or builder) {~global-or builder}
(~post-fail no-values-err #:when (attribute instance))) {~post-fail no-values-err #:when (attribute instance)}}
(~seq [field:id value:expr] …+ {~seq [field:id value:expr] …+
(~global-or instance) {~global-or instance}
(~post-fail values-err #:when (attribute builder))) {~post-fail values-err #:when (attribute builder)}}
(~seq (~or-bug [field:id value:expr : type] {~seq {~or-bug [field:id value:expr : type]
[field:id : type value:expr]) [field:id : type value:expr]}
…+ …+
(~global-or instance) {~global-or instance}
(~post-fail values-err #:when (attribute builder)))) {~post-fail values-err #:when (attribute builder)}}}
#:defaults ([(field 1) (list)] #:defaults ([(field 1) (list)]
[(value 1) (list)] [(value 1) (list)]
[(type 1) (list)]) [(type 1) (list)])
@ -63,17 +63,17 @@
(not (attribute instance))) (not (attribute instance)))
#:name (~a "field or [field] or [field : type] for #:builder," #:name (~a "field or [field] or [field : type] for #:builder,"
" [field value] or [field : type value]" " [field value] or [field : type value]"
" or [field value : type] for #:instance")))) " or [field value : type] for #:instance")}))
(define-eh-alternative-mixin structure-kw-all (define-eh-alternative-mixin structure-kw-all
(pattern (~or (structure-kw-instance-or-builder-mixin) (pattern {~or {structure-kw-instance-or-builder-mixin}
(structure-kw-predicate-mixin) {structure-kw-predicate-mixin}
(structure-kw-fields-mixin)))) {structure-kw-fields-mixin}}))
;; --------- ;; ---------
(define-splicing-syntax-class structure-kws (define-splicing-syntax-class structure-kws
(pattern (~seq-no-order (structure-kw-all-mixin)))) (pattern {~seq-no-order {structure-kw-all-mixin}}))
(check-equal? (syntax-parse #'(#:instance #:? p) (check-equal? (syntax-parse #'(#:instance #:? p)
[(:structure-kws) [(:structure-kws)