|
271 | 271 | (define (other x) (resolve-expansion-vars-with-new-env x env m parent-scope inarg))
|
272 | 272 | (case (car e)
|
273 | 273 | ((where) `(where ,(recur (cadr e)) ,@(map other (cddr e))))
|
274 |
| - ((|::|) `(|::| ,(recur (cadr e)) ,(other (caddr e)))) |
| 274 | + ((|::|) (if (length= e 2) |
| 275 | + `(|::| ,(other (cadr e))) |
| 276 | + `(|::| ,(recur (cadr e)) ,(other (caddr e))))) |
275 | 277 | ((call) `(call ,(other (cadr e))
|
276 | 278 | ,@(map (lambda (x)
|
277 | 279 | (resolve-expansion-vars-with-new-env x env m parent-scope #t))
|
|
397 | 399 | ((not (length> e 2)) e)
|
398 | 400 | ((and (pair? (cadr e))
|
399 | 401 | (eq? (caadr e) '|::|))
|
400 |
| - `(kw (|::| |
401 |
| - ,(if inarg |
402 |
| - (resolve-expansion-vars- (cadr (cadr e)) env m parent-scope inarg) |
403 |
| - ;; in keyword arg A=B, don't transform "A" |
404 |
| - (unescape (cadr (cadr e)))) |
405 |
| - ,(resolve-expansion-vars- (caddr (cadr e)) env m parent-scope inarg)) |
406 |
| - ,(resolve-expansion-vars-with-new-env (caddr e) env m parent-scope inarg))) |
| 402 | + (let* ((type-decl (cadr e)) ;; [argname]::type |
| 403 | + (argname (and (length> type-decl 2) (cadr type-decl))) |
| 404 | + (type (if argname (caddr type-decl) (cadr type-decl)))) |
| 405 | + `(kw (|::| |
| 406 | + ,@(if argname |
| 407 | + (list (if inarg |
| 408 | + (resolve-expansion-vars- argname env m parent-scope inarg) |
| 409 | + ;; in keyword arg A=B, don't transform "A" |
| 410 | + (unescape argname))) |
| 411 | + '()) |
| 412 | + ,(resolve-expansion-vars- type env m parent-scope inarg)) |
| 413 | + ,(resolve-expansion-vars-with-new-env (caddr e) env m parent-scope inarg)))) |
407 | 414 | (else
|
408 | 415 | `(kw ,(if inarg
|
409 | 416 | (resolve-expansion-vars- (cadr e) env m parent-scope inarg)
|
|
0 commit comments