Add descriptions to for: syntax classes.

Closes PR 13284.

original commit: 38409e0d7e5170f0d75f0c7c5cd9da25809a47dd
This commit is contained in:
Eric Dobson 2013-03-24 21:46:05 -07:00
parent 06075c185d
commit 74449f2a0a
2 changed files with 31 additions and 15 deletions

View File

@ -8,6 +8,7 @@
;; intersperses "#:when #t" clauses to emulate the for* variants' semantics
(define-splicing-syntax-class for-clause
#:description "for clause"
;; single-valued seq-expr
(pattern (~and c (var:optionally-annotated-name seq-expr:expr))
#:with (expand ...) #`(#,(syntax/loc #'c
@ -25,3 +26,18 @@
(pattern (~seq (~and kw (~or #:when #:unless #:break #:final)) guard:expr)
#:with (expand ...) (list #'kw #'guard)
#:with (expand* ...) #'(expand ...)))
(define-syntax-class for-clauses
#:description "for clauses"
#:attributes ((expand 2) (expand* 2))
(pattern (:for-clause ...)))
(define-syntax-class accumulator-binding
#:description "accumumulator binding"
#:attributes (ann-name init ty)
(pattern (:annotated-name init:expr)))
(define-syntax-class accumulator-bindings
#:description "accumumulator bindings"
#:attributes ((ann-name 1) (init 1) (ty 1))
(pattern (:accumulator-binding ...)))

View File

@ -791,7 +791,7 @@ This file defines two sorts of primitives. All of them are provided into any mod
(lambda (stx)
(syntax-parse stx #:literals (:)
[(_ a:optional-standalone-annotation
(clause:for-clause ...)
clause:for-clauses
c ...) ; c is not always an expression, can be a break-clause
(maybe-annotate-body
(quasisyntax/loc stx
@ -823,7 +823,7 @@ This file defines two sorts of primitives. All of them are provided into any mod
(syntax-parse stx #:literals (:)
[(_ : ty
((var:optionally-annotated-name) ...)
(clause:for-clause ...)
clause:for-clauses
c ...) ; c is not always an expression, can be a break-clause
(syntax-property
(quasisyntax/loc stx
@ -833,7 +833,7 @@ This file defines two sorts of primitives. All of them are provided into any mod
'type-ascription
#'ty)]
[(_ ((var:annotated-name) ...)
(clause:for-clause ...)
clause:for-clauses
c ...)
(syntax-property
(quasisyntax/loc stx
@ -846,7 +846,7 @@ This file defines two sorts of primitives. All of them are provided into any mod
(syntax-parse stx #:literals (:)
[(_ : ty
((var:optionally-annotated-name init:expr) ...)
(clause:for-clause ...)
clause:for-clauses
c ...) ; c is not always an expression, can be a break-clause
(syntax-property
(quasisyntax/loc stx
@ -855,22 +855,22 @@ This file defines two sorts of primitives. All of them are provided into any mod
c ...))
'type-ascription
#'ty)]
[(_ ((var:annotated-name init:expr) ...)
(clause:for-clause ...)
[(_ accum:accumulator-bindings
clause:for-clauses
c ...)
(syntax-property
(quasisyntax/loc stx
(for/fold ((var.ann-name init) ...)
(for/fold ((accum.ann-name accum.init) ...)
(clause.expand ... ...)
c ...))
'type-ascription
#'(values var.ty ...))]))
#'(values accum.ty ...))]))
(define-syntax (for*: stx)
(syntax-parse stx #:literals (:)
[(_ (~seq : Void) ...
(clause:for-clause ...)
clause:for-clauses
c ...) ; c is not always an expression, can be a break-clause
(quasisyntax/loc stx
(for: (clause.expand* ... ...)
@ -881,7 +881,7 @@ This file defines two sorts of primitives. All of them are provided into any mod
(lambda (stx)
(syntax-parse stx #:literals (:)
[(_ a:optional-standalone-annotation
(clause:for-clause ...)
clause:for-clauses
c ...) ; c is not always an expression, can be a break-clause
(maybe-annotate-body
(quasisyntax/loc stx
@ -907,7 +907,7 @@ This file defines two sorts of primitives. All of them are provided into any mod
(syntax-parse stx #:literals (:)
[(_ : ty
((var:optionally-annotated-name) ...)
(clause:for-clause ...)
clause:for-clauses
c ...) ; c is not always an expression, can be a break-clause
(syntax-property
(quasisyntax/loc stx
@ -917,7 +917,7 @@ This file defines two sorts of primitives. All of them are provided into any mod
'type-ascription
#'ty)]
[(_ ((var:annotated-name) ...)
(clause:for-clause ...)
clause:for-clauses
c ...)
(syntax-property
(quasisyntax/loc stx
@ -930,7 +930,7 @@ This file defines two sorts of primitives. All of them are provided into any mod
(syntax-parse stx #:literals (:)
[(_ : ty
((var:optionally-annotated-name init:expr) ...)
(clause:for-clause ...)
clause:for-clauses
c ...) ; c is not always an expression, can be a break-clause
(syntax-property
(quasisyntax/loc stx
@ -940,7 +940,7 @@ This file defines two sorts of primitives. All of them are provided into any mod
'type-ascription
#'ty)]
[(_ ((var:annotated-name init:expr) ...)
(clause:for-clause ...)
clause:for-clauses
c ...)
(syntax-property
(quasisyntax/loc stx
@ -954,7 +954,7 @@ This file defines two sorts of primitives. All of them are provided into any mod
(lambda (stx)
(syntax-parse stx #:literals (:)
[(_ a:optional-standalone-annotation
(clause:for-clause ...)
clause:for-clauses
c ...) ; c is not always an expression, can be a break-clause
(cond
[(syntax-e #'a.ty)