diff --git a/racket/collects/syntax/parse/lib/function-header.rkt b/racket/collects/syntax/parse/lib/function-header.rkt new file mode 100644 index 0000000000..4343597e03 --- /dev/null +++ b/racket/collects/syntax/parse/lib/function-header.rkt @@ -0,0 +1,26 @@ +#lang racket/base + +(require "../../parse.rkt" + "../experimental/template.rkt") + +(provide (all-defined-out)) + +(define-syntax-class function-header + (pattern ((~or header:function-header name:id) . args:args) + #:attr params + (template ((?@ . (?? header.params ())) + . args.params)))) + +(define-syntax-class args + (pattern (arg:arg ...) + #:attr params #'(arg.name ...)) + (pattern (arg:arg ... . rest:id) + #:attr params #'(arg.name ... rest))) + +(define-splicing-syntax-class arg + #:attributes (name) + (pattern name:id) + (pattern [name:id default]) + (pattern (~seq kw:keyword name:id)) + (pattern (~seq kw:keyword [name:id default]))) +