On Tue 05 Mar 2013 17:45, Andy Wingo <wi...@pobox.com> writes:

>> ERROR: In procedure scm-error:
>> ERROR: missing interface for module (does-not-exist)
>>
>> ... which defeats the whole purpose of autoloads.

I pushed something that simply wraps the module binder in the autoload
with a false-if-exception (that also prints a warning).

Initially I wrapped the call to resolve-module / module-variable in
psyntax.scm's get-global-definition-hook with the false-if-exception,
but I ran into something interesting.  memoize-expression, written in
memoize.c, has the job of turning tree-il into something the evaluator
can deal with.  It has to specially recognize some toplevel
applications -- like @apply.  It does this... by looking up the
variable!  So that was another place autoloads could be defeated.

In the end I would have to wrap scm_module_variable
(scm_current_module(), sym) with a catch, and that's silly -- of course
resolving some other module can fail, but you don't expect
module-variable on a known module to throw an exception.  So for that
reason it made sense to me to prevent the autoload module binder from
propagating an exception.

Andy
-- 
http://wingolog.org/



Reply via email to