Changeset 15406
- Timestamp:
- 10/10/20 21:43:45 (3 years ago)
- Location:
- trunk/abcl/src/org/armedbear/lisp
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/FaslClassLoader.java
r15395 r15406 111 111 112 112 if (truenameFasl instanceof Pathname) { 113 return ( (Pathname)Pathname.mergePathnames(name, (Pathname)truenameFasl, Keyword.NEWEST))113 return (Pathname.mergePathnames(name, (Pathname)truenameFasl, Keyword.NEWEST)) 114 114 .getInputStream(); 115 115 } else if (truename instanceof Pathname) { 116 return ( (Pathname)Pathname.mergePathnames(name, (Pathname) truename, Keyword.NEWEST))116 return (Pathname.mergePathnames(name, (Pathname) truename, Keyword.NEWEST)) 117 117 .getInputStream(); 118 118 } else if (!Symbol.PROBE_FILE.execute(name).equals(NIL)) { -
trunk/abcl/src/org/armedbear/lisp/Interpreter.java
r15395 r15406 331 331 if (i + 1 < args.length) { 332 332 if (arg.equals("--load")) 333 Load.load( (Pathname)Pathname.mergePathnames((Pathname)Pathname.create(args[i + 1]),333 Load.load(Pathname.mergePathnames((Pathname)Pathname.create(args[i + 1]), 334 334 checkPathname(Symbol.DEFAULT_PATHNAME_DEFAULTS.getSymbolValue())), 335 335 false, false, true); 336 336 337 337 else -
trunk/abcl/src/org/armedbear/lisp/Lisp.java
r15396 r15406 1379 1379 LispObject truename = Symbol.LOAD_TRUENAME.symbolValue(thread); 1380 1380 if (truenameFasl instanceof Pathname) { 1381 load = (Pathname)Pathname.mergePathnames(name, (Pathname)truenameFasl, Keyword.NEWEST);1381 load = Pathname.mergePathnames(name, (Pathname)truenameFasl, Keyword.NEWEST); 1382 1382 } else if (truename instanceof Pathname) { 1383 load = (Pathname)Pathname.mergePathnames(name, (Pathname)truename, Keyword.NEWEST);1383 load = Pathname.mergePathnames(name, (Pathname)truename, Keyword.NEWEST); 1384 1384 } else { 1385 1385 if (!Symbol.PROBE_FILE.execute(name).equals(NIL)) { -
trunk/abcl/src/org/armedbear/lisp/Load.java
r15400 r15406 154 154 Pathname pathnameDefaults 155 155 = coerceToPathname(Symbol.DEFAULT_PATHNAME_DEFAULTS.symbolValue()); 156 mergedPathname = (Pathname)Pathname.mergePathnames(pathname, pathnameDefaults);156 mergedPathname = Pathname.mergePathnames(pathname, pathnameDefaults); 157 157 } 158 158 Pathname loadableFile = findLoadableFile(mergedPathname != null ? mergedPathname : pathname); … … 171 171 172 172 if (ZipCache.checkZipFile(truename)) { 173 // String n = truename.getNamestring(); 174 // String name = Pathname.uriEncode(truename.getName().getStringValue()); 175 // if (n.startsWith("jar:")) { 176 // n = "jar:" + n + "!/" + name + "." 177 // + COMPILE_FILE_INIT_FASL_TYPE; 178 // } else if (n.startsWith("zip:")) { 179 // n = "zip:" + n + "!/" + name + "." 180 // + COMPILE_FILE_INIT_FASL_TYPE; 181 // } else { 182 // n = "jar:file:" + Pathname.uriEncode(n) + "!/" + name + "." 183 // + COMPILE_FILE_INIT_FASL_TYPE; 184 // } 185 // if (!((mergedPathname = (Pathname)Pathname.create(n)) instanceof Pathname)) { 186 // return error(new FileError((MessageFormat.format("Failed to address JAR-PATHNAME truename {0} for name {1}", truename.princToString(), name)), truename)); 187 // } 188 truename = (Pathname) PathnameJar.createFromPathname(truename); 189 Pathname loader = (Pathname)Pathname.create("__loader__._"); // FIXME use constants 173 if (truename instanceof PathnameJar) { 174 truename = PathnameJar.createFromEntry((PathnameJar)truename); 175 } else { 176 truename = PathnameJar.createFromPathname(truename); 177 } 178 Pathname loader = Pathname.create("__loader__._"); // FIXME use constants 190 179 mergedPathname = (Pathname)Symbol.MERGE_PATHNAMES.execute(loader, truename); 191 180 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 + "'" + pathname.printObject() + "'"207 208 + "'" + mergedPathname.printObject() + "'";209 210 211 212 213 214 215 216 217 181 LispObject initTruename = Symbol.PROBE_FILE.execute(mergedPathname); 182 if (initTruename.equals(NIL)) { 183 // Maybe the enclosing JAR has been renamed? 184 Pathname p = Pathname.create(mergedPathname); 185 p.setName(Keyword.WILD); 186 LispObject result = Symbol.MATCH_WILD_JAR_PATHNAME.execute(p); 187 188 if (result instanceof Cons 189 && ((Cons)result).length() == 1 190 && ((Cons)result).car() instanceof Pathname) { 191 initTruename = (Pathname)result.car(); 192 } else { 193 String errorMessage 194 = "Loadable FASL not found for " 195 + pathname.printObject() 196 + " in " 197 + mergedPathname.printObject(); 198 if (ifDoesNotExist) { 199 return error(new FileError(errorMessage, mergedPathname)); 200 } else { 201 Debug.trace(errorMessage); 202 return NIL; 203 } 204 } 205 } 206 truename = (Pathname)initTruename; 218 207 } 219 208 -
trunk/abcl/src/org/armedbear/lisp/Pathname.java
r15405 r15406 63 63 } 64 64 65 public static LispObjectcreate(String s) {65 public static Pathname create(String s) { 66 66 // TODO distinguish between logical hosts and schemes for URLs 67 67 // which we can meaningfully parse. … … 1617 1617 } 1618 1618 1619 public static final LispObjectmergePathnames(Pathname pathname, Pathname defaultPathname) {1619 public static final Pathname mergePathnames(Pathname pathname, Pathname defaultPathname) { 1620 1620 return mergePathnames(pathname, defaultPathname, Keyword.NEWEST); 1621 1621 } 1622 1622 1623 public static final LispObjectmergePathnames(final Pathname pathname,1624 1625 1623 public static final Pathname mergePathnames(final Pathname pathname, 1624 final Pathname defaultPathname, 1625 final LispObject defaultVersion) { 1626 1626 Pathname result; 1627 1627 Pathname p = Pathname.create(pathname); … … 1633 1633 } else { 1634 1634 if (pathname instanceof PathnameJar 1635 // If the defaults contain a JAR-PATHNAME, and the pathname to1636 // be be merged is not a JAR-PATHNAME, does not have a specified1637 // DEVICE, a specified HOST, and doesn't contain a relative1638 // DIRECTORY, then the result will not be a JAR-PATHNAME1635 // If the defaults contain a JAR-PATHNAME, and the pathname 1636 // to be be merged is not a JAR-PATHNAME, does not have a 1637 // specified DEVICE or a specified HOST and has a NIL or 1638 // relative directory then the result will be a JAR-PATHNAME. 1639 1639 || (defaultPathname instanceof PathnameJar 1640 1640 && !(pathname instanceof PathnameJar) 1641 && pathname.getHost().equals(NIL) 1641 1642 && pathname.getDevice().equals(NIL) 1642 && !(!pathname.getDirectory().equals(NIL)1643 && pathname.getDirectory().car().equals(Keyword.ABSOLUTE)))) {1643 && (pathname.getDirectory().equals(NIL) 1644 || pathname.getDirectory().car().equals(Keyword.RELATIVE)))) { 1644 1645 result = PathnameJar.create(); 1645 1646 } else if (pathname instanceof PathnameURL) { … … 1653 1654 } else { 1654 1655 if (defaultPathname instanceof PathnameJar) { 1655 d = PathnameJar.create( defaultPathname);1656 d = PathnameJar.create((PathnameJar)defaultPathname); 1656 1657 } else if (defaultPathname instanceof PathnameURL) { 1657 1658 d = PathnameURL.create(defaultPathname); … … 1686 1687 // :UNSPECIFIC. 1687 1688 if ((d instanceof PathnameJar) 1688 && (result instanceof Pathname)) { 1689 if (pathname.getHost() == NIL 1690 && pathname.getDevice() == NIL 1691 && d.isJar() 1692 && !Utilities.isPlatformWindows) { 1693 if (pathname.getDirectory() != NIL 1694 && pathname.getDirectory().car() == Keyword.ABSOLUTE) { 1695 result.setDevice(Keyword.UNSPECIFIC); 1696 } else { 1697 result.setDevice(d.getDevice()); 1698 } 1689 && !(result instanceof PathnameJar)) { 1690 if (!Utilities.isPlatformWindows) { 1691 result.setDevice(Keyword.UNSPECIFIC); 1699 1692 } else { 1700 1693 result.setDevice(d.getDevice()); … … 2147 2140 } 2148 2141 2142 Pathname getEntryPath() { 2143 return Pathname.create(asEntryPath()); 2144 } 2145 2149 2146 /** @return The representation of the DIRECTORY/NAME/TYPE elements 2150 2147 * of pathname suitable for referencing an entry in a Zip/JAR file. … … 2152 2149 * This representation is always a relative path. 2153 2150 */ 2154 protectedString asEntryPath() {2151 String asEntryPath() { 2155 2152 Pathname p = Pathname.create(); 2156 2153 p.setDirectory(getDirectory()) -
trunk/abcl/src/org/armedbear/lisp/PathnameJar.java
r15405 r15406 63 63 64 64 public static PathnameJar create(PathnameJar p) { 65 return (PathnameJar)PathnameJar.create(p.getNamestring()); 65 PathnameJar result = new PathnameJar(); 66 result.copyFrom(p); 67 return result; 66 68 } 67 69 … … 81 83 } 82 84 85 /** Transform an entry in a jar to a reference as a jar */ 86 public static PathnameJar createFromEntry(PathnameJar p) { 87 PathnameJar result = new PathnameJar(); 88 result 89 .copyFrom(p) 90 .setDirectory(NIL) 91 .setName(NIL) 92 .setType(NIL); 93 Pathname entryPath = p.getEntryPath(); 94 LispObject device = p.getDevice(); 95 device = device.nreverse().push(entryPath).nreverse(); 96 result.setDevice(device); 97 return result; 98 } 99 83 100 static public PathnameJar createFromFile(String s) { 84 101 return PathnameJar.create(JAR_URI_PREFIX + "file:" + s + JAR_URI_SUFFIX); … … 340 357 p.copyFrom(pathname); 341 358 342 PathnameURL rootJar = (PathnameURL) p.getRootJar(); 343 if (rootJar.isLocalFile()) { 359 // Run a truename resolution on the path of local jar archives 360 if (p.isLocalFile()) { 361 PathnameURL rootJar = new PathnameURL(); 362 rootJar.copyFrom((Pathname)p.getRootJar()); 363 // Ensure that we don't return a PathnameJar if the current default is one 364 if (rootJar.getDevice().equals(NIL)) { 365 rootJar.setDevice(Keyword.UNSPECIFIC); 366 } 344 367 LispObject trueRootJar = PathnameURL.truename(rootJar, errorIfDoesNotExist); 345 368 if (trueRootJar.equals(NIL)) { … … 402 425 403 426 public InputStream getInputStream() { 404 String entryPath = asEntryPath();405 427 // XXX We only return the bytes of an entry in a JAR 406 428 if (!isArchiveEntry()) { -
trunk/abcl/src/org/armedbear/lisp/PathnameURL.java
r15405 r15406 55 55 protected PathnameURL() {} 56 56 57 public static Pathname create() {57 public static PathnameURL create() { 58 58 return new PathnameURL(); 59 59 } … … 64 64 65 65 public static PathnameURL create(PathnameURL p) { 66 return (PathnameURL) PathnameURL.create(p.getNamestring()); 67 } 68 69 public static LispObject create(URL url) { 66 PathnameURL result = new PathnameURL(); 67 result.copyFrom(p); 68 return result; 69 } 70 71 public static PathnameURL create(URL url) { 70 72 return PathnameURL.create(url.toString()); 71 73 } 72 74 73 public static LispObjectcreate(URI uri) {75 public static PathnameURL create(URI uri) { 74 76 return PathnameURL.create(uri.toString()); 75 77 } 76 78 77 public static LispObjectcreateFromFile(Pathname p) {79 public static PathnameURL createFromFile(Pathname p) { 78 80 String ns = "file:" + p.getNamestring(); 79 81 return create(ns); … … 287 289 || Symbol.GETF.execute(p.getHost(), PathnameURL.SCHEME, NIL) 288 290 .equals("file")) { 289 return Pathname.truename(p, errorIfDoesNotExist); 291 LispObject fileTruename = Pathname.truename(p, errorIfDoesNotExist); 292 if (fileTruename.equals(NIL)) { 293 return NIL; 294 } 295 if (!(fileTruename instanceof PathnameURL)) { 296 PathnameURL urlTruename = PathnameURL.create((Pathname)fileTruename); 297 return urlTruename; 298 } 299 return fileTruename; 290 300 } 291 301 -
trunk/abcl/src/org/armedbear/lisp/ZipCache.java
r15405 r15406 166 166 167 167 public static InputStream getEntryAsInputStream(PathnameJar archiveEntry) { 168 InputStream result = null; 169 if (archiveEntry.getDevice().length() > 1) { 170 simple_error("Unimplemented retrieval of InputStream from a nested jar reference"); 171 return (InputStream)UNREACHED; 172 // Pathname inner = (Pathname) getDevice().cdr().car(); 173 // InputStream input = ZipCache.getInputStream(jarFile, inner); 174 // ZipInputStream zipInputStream = new ZipInputStream(input); 175 // result = ZipCache.getEntryAsInputStream(zipInputStream, entryPath); 176 } else { 177 Archive archive = ZipCache.getArchive(archiveEntry); 178 // ZipFile zipFile = archive.file; 179 // ZipEntry entry = archive.getEntry(archiveEntry); 180 181 result = archive.getEntryAsInputStream(archiveEntry); 182 if (result == null) { 183 simple_error("Failed to get InputStream for ~a", archiveEntry); 184 } 168 PathnameJar archiveJar = archiveEntry.getArchive(); 169 Archive archive = ZipCache.getArchive(archiveJar); 170 InputStream result = archive.getEntryAsInputStream(archiveEntry); 171 if (result == null) { 172 simple_error("Failed to get InputStream for ~a", archiveEntry); 185 173 } 186 174 return result; -
trunk/abcl/src/org/armedbear/lisp/delete_file.java
r15400 r15406 61 61 pathname)); 62 62 final Pathname defaultedPathname 63 = (Pathname)Pathname.mergePathnames(pathname,63 = Pathname.mergePathnames(pathname, 64 64 coerceToPathname(Symbol.DEFAULT_PATHNAME_DEFAULTS.symbolValue()), 65 65 NIL); -
trunk/abcl/src/org/armedbear/lisp/probe_file.java
r15405 r15406 64 64 return PathnameJar.truename(p, false); 65 65 } else if (p instanceof PathnameURL) { 66 return PathnameURL.truename( p, false);66 return PathnameURL.truename((PathnameURL)p, false); 67 67 } else { 68 68 return Pathname.truename(p, false); … … 93 93 return PathnameJar.truename(p, true); 94 94 } else if (p instanceof PathnameURL) { 95 return PathnameURL.truename( p, true);95 return PathnameURL.truename((PathnameURL)p, true); 96 96 } else { 97 97 return Pathname.truename(p, true); -
trunk/abcl/src/org/armedbear/lisp/unzip.java
r15400 r15406 72 72 private LispObject unzipToDirectory(Pathname zipPath, Pathname dirPath) { 73 73 if (!zipPath.isAbsolute()) { 74 zipPath = (Pathname)Pathname.mergePathnames(zipPath,74 zipPath = Pathname.mergePathnames(zipPath, 75 75 coerceToPathname(Symbol.DEFAULT_PATHNAME_DEFAULTS.symbolValue())); 76 76 }
Note: See TracChangeset
for help on using the changeset viewer.