|
442 | 442 | ;; 1-element list of vararg argument, or empty if none |
443 | 443 | (vararg (let* ((l (if (null? pargl) '() (last pargl))) |
444 | 444 | ;; handle vararg with default value |
445 | | - (l (if (kwarg? l) (cadr l) l))) |
446 | | - (if (or (vararg? l) (varargexpr? l)) |
| 445 | + (l- (if (kwarg? l) (cadr l) l))) |
| 446 | + (if (or (vararg? l-) (varargexpr? l-)) |
447 | 447 | (list l) '()))) |
| 448 | + ;; expression to forward varargs to another call |
| 449 | + (splatted-vararg (if (null? vararg) '() |
| 450 | + (list `(... ,(arg-name (car vararg)))))) |
448 | 451 | ;; positional args with vararg |
449 | 452 | (pargl-all pargl) |
450 | 453 | ;; positional args without vararg |
|
520 | 523 | ,@(if ordered-defaults keynames vals) |
521 | 524 | ,@(if (null? restkw) '() `((call (top pairs) (call (core NamedTuple))))) |
522 | 525 | ,@(map arg-name pargl) |
523 | | - ,@(if (null? vararg) '() |
524 | | - (list `(... ,(arg-name (car vararg))))))))) |
| 526 | + ,@splatted-vararg)))) |
525 | 527 | (if ordered-defaults |
526 | 528 | (scopenest keynames vals ret) |
527 | 529 | ret)))) |
|
579 | 581 | ,@(if (null? restkw) |
580 | 582 | `((if (call (top isempty) ,rkw) |
581 | 583 | (null) |
582 | | - (call (top kwerr) ,kw ,@(map arg-name pargl) |
583 | | - ,@(if (null? vararg) '() |
584 | | - (list `(... ,(arg-name (car vararg)))))))) |
| 584 | + (call (top kwerr) ,kw ,@(map arg-name pargl) ,@splatted-vararg))) |
585 | 585 | '()) |
586 | 586 | (return (call ,mangled ;; finally, call the core function |
587 | 587 | ,@keynames |
588 | 588 | ,@(if (null? restkw) '() (list rkw)) |
589 | 589 | ,@(map arg-name pargl) |
590 | | - ,@(if (null? vararg) '() |
591 | | - (list `(... ,(arg-name (car vararg))))))))))) |
| 590 | + ,@splatted-vararg)))))) |
592 | 591 | ;; return primary function |
593 | 592 | ,(if (not (symbol? name)) |
594 | 593 | '(null) name))))) |
|
0 commit comments