|
684 | 684 | (absent (list-tail opt n)) ;; absent arguments
|
685 | 685 | (body
|
686 | 686 | (if (any vararg? (butlast vals))
|
687 |
| - ;; Forbid splat in all but the final default value |
688 |
| - (error "invalid \"...\" in non-final positional argument default value") |
689 |
| - (if (any (lambda (defaultv) |
690 |
| - ;; does any default val expression... |
691 |
| - (contains (lambda (e) |
692 |
| - ;; contain "e" such that... |
693 |
| - (any (lambda (a) |
694 |
| - ;; "e" is in an absent arg |
695 |
| - (contains (lambda (u) |
696 |
| - (eq? u e)) |
697 |
| - a)) |
698 |
| - absent)) |
699 |
| - defaultv)) |
700 |
| - vals) |
701 |
| - ;; then add only one next argument |
702 |
| - `(block |
703 |
| - ,@prologue |
704 |
| - (call ,(arg-name (car req)) ,@(map arg-name (cdr passed)) ,(car vals))) |
705 |
| - ;; otherwise add all |
706 |
| - `(block |
707 |
| - ,@prologue |
708 |
| - (call ,(arg-name (car req)) ,@(map arg-name (cdr passed)) ,@vals)))))) |
| 687 | + ;; Forbid splat in all but the final default value |
| 688 | + (error "invalid \"...\" in non-final positional argument default value") |
| 689 | + (if (any (lambda (defaultv) |
| 690 | + ;; does any default val expression... |
| 691 | + (expr-contains-p |
| 692 | + (lambda (e) |
| 693 | + ;; contain "e" such that... |
| 694 | + (any (lambda (a) |
| 695 | + ;; "e" is in an absent arg |
| 696 | + (expr-contains-eq e a)) |
| 697 | + absent)) |
| 698 | + defaultv)) |
| 699 | + vals) |
| 700 | + ;; then add only one next argument |
| 701 | + `(block |
| 702 | + ,@prologue |
| 703 | + (call ,(arg-name (car req)) ,@(map arg-name (cdr passed)) ,(car vals))) |
| 704 | + ;; otherwise add all |
| 705 | + `(block |
| 706 | + ,@prologue |
| 707 | + (call ,(arg-name (car req)) ,@(map arg-name (cdr passed)) ,@vals)))))) |
709 | 708 | (method-def-expr- name sp passed body)))
|
710 | 709 | (iota (length opt)))
|
711 | 710 | ,(method-def-expr- name sparams overall-argl body rett))))
|
|
0 commit comments