{"size": 1221, "ext": "scrbl", "max_stars_repo_path": "pkgs/racket-doc/syntax/scribblings/for-body.scrbl", "max_stars_repo_name": "lkh01/racket", "max_stars_repo_stars_event_min_datetime": "2018-07-29T04:13:52.000Z", "max_stars_repo_stars_event_max_datetime": "2022-02-14T16:11:17.000Z", "max_issues_repo_path": "pkgs/racket-doc/syntax/scribblings/for-body.scrbl", "max_issues_repo_name": "lkh01/racket", "max_issues_repo_issues_event_min_datetime": "2017-08-25T20:26:37.000Z", "max_issues_repo_issues_event_max_datetime": "2022-02-26T17:48:40.000Z", "max_forks_repo_path": "pkgs/racket-doc/syntax/scribblings/for-body.scrbl", "max_forks_repo_name": "lkh01/racket", "max_forks_repo_forks_event_min_datetime": "2016-04-25T11:47:57.000Z", "max_forks_repo_forks_event_max_datetime": "2017-05-09T14:52:48.000Z"}
{"max_stars_count": 10, "max_issues_count": 15, "max_forks_count": 3, "avg_line_length": 42.1034482759, "max_line_length": 70, "alphanum_fraction": 0.7272727273}
#lang scribble/manual
@(require (for-label racket/base
                     syntax/quote
                     syntax/for-body))

@title{Parsing @racket[for] Bodies}

@defmodule[syntax/for-body]{The @racketmodname[syntax/for-body] module
provides a helper function for @racket[for]-like syntactic forms that
wrap the body of the form while expanding to another @racket[for]-like
form, and the wrapper should apply only after the last
@racket[#:break] or @racket[#:final] clause in the body.}

@defproc[(split-for-body [stx syntax?] [body-stxes syntax?]) syntax?]{

The @racket[body-stxes] argument must have the form
@racket[(_pre-body ... _post-body ...)], and it is rewritten into
@racket[((_pre-body ...) (_post-body ...))] such that
@racket[(_post-body ...)] is as large as possible without containing a
@racket[#:break] or @racket[#:final] clause.

The @racket[stx] argument is used only for reporting syntax errors.

Use @racket[split-for-body] instead of assuming that the last form in
a @racket[for]-like form's body can be wrapped separately. In
particular, the last form might contain definitions that need to be
spliced in the same definition context as earlier forms to create
mutually-recursive definitions.}
