The Racket repository
![]() Convert (let-values ([(<id> ...) (if <id-t> (values <e1> ...) (values <e2> ...))]) ....) to (let ([<id> (if <id-t> <e1> <e2>)] ...) ....) which duplicates the `(if <id-t> ....)` test, but that's likely to be worthwhile to avoid multiple-values shuffling and enable more constant and copy propagation. A related improvement is to more eagerly discard `let` wrappers with unused bindings during optimization, which could enable further optimization, and allow moving conditionals relative to other expressions to avoid intermediate binding. Eagerly discarding `let` wrappers exposed a bug in the optimizer's shifting of variable locations by exercising the relavant shifting operation in shift_closure_compilation(). Closes PR 14588 |
||
---|---|---|
native-pkgs@60c510ba85 | ||
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.mailmap | ||
.travis.yml | ||
INSTALL.txt | ||
Makefile | ||
README.txt |
This is the source code for the main Racket distribution. See "INSTALL.txt" for information on building Racket. License ------- Racket Copyright (c) 2010-2014 PLT Design Inc. Racket is distributed under the GNU Lesser General Public License (LGPL). This means that you can link Racket into proprietary applications, provided you follow the rules stated in the LGPL. You can also modify Racket; if you distribute a modified version, you must distribute it under the terms of the LGPL, which in particular means that you must release the source code for the modified software. See racket/src/COPYING_LESSER.txt for more information.