|
219 | 219 | lst)))
|
220 | 220 |
|
221 | 221 | ;; get the name from a function formal argument expression, allowing `(escape x)`
|
222 |
| -(define (try-arg-name v) |
223 |
| - (cond ((symbol? v) (list v)) |
| 222 | +(define (try-arg-name v (escaped #f)) |
| 223 | + (cond ((symbol? v) (if escaped '() (list v))) |
224 | 224 | ((atom? v) '())
|
225 | 225 | (else
|
226 | 226 | (case (car v)
|
227 |
| - ((|::|) (if (length= v 2) '() (try-arg-name (cadr v)))) |
228 |
| - ((... kw =) (try-arg-name (cadr v))) |
229 |
| - ((escape) (list v)) |
230 |
| - ((hygienic-scope) (try-arg-name (cadr v))) |
| 227 | + ((|::|) (if (length= v 2) '() (try-arg-name (cadr v) escaped))) |
| 228 | + ((... kw =) (try-arg-name (cadr v) escaped)) |
| 229 | + ((escape) (if escaped (list (cadr v)) '())) |
| 230 | + ((hygienic-scope) (try-arg-name (cadr v) escaped)) |
| 231 | + ((tuple) (apply nconc (map (lambda (e) (try-arg-name e escaped)) (cdr v)))) |
231 | 232 | ((meta) ;; allow certain per-argument annotations
|
232 | 233 | (if (nospecialize-meta? v #t)
|
233 |
| - (try-arg-name (caddr v)) |
| 234 | + (try-arg-name (caddr v) escaped) |
234 | 235 | '()))
|
235 | 236 | (else '())))))
|
236 | 237 |
|
237 | 238 | ;; get names from a formal argument list, specifying whether to include escaped ones
|
238 | 239 | (define (safe-arg-names lst (escaped #f))
|
239 | 240 | (apply nconc
|
240 |
| - (map (lambda (v) |
241 |
| - (let ((vv (try-arg-name v))) |
242 |
| - (if (eq? escaped (and (pair? vv) (pair? (car vv)) (eq? (caar vv) 'escape))) |
243 |
| - (if escaped (list (cadar vv)) vv) |
244 |
| - '()))) |
245 |
| - lst))) |
| 241 | + (map (lambda (v) (try-arg-name v escaped)) lst))) |
246 | 242 |
|
247 | 243 | ;; arg names, looking only at positional args
|
248 | 244 | (define (safe-llist-positional-args lst (escaped #f))
|
|
0 commit comments