[armedbear-devel] jar pathnames should be :ABSOLUTE
evenson at panix.com
Mon Mar 15 08:08:37 UTC 2010
On 3/15/10 6:20 AM, Alan Ruttenberg wrote:
> Things load up now, however there is something that confuses me:
> I see load messages like the following (note that there are two "!/"
> in the pathname.
> ; Loaded #P"jar:jar:file:/Users/alanr/Desktop/lsw.jar!/lsw/owl/tests/armedbear-0.20.0-dev-darwin-unknown/test-suite.abcl!/"
> (0.179 seconds)
> Describe shows that the device is a list of the jar path and
> directory, and that there is no directory.
> CL-USER(6): (describe
> is an object of type PATHNAME:
> HOST NIL
> DEVICE (#P"/Users/alanr/Desktop/lsw.jar"
> DIRECTORY NIL
> NAME NIL
> TYPE NIL
> VERSION NIL
This is how the implementation represents a jar within a jar, which is
necessary for loading FASLs to work. Remember that a packed ABCL FASL
is a zip (i.e. jar) file that contains an init FASL (the "*._" file),
plus the compiled classes (the "*-nnn.cls" where nnn is an increasing
integer). When the system loads the packed FASL, it uses MERGE-PATHNAME
to combine the name of the sub-FASL (i.e. "foo-1.cls") with the
*LOAD-TRUENAME* of the FASL (i.e "jar:jar:file:/a/b/bar.jar!/foo.abcl!/").
In writing this reply, I realize this probably breaks the use of
*LOAD-TRUENAME*/*LOAD-PATHNAME* to code that finds itself in a packed
FASL in a jar. Such code would probably be much happier if its
while its *LOAD-TRUENAME* remained
Or maybe both should not have the double jar syntax, so that
MERGE-PATHNAME would do the right thing? I introduced another special
(SYS::*LOAD-TRUENAME-FASL*) where we can keep the "real" value.
Holler back if y'all agree with this modification, and I'll try to find
time to implement it soon.
"A screaming comes across the sky. It has happened before, but there
is nothing to compare to it now."
More information about the armedbear-devel