[armedbear-cvs] r14178 - in trunk/abcl: doc/manual src/org/armedbear/lisp

mevenson at common-lisp.net mevenson at common-lisp.net
Thu Oct 11 11:33:25 UTC 2012


Author: mevenson
Date: Thu Oct 11 04:33:24 2012
New Revision: 14178

Log:
Merging a "plain file" path on non-Windows gets an :UNSPECIFIC DEVICE.

If the defaults contain a JAR-PATHNAME, and the pathname to be be
merged does not have a specified DEVICE, a specified HOST, and doesn't
contain a relative DIRECTORY, then on non-MSDOG, set its device to
:UNSPECIFIC.

Modified:
   trunk/abcl/doc/manual/abcl.tex
   trunk/abcl/src/org/armedbear/lisp/Pathname.java

Modified: trunk/abcl/doc/manual/abcl.tex
==============================================================================
--- trunk/abcl/doc/manual/abcl.tex	Thu Oct 11 04:33:22 2012	(r14177)
+++ trunk/abcl/doc/manual/abcl.tex	Thu Oct 11 04:33:24 2012	(r14178)
@@ -51,6 +51,20 @@
   do not match the specification.
 \item The \code{TIME} form does not return a proper \code{VALUES}
   environment to its caller.
+\item When merging pathnames and the defaults point to a \code{JAR-PATHNAME},
+  we set the \code{DEVICE} of the result to \code{:UNSPECIFIC} if the pathname to be
+  be merged does not contain a specified \code{DEVICE}, does not contain a
+  specified \code{HOST}, does contain a relative \code{DIRECTORY}, and we are
+  not running on a \textsc{MSFT} Windows platform.\footnote{The intent of this
+    rather arcane sounding deviation from conformance is so that the
+    result of a merge won't fill in a DEVICE with the wrong "default
+    device for the host" in the sense of the fourth paragraph in the
+    [CLHS description of MERGE-PATHNAMES][2] (the paragraph beginning
+    "If the PATHNAME explicitly specifies a host and not a device…").
+    A future version of the implementation may return to conformance
+    by using the \code{HOST} value to reflect the type explicitly.
+  }
+
 \end{itemize}
 
 Somewhat confusingly, this statement of non-conformance in the

Modified: trunk/abcl/src/org/armedbear/lisp/Pathname.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/Pathname.java	Thu Oct 11 04:33:22 2012	(r14177)
+++ trunk/abcl/src/org/armedbear/lisp/Pathname.java	Thu Oct 11 04:33:24 2012	(r14178)
@@ -1985,7 +1985,24 @@
             result.device = p.device;
         } else {
             if (!p.isURL()) {
-                result.device = d.device;
+                // If the defaults contain a JAR-PATHNAME, and the
+                // pathname to be be merged does not have a specified
+                // DEVICE, a specified HOST, and doesn't contain a
+                // relative DIRECTORY, then on non-MSDOG, set its
+                // device to :UNSPECIFIC.
+                if (pathname.host == NIL
+                    && pathname.device == NIL
+                    && d.isJar()
+                    && !Utilities.isPlatformWindows) {
+                    if (pathname.directory != NIL
+                        && pathname.directory.car() == Keyword.ABSOLUTE) {
+                        result.device = Keyword.UNSPECIFIC;
+                    } else {
+                        result.device = d.device;
+                    }
+                } else {
+                    result.device = d.device;
+                }
             }
         }
 




More information about the armedbear-cvs mailing list