[Ecls-list] inexistant packages

Alexander Gavrilov angavrilov at gmail.com
Sat Sep 4 14:33:40 UTC 2010

> I think this time I got it right -- your change was not entirely correct:
> imagine a FASL that does not exit read_VV but starts a toplevel. Then
> cl_core.packages_to_be_created might have the wrong value.

Anything called before read_VV exits and restores the var will be
in the context that allows referencing undefined packages. The only
way to fix it is to decouple this read mode flag from the state of
packages_to_be_created list, and set it only for the duration of
the part of read_VV that actually reads the symbols.

All that this line does is properly propagate removes from the
list, which are done when nested fasl loads define packages:

> > -                /* old_eptbc = cl_core.packages_to_be_created; */
> > +               if (old_eptbc != OBJNULL)
> > +                       old_eptbc = cl_core.packages_to_be_created;

The bug was that it also lost the special OBJNULL state that
marks absense of any fasl-loading on the stack, so after any
one fasl was loaded, the reader became always permissive.

Blocking this propagation of removes may also have the effect
of damaging packages that were already supposedly taken off 
the list if somebody does a redundant make-package call.


More information about the ecl-devel mailing list