free-identifier=? expects, contrary to documentation, a syntax?, causing
contract errors. (and (identifier? ...) ...) solves this.
[Since the function is called only on fully expanded forms, it doesn't
look like the `identifier?` tests can ever fail, but it still seems
sensible to have them. -Matthew]
Use `call-with-` instead of `with-`, since it's a function instead
of a syntactic form. (This is a weak convention, but one to try to
follow with new functions and forms.)
Fix up the contracts and change the documentation to match the
usual style.
Create the temporary directory in `(find-system-path 'temp-dir)`
instead of the current directory.
Previously, relative locations were preserved for all files with the same
root, but that tends to keep too much information about the original
filesystem layout, especially when runtime files are pulled both from
the installation and a user-specific area. Since packages can be installed
at different relative locations, it makes sense to preserve relative
locations only up to package boundaries.
Commit 5ea4c2ab68 broke GCing of a thread that is blocked
via `sync` (as opposed to `place-channel-get`) on a place
channel whose write end is inaccessible.
If a package installed as a link in user scope, then removed, then
linked again, the documentation index database was not updated
correctly. As a result, the user-specific documentation page was
either not updated or had a broken link for the document.
TR no longer needs to handle #<undefined> because the value
no longer leaks out from uninitialized variables. However, uses
of uninitialized variables are not caught by TR (they are treated
like errors from the `error` function).
a function to get more interesting values and then use those values
to guarantee it can generate things it couldn't before
For example, it can now generate a function with this contract:
(-> (-> is-eleven?) is-eleven?)
without knowing what the is-eleven? predicate does -- instead it can
figure out to call the argument thunk and then pipe that result around