From 6f919635dafa5c57d8ba53f193c88ecdcc0d4e85 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 5 Dec 2019 07:06:28 -0700 Subject: [PATCH] schmeify: improve determinism by ordering lifted procedures --- racket/src/schemify/lift.rkt | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/racket/src/schemify/lift.rkt b/racket/src/schemify/lift.rkt index acfcdd3f86..34ee66e819 100644 --- a/racket/src/schemify/lift.rkt +++ b/racket/src/schemify/lift.rkt @@ -620,23 +620,25 @@ ;; Create bindings for lifted functions, adding new arguments ;; as the functions are lifted (define (extract-lifted-bindings lifts empties) - (for/list ([(f proc) (in-hash lifts)] - #:when (liftable? proc)) - (let* ([new-args (liftable-frees proc)] - [frees (for/hash ([arg (in-list new-args)]) - (values arg #t))] - [rhs (liftable-expr proc)]) - `[,f ,(match rhs - [`(lambda ,args . ,body) - (let ([body (convert-lifted-calls-in-seq/box-mutated body args lifts frees empties)]) - (reannotate rhs `(lambda ,(append new-args args) . ,body)))] - [`(case-lambda [,argss . ,bodys] ...) - (reannotate rhs `(case-lambda - ,@(for/list ([args (in-list argss)] - [body (in-list bodys)]) - (let ([body (convert-lifted-calls-in-seq/box-mutated body args lifts frees empties)]) - `[,(append new-args args) . ,body]))))])]))) - + (define bindings + (for/list ([(f proc) (in-hash lifts)] + #:when (liftable? proc)) + (let* ([new-args (liftable-frees proc)] + [frees (for/hash ([arg (in-list new-args)]) + (values arg #t))] + [rhs (liftable-expr proc)]) + `[,f ,(match rhs + [`(lambda ,args . ,body) + (let ([body (convert-lifted-calls-in-seq/box-mutated body args lifts frees empties)]) + (reannotate rhs `(lambda ,(append new-args args) . ,body)))] + [`(case-lambda [,argss . ,bodys] ...) + (reannotate rhs `(case-lambda + ,@(for/list ([args (in-list argss)] + [body (in-list bodys)]) + (let ([body (convert-lifted-calls-in-seq/box-mutated body args lifts frees empties)]) + `[,(append new-args args) . ,body]))))])]))) + ;; Improve determinsism: + (sort bindings symbol