|
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= v 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