1;; Test rest argument optimizations 2 3;; Check that rest args are correctly fetched from a closure 4(assert (equal? 1 ((lambda f0 5 (let ((v0 f0)) 6 (let ((failure0 7 (lambda () 8 (if (pair? v0) 9 (car v0))))) 10 (failure0)))) 11 1))) 12 13;; Check that rest arg optimizations aren't applied after inlining 14;; (#1658), slightly different from the above 15(assert (equal? 1 ((lambda f0 16 (let ((v0 f0)) 17 (if (pair? v0) 18 (car v0)))) 19 1))) 20 21;; Ensure that rest conversion is not applied too aggressively. 22;; (only when the consequence is () should it be applied) 23(define (rest-nonnull-optimization . rest) 24 (let ((x (if (null? (cdr rest)) 25 '(foo) 26 (cdr rest)))) 27 (null? x))) 28 29(assert (not (rest-nonnull-optimization 1))) 30(assert (not (rest-nonnull-optimization 1 2))) 31 32;; Regression test to make sure explicitly consed rest args don't get 33;; rest argvector ops for them (#1756) 34(let () 35 (define mdplus 36 (lambda args 37 (let ((args args)) 38 (if (pair? args) 39 (car args))))) 40 (mdplus '1 '2) 41 (mdplus '3 '4)) 42