2 Module-Processing Helpers
2.1 Reading Module Source Code
Calls thunk with all reader parameters reset to their default
to check whether evaluating it will declare a
module named expected-module-sym
– at least if module
in the top-level to MzScheme’s module
. The syntax object stx
contain a compiled expression. Also, stx
can be an end-of-file, on
the grounds that read-syntax
can produce an end-of-file.
If stx can declare a module in an appropriate top-level, then
the check-module-form procedure returns a syntax object that
certainly will declare a module (adding explicit context to the
leading module if necessary) in any top-level. Otherwise, if
source-v is not #f, a suitable exception is raised
using the write form of the source in the message; if
source-v is #f, #f is returned.
If stx is eof or eof wrapped as a syntax object, then an
error is raised or #f is returned.
2.2 Getting Module Compiled Code
Returns a compiled expression for the declaration of the module
specified by module-path-v.
The compiled-subdir argument defaults to "compiled";
it specifies the sub-directory to search for a compiled version of the
The compile-proc argument defaults to compile. This
procedure is used to compile module source if an already-compiled
version is not available.
The ext-proc argument defaults to #f. If it is not
#f, it must be a procedure of two arguments that is called
when a native-code version of path is should be used. In that
case, the arguments to ext-proc are the path for the
extension, and a boolean indicating whether the extension is a _loader
file (#t) or not (#f).
The choose-proc argument is a procedure that takes three
paths: a source path, a ".zo" file path, and an extension path
(for a non-_loader extension). Some of the paths may not
exist. The result should be either 'src, 'zo,
'so, or #f, indicating which variant should be used
or (in the case of #f) that the default choice should be
The default choice is computed as follows: if a ".zo" version
of path is available and newer than path itself (in
one of the directories specified by compiled-subdir), then it
is used instead of the source. Native-code versions of path
are ignored, unless only a native-code non-_loader version exists
(i.e., path itself does not exist). A _loader extension
is selected a last resort.
If an extension is prefered or is the only file that exists, it is
supplied to ext-proc when ext-proc is #f,
or an exception is raised (to report that an extension file cannot be
used) when ext-proc is #f.
If notify-proc is supplied, it is called for the file
(source, ".zo" or extension) that is chosen.
If read-syntax-proc is provided, it is used to read the
module from a source file (but not from a bytecode file).
A parameter whose value is used like open-input-file
a module source or ".zo"
2.3 Resolving Module Paths to File Paths
Resolves a module path to filename path. The module path is resolved
relative to rel-to-path-v if it is a path string (assumed to
be for a file), to the directory result of calling the thunk if it is
a thunk, or to the current directory otherwise.
but the input is a module path index
; in this case, the rel-to-path-v
base is used where the module path index contains the “self” index.
depends on the “self” module path
index, then an exception is raised unless rel-to-path-v
2.4 Simplifying Module Paths
Returns a “simplified” module path by combining
, where the
latter must have the form '(lib ....)
or a symbol,
, '(planet ....)
, a path
, or a thunk to generate one of those.
The result can be a path if module-path-v contains a path
element that is needed for the result, or if
rel-to-module-path-v is a non-string path that is needed for
the result; otherwise, the result is a module path in the sense of
When the result is a 'lib or 'planet module path, it
is normalized so that equivalent module paths are represented by
2.5 Inspecting Modules and Module Dependencies
and syntax/modresolve, in addition to the following:
A debugging aid that prints the import hierarchy starting from a given