From 0e4f57f44c940e100f8529abbe7f13be507b5ed5 Mon Sep 17 00:00:00 2001 From: Sam Tobin-Hochstadt Date: Thu, 17 Dec 2020 09:50:50 -0500 Subject: [PATCH] Enable inlining for `define-inline` calls as arguments. A seemingly-unintentional choice made the following not behave as expected: (define-inline (f x) (+ x 1)) (f (f 2)) because the `(f 2)` was not inlined. Reported by @mflatt and Liwei Chou. --- racket/collects/racket/performance-hint.rkt | 40 ++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/racket/collects/racket/performance-hint.rkt b/racket/collects/racket/performance-hint.rkt index 84fada48d3..04ef7118c1 100644 --- a/racket/collects/racket/performance-hint.rkt +++ b/racket/collects/racket/performance-hint.rkt @@ -99,23 +99,23 @@ [(_ arg*:actual ...) ;; let*-bind the actuals, to ensure that they're evaluated ;; only once, and in order - #`(syntax-parameterize - ([name (make-rename-transformer #'internal-name)]) - (let* ([arg*.tmp arg*.arg] ...) - #,(let* ([arg-entries (attribute arg*.for-aux)] - [keyword-entries (filter car arg-entries)] - [positional-entries - (filter (lambda (x) (not (car x))) - arg-entries)] - [sorted-keyword-entries - (sort keyword-entries - stringstring - (syntax-e (car kw)))))]) - (keyword-apply - function-aux - (map (lambda (x) (syntax-e (car x))) - sorted-keyword-entries) - (map cadr sorted-keyword-entries) - (map cadr positional-entries)))))])))))])) + #`(let* ([arg*.tmp arg*.arg] ...) + (syntax-parameterize + ([name (make-rename-transformer #'internal-name)]) + #,(let* ([arg-entries (attribute arg*.for-aux)] + [keyword-entries (filter car arg-entries)] + [positional-entries + (filter (lambda (x) (not (car x))) + arg-entries)] + [sorted-keyword-entries + (sort keyword-entries + stringstring + (syntax-e (car kw)))))]) + (keyword-apply + function-aux + (map (lambda (x) (syntax-e (car x))) + sorted-keyword-entries) + (map cadr sorted-keyword-entries) + (map cadr positional-entries)))))])))))]))