Using site-relative paths that are absolute within the site
avoids problems with files that are moved or used from multiple
contexts, such as "page-not-found.html".
Instead of making separate passes over the expressions,
make a single pass to collect necessary information for
type-checking.
This enables simpler processing of type annotations,
super initialization arguments, and other things.
This commit allows definitions without type annotations
to refer to definitions later in a module that do have
type annotations. For example,
(define (f x) (g 0))
(: g (-> Integer Integer))
(define (g x) (add1 x))
Previously, such cases required shuffling type annotations
and/or definitions around to satisfy the type-checker.
Note that typechecking may still depend on ordering when
there are not enough type annotations in the code.
Closes PR 11544
I tested this using BrowserStack on browsers going back to IE 6 on Windows XP.
It worked everywhere, even though lots of other parts of the (old) web pages didn't.
Use unsafe operations and forced inlining to speed up
MD5 calculation by about x2.25 on 32-bit platforms, and
use all that plus fixnums to speed up by about x7 on
64-bit platforms.
This implementation is still about a factor of 5 off
a C implementation. So, while this was a fun little
experiment, I'll revert this commit and add a binding
to the OpenSSL MD5 implementation, instead.
Also, change local mode to use absolute "file://" references across
sites (makes "doc-site.js" plus "doc-site.css" work locally) and
add "index.html" to paths a needed, but add a `-r` relative mode for
the old behavior.
Separate the "generated resources" part of a site from the "rendered
element" part, so that a site that doesn't use full-page formatting
can take share the resources of one that does.
Also, hide the "resources" function in a site to narrow the interface
exported by `plt-web`.
The "plt-new-services" package defines the "meta/new-web"
collection, with the idea that it will be merged into
"plt-services" and later replace "meta/web".