|
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