|
433 | 433 | ;; 1-element list of vararg argument, or empty if none |
434 | 434 | (vararg (let* ((l (if (null? pargl) '() (last pargl))) |
435 | 435 | ;; handle vararg with default value |
436 | | - (l (if (kwarg? l) (cadr l) l))) |
437 | | - (if (or (vararg? l) (varargexpr? l)) |
| 436 | + (l- (if (kwarg? l) (cadr l) l))) |
| 437 | + (if (or (vararg? l-) (varargexpr? l-)) |
438 | 438 | (list l) '()))) |
| 439 | + ;; expression to forward varargs to another call |
| 440 | + (splatted-vararg (if (null? vararg) '() |
| 441 | + (list `(... ,(arg-name (car vararg)))))) |
439 | 442 | ;; positional args with vararg |
440 | 443 | (pargl-all pargl) |
441 | 444 | ;; positional args without vararg |
|
510 | 513 | ,@(if ordered-defaults keynames vals) |
511 | 514 | ,@(if (null? restkw) '() `((call (top pairs) (call (core NamedTuple))))) |
512 | 515 | ,@(map arg-name pargl) |
513 | | - ,@(if (null? vararg) '() |
514 | | - (list `(... ,(arg-name (car vararg))))))))) |
| 516 | + ,@splatted-vararg)))) |
515 | 517 | (if ordered-defaults |
516 | 518 | (scopenest keynames vals ret) |
517 | 519 | ret)))) |
|
569 | 571 | ,@(if (null? restkw) |
570 | 572 | `((if (call (top isempty) ,rkw) |
571 | 573 | (null) |
572 | | - (call (top kwerr) ,kw ,@(map arg-name pargl) |
573 | | - ,@(if (null? vararg) '() |
574 | | - (list `(... ,(arg-name (car vararg)))))))) |
| 574 | + (call (top kwerr) ,kw ,@(map arg-name pargl) ,@splatted-vararg))) |
575 | 575 | '()) |
576 | 576 | (return (call ,mangled ;; finally, call the core function |
577 | 577 | ,@keynames |
578 | 578 | ,@(if (null? restkw) '() (list rkw)) |
579 | 579 | ,@(map arg-name pargl) |
580 | | - ,@(if (null? vararg) '() |
581 | | - (list `(... ,(arg-name (car vararg))))))))))) |
| 580 | + ,@splatted-vararg)))))) |
582 | 581 | ;; return primary function |
583 | 582 | ,(if (not (symbol? name)) |
584 | 583 | '(null) name)))))) |
|
0 commit comments