From mevenson at common-lisp.net Sun Dec 6 12:07:26 2009 From: mevenson at common-lisp.net (Mark Evenson) Date: Sun, 06 Dec 2009 07:07:26 -0500 Subject: [armedbear-cvs] r12291 - in trunk/abcl: . src/org/armedbear/lisp Message-ID: Author: mevenson Date: Sun Dec 6 07:07:23 2009 New Revision: 12291 Log: Ant-based build process now records FASL source locations correctly. Now we no longer copy the Lisp system sources to the build directory, instead directly referring to the actual source location. As a result, the FASLs now correctly record the location of the system source files. This makes using SLIME to edit system source a lot saner. Specifying the JVM property 'abcl.home' now overrides the dynamic lookup for 'boot.lisp' on the classpath of org.armedbear.lisp.Lisp for setting the EXT::*LISP-HOME* property. Modified: trunk/abcl/build.xml trunk/abcl/src/org/armedbear/lisp/Site.java Modified: trunk/abcl/build.xml ============================================================================== --- trunk/abcl/build.xml (original) +++ trunk/abcl/build.xml Sun Dec 6 07:07:23 2009 @@ -181,7 +181,7 @@ - + @@ -202,10 +202,10 @@ - + - + @@ -216,9 +216,10 @@ fork="true" failonerror="true" classname="org.armedbear.lisp.Main"> + - + @@ -229,6 +230,8 @@ + @@ -240,7 +243,8 @@ classpath="${build.classes.dir}" outputproperty="abcl.version" classname="org.armedbear.lisp.Main" - logerror="yes"> + logerror="yes"> + @@ -258,10 +262,10 @@ - - - - + + + + Modified: trunk/abcl/src/org/armedbear/lisp/Site.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Site.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Site.java Sun Dec 6 07:07:23 2009 @@ -39,35 +39,37 @@ import java.net.URL; import java.net.URLDecoder; + public final class Site { private static final String LISP_HOME; static { - String lispHome = null; - URL url = Lisp.class.getResource("boot.lisp"); - if (url != null) { - String protocol = url.getProtocol(); - if (protocol != null && protocol.equals("file")) { - String path = url.getPath(); - try { - path = URLDecoder.decode(path, "UTF-8"); - } - catch (java.io.UnsupportedEncodingException uee) { - // can't happen: Java implementations are required to - // support UTF-8 - } - int index = path.lastIndexOf('/'); - if (index >= 0) { - lispHome = path.substring(0, index + 1); - if (Utilities.isPlatformWindows) { - if (lispHome.length() > 0 && lispHome.charAt(0) == '/') - lispHome = lispHome.substring(1); + String lispHome = System.getProperty("abcl.home"); + if (lispHome == null) { + URL url = Lisp.class.getResource("boot.lisp"); + if (url != null) { + String protocol = url.getProtocol(); + if (protocol != null && protocol.equals("file")) { + String path = url.getPath(); + try { + path = URLDecoder.decode(path, "UTF-8"); + } + catch (java.io.UnsupportedEncodingException uee) { + // can't happen: Java implementations are required to + // support UTF-8 + } + int index = path.lastIndexOf('/'); + if (index >= 0) { + lispHome = path.substring(0, index + 1); + if (Utilities.isPlatformWindows) { + if (lispHome.length() > 0 && lispHome.charAt(0) == '/') + lispHome = lispHome.substring(1); + } } } } - } else - lispHome = System.getProperty("abcl.home"); + } LISP_HOME = lispHome; } From mevenson at common-lisp.net Sun Dec 6 12:19:31 2009 From: mevenson at common-lisp.net (Mark Evenson) Date: Sun, 06 Dec 2009 07:19:31 -0500 Subject: [armedbear-cvs] r12292 - trunk/abcl Message-ID: Author: mevenson Date: Sun Dec 6 07:19:30 2009 New Revision: 12292 Log: Restored inadvertent typo that hosed incremental builds of the system FASLs. Modified: trunk/abcl/build.xml Modified: trunk/abcl/build.xml ============================================================================== --- trunk/abcl/build.xml (original) +++ trunk/abcl/build.xml Sun Dec 6 07:19:30 2009 @@ -262,7 +262,7 @@ - + From vvoutilainen at common-lisp.net Sun Dec 6 15:52:05 2009 From: vvoutilainen at common-lisp.net (Ville Voutilainen) Date: Sun, 06 Dec 2009 10:52:05 -0500 Subject: [armedbear-cvs] r12293 - trunk/abcl Message-ID: Author: vvoutilainen Date: Sun Dec 6 10:52:04 2009 New Revision: 12293 Log: Fix build breakage on linux, remove daftness from build.xml. Modified: trunk/abcl/build.xml Modified: trunk/abcl/build.xml ============================================================================== --- trunk/abcl/build.xml (original) +++ trunk/abcl/build.xml Sun Dec 6 10:52:04 2009 @@ -219,7 +219,7 @@ - + From mevenson at common-lisp.net Mon Dec 7 11:56:57 2009 From: mevenson at common-lisp.net (Mark Evenson) Date: Mon, 07 Dec 2009 06:56:57 -0500 Subject: [armedbear-cvs] r12294 - trunk/abcl Message-ID: Author: mevenson Date: Mon Dec 7 06:56:52 2009 New Revision: 12294 Log: Fix abcl.compile.lisp under Windows. Modified: trunk/abcl/build.xml Modified: trunk/abcl/build.xml ============================================================================== --- trunk/abcl/build.xml (original) +++ trunk/abcl/build.xml Mon Dec 7 06:56:52 2009 @@ -208,19 +208,46 @@ + + + + + + + + + + + + (compile-system :zip nil :quit t + :output-path "${toString:abcl.lisp.output.path}${file.separator}") + + + + + + + + + + - + - - + + + + Author: mevenson Date: Mon Dec 7 06:56:57 2009 New Revision: 12295 Log: Tidy up patch to fix 'abcl.compile.lisp' breakage. Modified: trunk/abcl/build.xml Modified: trunk/abcl/build.xml ============================================================================== --- trunk/abcl/build.xml (original) +++ trunk/abcl/build.xml Mon Dec 7 06:56:57 2009 @@ -221,6 +221,11 @@ depends="abcl.copy.lisp,abcl.compile.java,abcl.fasls.uptodate" unless="abcl.fasls.uptodate.p"> + @@ -230,7 +235,7 @@ - From ehuelsmann at common-lisp.net Tue Dec 8 21:29:34 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Tue, 08 Dec 2009 16:29:34 -0500 Subject: [armedbear-cvs] r12296 - branches/fast-boot-preloading Message-ID: Author: ehuelsmann Date: Tue Dec 8 16:29:30 2009 New Revision: 12296 Log: Create a branch to test speeding up the ABCL boot process. Added: branches/fast-boot-preloading/ - copied from r12295, /trunk/ From ehuelsmann at common-lisp.net Tue Dec 8 21:46:37 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Tue, 08 Dec 2009 16:46:37 -0500 Subject: [armedbear-cvs] r12297 - branches/fast-boot-preloading/abcl/src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Tue Dec 8 16:46:36 2009 New Revision: 12297 Log: Implement preloader functionality which allows delaying reflection of compiled function classes. Added: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java (contents, props changed) Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Autoload.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/CompiledClosure.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Lisp.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Load.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Symbol.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/compile-file.lisp branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/compiler-pass2.lisp Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Autoload.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Autoload.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Autoload.java Tue Dec 8 16:46:36 2009 @@ -664,6 +664,13 @@ autoload(PACKAGE_SYS, "std-allocate-instance", "StandardObjectFunctions", true); autoload(PACKAGE_SYS, "zip", "zip", true); + autoload(PACKAGE_SYS, "proxy-preloaded-function", + "AutoloadedFunctionProxy", false); + autoload(PACKAGE_SYS, "make-function-preloading-context", + "AutoloadedFunctionProxy", false); + autoload(PACKAGE_SYS, "function-preload", + "AutoloadedFunctionProxy", false); + autoload(Symbol.COPY_LIST, "copy_list"); autoload(Symbol.SET_CHAR, "StringFunctions"); Added: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java ============================================================================== --- (empty file) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java Tue Dec 8 16:46:36 2009 @@ -0,0 +1,268 @@ +/* + * AutoloadedFunctionProxy.java + * + * Copyright (C) 2009 Erik Huelsmann + * $Id$ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * As a special exception, the copyright holders of this library give you + * permission to link this library with independent modules to produce an + * executable, regardless of the license terms of these independent + * modules, and to copy and distribute the resulting executable under + * terms of your choice, provided that you also meet, for each linked + * independent module, the terms and conditions of the license of that + * module. An independent module is a module which is not derived from + * or based on this library. If you modify this library, you may extend + * this exception to your version of the library, but you are not + * obligated to do so. If you do not wish to do so, delete this + * exception statement from your version. + */ + +package org.armedbear.lisp; + +import static org.armedbear.lisp.Lisp.*; + +import java.util.Hashtable; + + + +public class AutoloadedFunctionProxy extends Function { + + final private Symbol symbol; + final private String name; + final private LispObject cache; + final private LispObject pack; + final private LispObject anonymousPackage; + final private boolean isSetfFunction; + Function fun = null; + + public AutoloadedFunctionProxy(Symbol symbol, LispObject name, + LispObject cache, LispObject pack, + LispObject anonymousPackage, + boolean setfFunction) { + super(); + this.symbol = symbol; + this.name = name.getStringValue(); + this.cache = cache; + this.pack = pack; + // Debug.trace("proxying ... " + name.getStringValue()); + Debug.assertTrue(! (cache instanceof Nil)); + this.anonymousPackage = anonymousPackage; + this.isSetfFunction = setfFunction; + } + + final private synchronized Function load() { + if (fun != null) + return fun; + + LispThread thread = LispThread.currentThread(); + SpecialBindingsMark mark = thread.markSpecialBindings(); + + thread.bindSpecial(AUTOLOADING_CACHE, cache); + thread.bindSpecial(Load._FASL_ANONYMOUS_PACKAGE_, anonymousPackage); + thread.bindSpecial(Symbol._PACKAGE_, pack); + byte[] classbytes = + (byte[])((Hashtable)cache.javaInstance()).get(name); + try { + fun = loadClassBytes(classbytes); + } + catch (Throwable t) { + Debug.trace(t); + } // ### fixme + finally { + thread.resetSpecialBindings(mark); + } + + if (symbol != null) { + if (isSetfFunction) + put(symbol, Symbol.SETF_FUNCTION, fun); + else + symbol.setSymbolFunction(fun); + } + + return fun; + } + + @Override + public LispObject execute() + { + return load().execute(); + } + + @Override + public LispObject execute(LispObject arg) + { + return load().execute(arg); + } + + @Override + public LispObject execute(LispObject first, LispObject second) + + { + return load().execute(first, second); + } + + @Override + public LispObject execute(LispObject first, LispObject second, + LispObject third) + + { + return load().execute(first, second, third); + } + + @Override + public LispObject execute(LispObject first, LispObject second, + LispObject third, LispObject fourth) + + { + return load().execute(first, second, third, fourth); + } + + @Override + public LispObject execute(LispObject first, LispObject second, + LispObject third, LispObject fourth, + LispObject fifth) + + { + return load().execute(first, second, third, fourth, fifth); + } + + @Override + public LispObject execute(LispObject first, LispObject second, + LispObject third, LispObject fourth, + LispObject fifth, LispObject sixth) + + { + return load().execute(first, second, third, fourth, fifth, sixth); + } + + @Override + public LispObject execute(LispObject first, LispObject second, + LispObject third, LispObject fourth, + LispObject fifth, LispObject sixth, + LispObject seventh) + + { + return load().execute(first, second, third, fourth, fifth, sixth, + seventh); + } + + @Override + public LispObject execute(LispObject first, LispObject second, + LispObject third, LispObject fourth, + LispObject fifth, LispObject sixth, + LispObject seventh, LispObject eighth) + + { + return load().execute(first, second, third, fourth, fifth, sixth, + seventh, eighth); + } + + @Override + public LispObject execute(LispObject[] args) + { + return load().execute(args); + } + + @SuppressWarnings("unchecked") + final public static LispObject loadPreloadedFunction(String name) { + LispThread thread = LispThread.currentThread(); + LispObject value = AUTOLOADING_CACHE.symbolValue(thread); + + if (value instanceof Nil) + return loadCompiledFunction(name); + + Hashtable cache = (Hashtable)value.javaInstance(); + byte[] bytes = (byte[])cache.get(name); + try { + return loadClassBytes(bytes); + } + catch (VerifyError e) + { + return error(new LispError("Class verification failed: " + + e.getMessage())); + } + catch (Throwable t) + { + Debug.trace(t); + } + return error(new FileError("Can't read file off stream.")); + } + + final static LispObject makePreloadingContext() { + return new JavaObject(new Hashtable()); + } + + final private static Primitive PROXY_PRELOADED_FUNCTION + = new Primitive("proxy-preloaded-function", PACKAGE_SYS, false, + "symbol name") + { + @Override + final public LispObject execute(LispObject symbol, LispObject name) { + LispThread thread = LispThread.currentThread(); + Symbol sym; + LispObject fun; + boolean setfFun = false; + + if (symbol instanceof Symbol) + sym = (Symbol)symbol; + else if (isValidSetfFunctionName(symbol)) { + sym = (Symbol)symbol.cadr(); + setfFun = true; + } else { + checkSymbol(symbol); // generate an error + return null; // not reached + } + + LispObject cache = AUTOLOADING_CACHE.symbolValue(thread); + LispObject pack = Symbol._PACKAGE_.symbolValue(thread); + + if (cache instanceof Nil) + return loadCompiledFunction(name.getStringValue()); + else { + fun = new AutoloadedFunctionProxy(sym, name, cache, pack, + Load._FASL_ANONYMOUS_PACKAGE_.symbolValue(thread), + setfFun); + if (setfFun) + put(sym, Symbol.SETF_FUNCTION, fun); + else + sym.setSymbolFunction(fun); + } + + return fun; + } + }; + + + final private static Primitive FUNCTION_PRELOAD + = new Primitive("function-preload", PACKAGE_SYS, false, "name") + { + @SuppressWarnings("unchecked") + @Override + final public LispObject execute(LispObject name) { + String namestring = name.getStringValue(); + LispThread thread = LispThread.currentThread(); + Hashtable cache + = (Hashtable)AUTOLOADING_CACHE.symbolValue(thread).javaInstance(); + + byte[] bytes = readFunctionBytes(namestring); + cache.put(namestring, bytes); + + return T; + } + }; + +} Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/CompiledClosure.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/CompiledClosure.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/CompiledClosure.java Tue Dec 8 16:46:36 2009 @@ -219,11 +219,13 @@ namestring = ((Pathname)arg).getNamestring(); else if (arg instanceof AbstractString) namestring = arg.getStringValue(); - if (namestring != null) - return loadCompiledFunction(namestring); + if (namestring != null) { + // Debug.trace("autoloading preloaded ... " + namestring); + return AutoloadedFunctionProxy.loadPreloadedFunction(namestring); + } if(arg instanceof JavaObject) { try { - return loadCompiledFunction((byte[]) arg.javaInstance(byte[].class)); + return loadClassBytes((byte[]) arg.javaInstance(byte[].class)); } catch(Throwable t) { Debug.trace(t); return error(new LispError("Unable to load " + arg.writeToString())); Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Lisp.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Lisp.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Lisp.java Tue Dec 8 16:46:36 2009 @@ -1224,6 +1224,26 @@ public static final LispObject loadCompiledFunction(final String namestring) { + try { + byte[] bytes = readFunctionBytes(namestring); + if (bytes != null) + return loadClassBytes(bytes); + } + catch (VerifyError e) + { + return error(new LispError("Class verification failed: " + + e.getMessage())); + } + catch (Throwable t) + { + Debug.trace(t); + } + return error(new FileError("File not found: " + namestring, + new Pathname(namestring))); + } + + public static final byte[] readFunctionBytes(final String namestring) + { final LispThread thread = LispThread.currentThread(); final boolean absolute = Utilities.isFilenameAbsolute(namestring); LispObject device = NIL; @@ -1296,8 +1316,7 @@ { long size = entry.getSize(); InputStream in = zipFile.getInputStream(entry); - LispObject obj = loadCompiledFunction(in, (int) size); - return obj != null ? obj : NIL; + return readFunctionBytes(in, (int) size); } else { @@ -1305,13 +1324,10 @@ entryName = defaultPathname.name.getStringValue() + "." + "abcl";//defaultPathname.type.getStringValue(); - byte in[] - = Utilities - .getZippedZipEntryAsByteArray(zipFile, + return Utilities + .getZippedZipEntryAsByteArray(zipFile, entryName, namestring); - LispObject o = loadCompiledFunction(in); - return o != null ? o : NIL; } } finally @@ -1323,8 +1339,9 @@ } catch (VerifyError e) { - return error(new LispError("Class verification failed: " + - e.getMessage())); + error(new LispError("Class verification failed: " + + e.getMessage())); + return null; // not reached } catch (IOException e) { @@ -1335,7 +1352,8 @@ Debug.trace(t); } } - return error(new LispError("Unable to load " + namestring)); + error(new LispError("Unable to load " + namestring)); + return null; // not reached } Pathname pathname = new Pathname(namestring); final File file = Utilities.getFile(pathname, defaultPathname); @@ -1344,23 +1362,24 @@ // The .cls file exists. try { - LispObject obj = loadCompiledFunction(new FileInputStream(file), - (int) file.length()); + byte[] bytes = readFunctionBytes(new FileInputStream(file), + (int) file.length()); // FIXME close stream! - if (obj != null) - return obj; + if (bytes != null) + return bytes; } catch (VerifyError e) { - return error(new LispError("Class verification failed: " + - e.getMessage())); + error(new LispError("Class verification failed: " + + e.getMessage())); + return null; // not reached } catch (Throwable t) { Debug.trace(t); } - return error(new LispError("Unable to load " + - pathname.writeToString())); + error(new LispError("Unable to load " + pathname.writeToString())); + return null; // not reached } try { @@ -1372,12 +1391,13 @@ ZipEntry entry = zipFile.getEntry(namestring); if (entry != null) { - LispObject obj = loadCompiledFunction(zipFile.getInputStream(entry), - (int) entry.getSize()); - if (obj != null) - return obj; + byte[] bytes = readFunctionBytes(zipFile.getInputStream(entry), + (int) entry.getSize()); + if (bytes != null) + return bytes; Debug.trace("Unable to load " + namestring); - return error(new LispError("Unable to load " + namestring)); + error(new LispError("Unable to load " + namestring)); + return null; // not reached } } finally @@ -1389,21 +1409,49 @@ { Debug.trace(t); } - return error(new FileError("File not found: " + namestring, - new Pathname(namestring))); + error(new FileError("File not found: " + namestring, + new Pathname(namestring))); + return null; // not reached } - public static final LispObject makeCompiledFunctionFromClass(Class c) - throws Exception { + public static final Function makeCompiledFunctionFromClass(Class c) { + try { if (c != null) { - LispObject obj = (LispObject)c.newInstance(); + Function obj = (Function)c.newInstance(); return obj; } else { return null; } + } + catch (InstantiationException e) {} // ### FIXME + catch (IllegalAccessException e) {} // ### FIXME + + return null; } - private static final LispObject loadCompiledFunction(InputStream in, int size) + + public static final LispObject loadCompiledFunction(InputStream in, int size) + { + try { + byte[] bytes = readFunctionBytes(in, size); + if (bytes != null) + return loadClassBytes(bytes); + } + catch (VerifyError e) + { + return error(new LispError("Class verification failed: " + + e.getMessage())); + } + catch (Throwable t) + { + Debug.trace(t); + } + return error(new FileError("Can't read file off stream.")); + } + + + + private static final byte[] readFunctionBytes(InputStream in, int size) { try { @@ -1422,7 +1470,7 @@ if (bytesRemaining > 0) Debug.trace("bytesRemaining = " + bytesRemaining); - return loadCompiledFunction(bytes); + return bytes; } catch (Throwable t) { @@ -1431,15 +1479,20 @@ return null; } - public static final LispObject loadCompiledFunction(byte[] bytes) throws Throwable { - return loadCompiledFunction(bytes, new JavaClassLoader()); + public static final Function loadClassBytes(byte[] bytes) + throws Throwable + { + return loadClassBytes(bytes, new JavaClassLoader()); } - public static final LispObject loadCompiledFunction(byte[] bytes, JavaClassLoader cl) throws Throwable { + public static final Function loadClassBytes(byte[] bytes, + JavaClassLoader cl) + throws Throwable + { Class c = cl.loadClassFromByteArray(null, bytes, 0, bytes.length); - LispObject obj = makeCompiledFunctionFromClass(c); - if (obj instanceof Function) { - ((Function)obj).setClassBytes(bytes); + Function obj = makeCompiledFunctionFromClass(c); + if (obj != null) { + obj.setClassBytes(bytes); } return obj; } @@ -2471,6 +2524,10 @@ public static final Symbol _AUTOLOAD_VERBOSE_ = exportSpecial("*AUTOLOAD-VERBOSE*", PACKAGE_EXT, NIL); + // ### *preloading-cache* + public static final Symbol AUTOLOADING_CACHE = + internSpecial("*AUTOLOADING-CACHE*", PACKAGE_SYS, NIL); + // ### *compile-file-type* public static final String COMPILE_FILE_TYPE = "abcl"; public static final Symbol _COMPILE_FILE_TYPE_ = Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Load.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Load.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Load.java Tue Dec 8 16:46:36 2009 @@ -44,6 +44,7 @@ import java.io.InputStream; import java.net.URL; import java.net.URLDecoder; +import java.util.Hashtable; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; @@ -608,6 +609,8 @@ LispObject result = NIL; try { thread.bindSpecial(_FASL_ANONYMOUS_PACKAGE_, new Package()); + thread.bindSpecial(AUTOLOADING_CACHE, + AutoloadedFunctionProxy.makePreloadingContext()); while (true) { LispObject obj = in.faslRead(false, EOF, true, thread); if (obj == EOF) Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Symbol.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Symbol.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Symbol.java Tue Dec 8 16:46:36 2009 @@ -3030,10 +3030,14 @@ PACKAGE_SYS.addInternalSymbol("FORMAT-CONTROL"); public static final Symbol FSET = PACKAGE_SYS.addInternalSymbol("FSET"); + public static final Symbol FUNCTION_PRELOAD = + PACKAGE_SYS.addInternalSymbol("FUNCTION-PRELOAD"); public static final Symbol INSTANCE = PACKAGE_SYS.addInternalSymbol("INSTANCE"); public static final Symbol MACROEXPAND_MACRO = PACKAGE_SYS.addInternalSymbol("MACROEXPAND-MACRO"); + public static final Symbol MAKE_FUNCTION_PRELOADING_CONTEXT = + PACKAGE_SYS.addInternalSymbol("MAKE-FUNCTION-PRELOADING-CONTEXT"); public static final Symbol NAME = PACKAGE_SYS.addInternalSymbol("NAME"); public static final Symbol OBJECT = @@ -3042,6 +3046,8 @@ PACKAGE_SYS.addInternalSymbol("OPERANDS"); public static final Symbol OPERATION = PACKAGE_SYS.addInternalSymbol("OPERATION"); + public static final Symbol PROXY_PRELOADED_FUNCTION = + PACKAGE_SYS.addInternalSymbol("PROXY-PRELOADED-FUNCTION"); public static final Symbol _SOURCE = PACKAGE_SYS.addInternalSymbol("%SOURCE"); public static final Symbol SOCKET_STREAM = Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/compile-file.lisp ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/compile-file.lisp (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/compile-file.lisp Tue Dec 8 16:46:36 2009 @@ -160,7 +160,7 @@ (compiled-function (setf form `(fset ',name - (load-compiled-function ,(file-namestring classfile)) + (proxy-preloaded-function ',name ,(file-namestring classfile)) ,*source-position* ',lambda-list ,doc)) @@ -484,6 +484,8 @@ (type (pathname-type output-file)) (temp-file (merge-pathnames (make-pathname :type (concatenate 'string type "-tmp")) output-file)) + (temp-file2 (merge-pathnames (make-pathname :type (concatenate 'string type "-tmp2")) + output-file)) (warnings-p nil) (failure-p nil)) (with-open-file (in input-file :direction :input) @@ -510,15 +512,6 @@ *forms-for-output*) (jvm::with-saved-compiler-policy (jvm::with-file-compilation - (write "; -*- Mode: Lisp -*-" :escape nil :stream out) - (%stream-terpri out) - (let ((*package* (find-package '#:cl))) - (write (list 'init-fasl :version *fasl-version*) - :stream out) - (%stream-terpri out) - (write (list 'setq '*source* *compile-file-truename*) - :stream out) - (%stream-terpri out)) (handler-bind ((style-warning #'(lambda (c) (setf warnings-p t) ;; let outer handlers @@ -544,7 +537,34 @@ (finalize-fasl-output) (dolist (name *fbound-names*) (fmakunbound name))))))) - (rename-file temp-file output-file) + (with-open-file (in temp-file :direction :input) + (with-open-file (out temp-file2 :direction :output + :if-does-not-exist :create + :if-exists :supersede) + ;; write header + (write "; -*- Mode: Lisp -*-" :escape nil :stream out) + (%stream-terpri out) + (let ((*package* (find-package '#:cl)) + (count-sym (gensym))) + (write (list 'init-fasl :version *fasl-version*) + :stream out) + (%stream-terpri out) + (write (list 'setq '*source* *compile-file-truename*) + :stream out) + (%stream-terpri out) + (dump-form `(dotimes (,count-sym ,*class-number*) + (function-preload + (%format nil "~A-~D.cls" ,(pathname-name output-file) + (1+ ,count-sym)))) out) + (%stream-terpri out)) + + + ;; copy remaining content + (loop for line = (read-line in nil :eof) + while (not (eq line :eof)) + do (write-line line out)))) + (delete-file temp-file) + (rename-file temp-file2 output-file) (when *compile-file-zip* (let* ((type ;; Don't use ".zip", it'll result in an extension Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/compiler-pass2.lisp ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/compiler-pass2.lisp (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/compiler-pass2.lisp Tue Dec 8 16:46:36 2009 @@ -2070,7 +2070,7 @@ ;; fixme *declare-inline* (declare-field g +lisp-object+ +field-access-default+) (emit 'ldc (pool-string (file-namestring pathname))) - (emit-invokestatic +lisp-class+ "loadCompiledFunction" + (emit-invokestatic "org/armedbear/lisp/AutoloadedFunctionProxy" "loadPreloadedFunction" (list +java-string+) +lisp-object+) (emit 'putstatic *this-class* g +lisp-object+) (setf *static-code* *code*) From ehuelsmann at common-lisp.net Fri Dec 18 21:50:57 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Fri, 18 Dec 2009 16:50:57 -0500 Subject: [armedbear-cvs] r12298 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Fri Dec 18 16:50:54 2009 New Revision: 12298 Log: Full source scan of "catch (Throwable"; remove lots of instances, or make the catch statement more specific, e.g. replace Throwable by IOException. Modified: trunk/abcl/src/org/armedbear/lisp/AbstractArray.java trunk/abcl/src/org/armedbear/lisp/AbstractVector.java trunk/abcl/src/org/armedbear/lisp/BuiltInClass.java trunk/abcl/src/org/armedbear/lisp/Condition.java trunk/abcl/src/org/armedbear/lisp/Go.java trunk/abcl/src/org/armedbear/lisp/Interpreter.java trunk/abcl/src/org/armedbear/lisp/Java.java trunk/abcl/src/org/armedbear/lisp/JavaClassLoader.java trunk/abcl/src/org/armedbear/lisp/Layout.java trunk/abcl/src/org/armedbear/lisp/Lisp.java trunk/abcl/src/org/armedbear/lisp/LispStackFrame.java trunk/abcl/src/org/armedbear/lisp/LispThread.java trunk/abcl/src/org/armedbear/lisp/Load.java trunk/abcl/src/org/armedbear/lisp/MathFunctions.java trunk/abcl/src/org/armedbear/lisp/Package.java trunk/abcl/src/org/armedbear/lisp/Pathname.java trunk/abcl/src/org/armedbear/lisp/PrintNotReadable.java trunk/abcl/src/org/armedbear/lisp/RandomState.java trunk/abcl/src/org/armedbear/lisp/Return.java trunk/abcl/src/org/armedbear/lisp/RuntimeClass.java trunk/abcl/src/org/armedbear/lisp/ShellCommand.java trunk/abcl/src/org/armedbear/lisp/SimpleTypeError.java trunk/abcl/src/org/armedbear/lisp/Site.java trunk/abcl/src/org/armedbear/lisp/SiteName.java trunk/abcl/src/org/armedbear/lisp/SlimeInputStream.java trunk/abcl/src/org/armedbear/lisp/SlotClass.java trunk/abcl/src/org/armedbear/lisp/SlotDefinition.java trunk/abcl/src/org/armedbear/lisp/Symbol.java trunk/abcl/src/org/armedbear/lisp/SymbolHashTable.java trunk/abcl/src/org/armedbear/lisp/Throw.java trunk/abcl/src/org/armedbear/lisp/TypeError.java trunk/abcl/src/org/armedbear/lisp/UnboundVariable.java trunk/abcl/src/org/armedbear/lisp/WrongNumberOfArgumentsException.java Modified: trunk/abcl/src/org/armedbear/lisp/AbstractArray.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/AbstractArray.java (original) +++ trunk/abcl/src/org/armedbear/lisp/AbstractArray.java Fri Dec 18 16:50:54 2009 @@ -294,23 +294,16 @@ @Override public int psxhash() { - try { - long result = 128387; // Chosen at random. - final int rank = getRank(); - int limit = rank < 4 ? rank : 4; - for (int i = 0; i < limit; i++) - result = mix(result, getDimension(i)); - final int length = getTotalSize(); - limit = length < 4 ? length : 4; - for (int i = 0; i < length; i++) - result = mix(result, AREF(i).psxhash()); - return (int) (result & 0x7fffffff); - } - catch (Throwable t) { - // Shouldn't happen. - Debug.trace(t); - return 0; - } + long result = 128387; // Chosen at random. + final int rank = getRank(); + int limit = rank < 4 ? rank : 4; + for (int i = 0; i < limit; i++) + result = mix(result, getDimension(i)); + final int length = getTotalSize(); + limit = length < 4 ? length : 4; + for (int i = 0; i < length; i++) + result = mix(result, AREF(i).psxhash()); + return (int) (result & 0x7fffffff); } /** Returns a newly allocated array or the current array with Modified: trunk/abcl/src/org/armedbear/lisp/AbstractVector.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/AbstractVector.java (original) +++ trunk/abcl/src/org/armedbear/lisp/AbstractVector.java Fri Dec 18 16:50:54 2009 @@ -276,21 +276,12 @@ @Override public int psxhash() { - try - { - final int length = length(); - final int limit = length < 4 ? length : 4; - long result = 48920713; // Chosen at random. - for (int i = 0; i < limit; i++) - result = mix(result, AREF(i).psxhash()); - return (int) (result & 0x7fffffff); - } - catch (Throwable t) - { - // Shouldn't happen. - Debug.trace(t); - return 0; - } + final int length = length(); + final int limit = length < 4 ? length : 4; + long result = 48920713; // Chosen at random. + for (int i = 0; i < limit; i++) + result = mix(result, AREF(i).psxhash()); + return (int) (result & 0x7fffffff); } public abstract AbstractArray adjustArray(int size, Modified: trunk/abcl/src/org/armedbear/lisp/BuiltInClass.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/BuiltInClass.java (original) +++ trunk/abcl/src/org/armedbear/lisp/BuiltInClass.java Fri Dec 18 16:50:54 2009 @@ -291,13 +291,6 @@ static { - try - { - StandardClass.initializeStandardClasses(); - } - catch (Throwable t) - { - Debug.trace(t); - } + StandardClass.initializeStandardClasses(); } } Modified: trunk/abcl/src/org/armedbear/lisp/Condition.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Condition.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Condition.java Fri Dec 18 16:50:54 2009 @@ -98,15 +98,8 @@ { super(StandardClass.CONDITION); Debug.assertTrue(slots.length == 2); - try - { - setFormatControl(message); - setFormatArguments(NIL); - } - catch (Throwable t) - { - Debug.trace(t); - } + setFormatControl(message); + setFormatArguments(NIL); } public final LispObject getFormatControl() @@ -177,11 +170,7 @@ LispObject formatControl = getFormatControl(); if (formatControl != NIL) { - try - { - return format(formatControl, getFormatArguments()); - } - catch (Throwable t) {} + return format(formatControl, getFormatArguments()); } return unreadableString(typeOf().writeToString()); } Modified: trunk/abcl/src/org/armedbear/lisp/Go.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Go.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Go.java Fri Dec 18 16:50:54 2009 @@ -57,15 +57,9 @@ @Override public LispObject getCondition() { - try { - StringBuffer sb = new StringBuffer("No tag named "); - sb.append(tag.writeToString()); - sb.append(" is currently visible"); - return new ControlError(sb.toString()); - } - catch (Throwable t) { - Debug.trace(t); - return new Condition(); - } + StringBuffer sb = new StringBuffer("No tag named "); + sb.append(tag.writeToString()); + sb.append(" is currently visible"); + return new ControlError(sb.toString()); } } Modified: trunk/abcl/src/org/armedbear/lisp/Interpreter.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Interpreter.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Interpreter.java Fri Dec 18 16:50:54 2009 @@ -75,31 +75,28 @@ if (interpreter != null) return null; interpreter = new Interpreter(); - try { - if (args != null) - preprocessCommandLineArguments(args); - if (!noinform) { - Stream out = getStandardOutput(); - out._writeString(banner()); - out._finishOutput(); - } - if (noinform) - _NOINFORM_.setSymbolValue(T); - else { - double uptime = (System.currentTimeMillis() - Main.startTimeMillis) / 1000.0; - getStandardOutput()._writeString("Low-level initialization completed in " + - uptime + " seconds.\n"); - } - initializeLisp(); - initializeTopLevel(); - if (!noinit) - processInitializationFile(); - if (args != null) - postprocessCommandLineArguments(args); + + if (args != null) + preprocessCommandLineArguments(args); + if (!noinform) { + Stream out = getStandardOutput(); + out._writeString(banner()); + out._finishOutput(); } - catch (Throwable t) { - t.printStackTrace(); + if (noinform) + _NOINFORM_.setSymbolValue(T); + else { + double uptime = (System.currentTimeMillis() - Main.startTimeMillis) / 1000.0; + getStandardOutput()._writeString("Low-level initialization completed in " + + uptime + " seconds.\n"); } + initializeLisp(); + initializeTopLevel(); + if (!noinit) + processInitializationFile(); + if (args != null) + postprocessCommandLineArguments(args); + return interpreter; } @@ -112,15 +109,12 @@ if (interpreter != null) return null; interpreter = new Interpreter(in, out, initialDirectory); - try { - Stream stdout = getStandardOutput(); - stdout._writeLine(version); - stdout._writeString(banner()); - stdout._finishOutput(); - } - catch (Throwable t) { - t.printStackTrace(); - } + + Stream stdout = getStandardOutput(); + stdout._writeLine(version); + stdout._writeString(banner()); + stdout._finishOutput(); + initializeJLisp(); initializeTopLevel(); processInitializationFile(); @@ -144,12 +138,7 @@ new Stream(outputStream, Symbol.CHARACTER)); if (!initialDirectory.endsWith(File.separator)) initialDirectory = initialDirectory.concat(File.separator); - try { - Symbol.DEFAULT_PATHNAME_DEFAULTS.setSymbolValue(new Pathname(initialDirectory)); - } - catch (Throwable t) { - Debug.trace(t); - } + Symbol.DEFAULT_PATHNAME_DEFAULTS.setSymbolValue(new Pathname(initialDirectory)); } // Interface. @@ -170,17 +159,17 @@ public static synchronized void initializeJLisp() { if (!initialized) { + Symbol.FEATURES.setSymbolValue(new Cons(Keyword.J, + Symbol.FEATURES.getSymbolValue())); + Load.loadSystemFile("boot.lisp", false, false, false); + try { - Symbol.FEATURES.setSymbolValue(new Cons(Keyword.J, - Symbol.FEATURES.getSymbolValue())); - Load.loadSystemFile("boot.lisp", false, false, false); Class.forName("org.armedbear.j.LispAPI"); - Load.loadSystemFile("j.lisp"); - } - catch (Throwable t) { - // ### FIXME exception - t.printStackTrace(); } + catch (ClassNotFoundException e) { } // FIXME: what to do? + + Load.loadSystemFile("j.lisp"); + initialized = true; } } @@ -190,18 +179,14 @@ private static synchronized void initializeTopLevel() { if (!topLevelInitialized) { - try { - // Resolve top-level-loop autoload. - Symbol TOP_LEVEL_LOOP = intern("TOP-LEVEL-LOOP", PACKAGE_TPL); - LispObject tplFun = TOP_LEVEL_LOOP.getSymbolFunction(); - if (tplFun instanceof Autoload) { - Autoload autoload = (Autoload) tplFun; - autoload.load(); - } - } - catch (Throwable t) { - t.printStackTrace(); + // Resolve top-level-loop autoload. + Symbol TOP_LEVEL_LOOP = intern("TOP-LEVEL-LOOP", PACKAGE_TPL); + LispObject tplFun = TOP_LEVEL_LOOP.getSymbolFunction(); + if (tplFun instanceof Autoload) { + Autoload autoload = (Autoload) tplFun; + autoload.load(); } + topLevelInitialized = true; } } @@ -216,8 +201,8 @@ return; } } - catch (Throwable t) { - t.printStackTrace(); + catch (IOException e) { + e.printStackTrace(); } } @@ -385,36 +370,26 @@ private static void reportError(ControlTransfer c, LispThread thread) { - try { - getStandardInput().clearInput(); - Stream out = getStandardOutput(); - out.freshLine(); - Condition condition = (Condition) c.getCondition(); - out._writeLine("Error: unhandled condition: " + - condition.writeToString()); - if (thread != null) - thread.printBacktrace(); - } - catch (Throwable t) { - - } + getStandardInput().clearInput(); + Stream out = getStandardOutput(); + out.freshLine(); + Condition condition = (Condition) c.getCondition(); + out._writeLine("Error: unhandled condition: " + + condition.writeToString()); + if (thread != null) + thread.printBacktrace(); } private static void reportError(UnhandledCondition c, LispThread thread) { - try { - getStandardInput().clearInput(); - Stream out = getStandardOutput(); - out.freshLine(); - Condition condition = (Condition) c.getCondition(); - out._writeLine("Error: unhandled condition: " + - condition.writeToString()); - if (thread != null) - thread.printBacktrace(); - } - catch (Throwable t) { - - } + getStandardInput().clearInput(); + Stream out = getStandardOutput(); + out.freshLine(); + Condition condition = (Condition) c.getCondition(); + out._writeLine("Error: unhandled condition: " + + condition.writeToString()); + if (thread != null) + thread.printBacktrace(); } public void kill() @@ -500,7 +475,7 @@ condition.typeOf().writeToString() + ':'); Debug.trace(" " + condition.writeToString()); } - catch (Throwable t) {} + catch (Throwable t) {} // catch any exception to throw below finally { thread.resetSpecialBindings(mark); } @@ -511,13 +486,8 @@ public static final LispObject readFromString(String s) { - try { - return new StringInputStream(s).read(true, NIL, false, - LispThread.currentThread()); - } - catch (Throwable t) { - return null; - } + return new StringInputStream(s).read(true, NIL, false, + LispThread.currentThread()); } // For j. Modified: trunk/abcl/src/org/armedbear/lisp/Java.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Java.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Java.java Fri Dec 18 16:50:54 2009 @@ -696,30 +696,23 @@ if (args.length < 1) error(new WrongNumberOfArgumentsException(this)); LispObject object = args[0]; - try { - if (args.length > 1) { - LispObject type = args[1]; - if (type == Keyword.BOOLEAN) { - if (object == NIL) - return JavaObject.getInstance(Boolean.FALSE); - else - return JavaObject.getInstance(Boolean.TRUE); - } - if (type == Keyword.REF) { - if (object == NIL) - return JavaObject.getInstance(null); - else - throw new Error(); - } - // other special cases come here + if (args.length > 1) { + LispObject type = args[1]; + if (type == Keyword.BOOLEAN) { + if (object == NIL) + return JavaObject.getInstance(Boolean.FALSE); + else + return JavaObject.getInstance(Boolean.TRUE); } - return JavaObject.getInstance(object.javaInstance()); - } - catch (Throwable t) { - error(new LispError("MAKE-IMMEDIATE-OBJECT: not implemented")); + if (type == Keyword.REF) { + if (object == NIL) + return JavaObject.getInstance(null); + else + error(new LispError("MAKE-IMMEDIATE-OBJECT: not implemented")); + } + // other special cases come here } - // Not reached. - return NIL; + return JavaObject.getInstance(object.javaInstance()); } }; Modified: trunk/abcl/src/org/armedbear/lisp/JavaClassLoader.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/JavaClassLoader.java (original) +++ trunk/abcl/src/org/armedbear/lisp/JavaClassLoader.java Fri Dec 18 16:50:54 2009 @@ -33,6 +33,8 @@ package org.armedbear.lisp; +import static org.armedbear.lisp.Lisp.*; + import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -70,7 +72,7 @@ } public Class loadClassFromByteArray(byte[] classbytes) { - return loadClassFromByteArray(null, classbytes); + return loadClassFromByteArray(null, classbytes); } public Class loadClassFromByteArray(String className, @@ -87,9 +89,9 @@ } } } - catch (LinkageError e) { - throw e; - } + catch (LinkageError e) { + throw e; + } catch (Throwable t) { Debug.trace(t); } @@ -106,6 +108,10 @@ return c; } } + catch (VerifyError e) + { + error(new LispError("Class verification failed: " + e.getMessage())); + } catch (Throwable t) { Debug.trace(t); } Modified: trunk/abcl/src/org/armedbear/lisp/Layout.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Layout.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Layout.java Fri Dec 18 16:50:54 2009 @@ -49,31 +49,16 @@ { this.lispClass = lispClass; Debug.assertTrue(instanceSlots.listp()); - int length = 0; - try - { - length = instanceSlots.length(); - } - catch (Throwable t) - { - // Shouldn't happen. - Debug.trace(t); - } + int length = instanceSlots.length(); slotNames = new LispObject[length]; int i = 0; - try - { - while (instanceSlots != NIL) - { - slotNames[i++] = instanceSlots.car(); - instanceSlots = instanceSlots.cdr(); - } - } - catch (Throwable t) + + while (instanceSlots != NIL) { - // Shouldn't happen. - Debug.trace(t); + slotNames[i++] = instanceSlots.car(); + instanceSlots = instanceSlots.cdr(); } + Debug.assertTrue(i == length); this.sharedSlots = sharedSlots; slotTable = initializeSlotTable(slotNames); @@ -153,16 +138,9 @@ protected LispObject generateSlotDefinitions() { LispObject list = NIL; - try - { - for (int i = slotNames.length; i-- > 0;) - list = list.push(new SlotDefinition(slotNames[i], NIL)); - } - catch (Throwable t) - { - // Shouldn't happen. - Debug.trace(t); - } + for (int i = slotNames.length; i-- > 0;) + list = list.push(new SlotDefinition(slotNames[i], NIL)); + return list; } Modified: trunk/abcl/src/org/armedbear/lisp/Lisp.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Lisp.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Lisp.java Fri Dec 18 16:50:54 2009 @@ -35,9 +35,9 @@ import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.lang.reflect.Constructor; import java.math.BigInteger; import java.net.MalformedURLException; import java.net.URL; @@ -95,52 +95,45 @@ // We need NIL before we can call usePackage(). static { - try - { - PACKAGE_CL.addNickname("CL"); - PACKAGE_CL_USER.addNickname("CL-USER"); - PACKAGE_CL_USER.usePackage(PACKAGE_CL); - PACKAGE_CL_USER.usePackage(PACKAGE_EXT); - PACKAGE_CL_USER.usePackage(PACKAGE_JAVA); - PACKAGE_SYS.addNickname("SYS"); - PACKAGE_SYS.usePackage(PACKAGE_CL); - PACKAGE_SYS.usePackage(PACKAGE_EXT); - PACKAGE_MOP.usePackage(PACKAGE_CL); - PACKAGE_MOP.usePackage(PACKAGE_EXT); - PACKAGE_MOP.usePackage(PACKAGE_SYS); - PACKAGE_TPL.addNickname("TPL"); - PACKAGE_TPL.usePackage(PACKAGE_CL); - PACKAGE_TPL.usePackage(PACKAGE_EXT); - PACKAGE_EXT.addNickname("EXT"); - PACKAGE_EXT.usePackage(PACKAGE_CL); - PACKAGE_EXT.usePackage(PACKAGE_THREADS); - PACKAGE_JVM.usePackage(PACKAGE_CL); - PACKAGE_JVM.usePackage(PACKAGE_EXT); - PACKAGE_JVM.usePackage(PACKAGE_SYS); - PACKAGE_LOOP.usePackage(PACKAGE_CL); - PACKAGE_PROF.addNickname("PROF"); - PACKAGE_PROF.usePackage(PACKAGE_CL); - PACKAGE_PROF.usePackage(PACKAGE_EXT); - PACKAGE_JAVA.usePackage(PACKAGE_CL); - PACKAGE_JAVA.usePackage(PACKAGE_EXT); - PACKAGE_LISP.usePackage(PACKAGE_CL); - PACKAGE_LISP.usePackage(PACKAGE_EXT); - PACKAGE_LISP.usePackage(PACKAGE_SYS); - PACKAGE_THREADS.usePackage(PACKAGE_CL); - PACKAGE_THREADS.usePackage(PACKAGE_EXT); - PACKAGE_THREADS.usePackage(PACKAGE_SYS); - PACKAGE_FORMAT.usePackage(PACKAGE_CL); - PACKAGE_FORMAT.usePackage(PACKAGE_EXT); - PACKAGE_XP.usePackage(PACKAGE_CL); - PACKAGE_PRECOMPILER.addNickname("PRE"); - PACKAGE_PRECOMPILER.usePackage(PACKAGE_CL); - PACKAGE_PRECOMPILER.usePackage(PACKAGE_EXT); - PACKAGE_PRECOMPILER.usePackage(PACKAGE_SYS); - } - catch (Throwable t) - { - Debug.trace(t); - } + PACKAGE_CL.addNickname("CL"); + PACKAGE_CL_USER.addNickname("CL-USER"); + PACKAGE_CL_USER.usePackage(PACKAGE_CL); + PACKAGE_CL_USER.usePackage(PACKAGE_EXT); + PACKAGE_CL_USER.usePackage(PACKAGE_JAVA); + PACKAGE_SYS.addNickname("SYS"); + PACKAGE_SYS.usePackage(PACKAGE_CL); + PACKAGE_SYS.usePackage(PACKAGE_EXT); + PACKAGE_MOP.usePackage(PACKAGE_CL); + PACKAGE_MOP.usePackage(PACKAGE_EXT); + PACKAGE_MOP.usePackage(PACKAGE_SYS); + PACKAGE_TPL.addNickname("TPL"); + PACKAGE_TPL.usePackage(PACKAGE_CL); + PACKAGE_TPL.usePackage(PACKAGE_EXT); + PACKAGE_EXT.addNickname("EXT"); + PACKAGE_EXT.usePackage(PACKAGE_CL); + PACKAGE_EXT.usePackage(PACKAGE_THREADS); + PACKAGE_JVM.usePackage(PACKAGE_CL); + PACKAGE_JVM.usePackage(PACKAGE_EXT); + PACKAGE_JVM.usePackage(PACKAGE_SYS); + PACKAGE_LOOP.usePackage(PACKAGE_CL); + PACKAGE_PROF.addNickname("PROF"); + PACKAGE_PROF.usePackage(PACKAGE_CL); + PACKAGE_PROF.usePackage(PACKAGE_EXT); + PACKAGE_JAVA.usePackage(PACKAGE_CL); + PACKAGE_JAVA.usePackage(PACKAGE_EXT); + PACKAGE_LISP.usePackage(PACKAGE_CL); + PACKAGE_LISP.usePackage(PACKAGE_EXT); + PACKAGE_LISP.usePackage(PACKAGE_SYS); + PACKAGE_THREADS.usePackage(PACKAGE_CL); + PACKAGE_THREADS.usePackage(PACKAGE_EXT); + PACKAGE_THREADS.usePackage(PACKAGE_SYS); + PACKAGE_FORMAT.usePackage(PACKAGE_CL); + PACKAGE_FORMAT.usePackage(PACKAGE_EXT); + PACKAGE_XP.usePackage(PACKAGE_CL); + PACKAGE_PRECOMPILER.addNickname("PRE"); + PACKAGE_PRECOMPILER.usePackage(PACKAGE_CL); + PACKAGE_PRECOMPILER.usePackage(PACKAGE_EXT); + PACKAGE_PRECOMPILER.usePackage(PACKAGE_SYS); } // End-of-file marker. @@ -291,14 +284,9 @@ thread.backtrace(0)); return error(new StorageCondition("Stack overflow.")); } - catch (Go go) - { - throw go; - } - catch (Throw t) + catch (ControlTransfer c) { - return error(new ControlError("Attempt to throw to the nonexistent tag " + - t.tag.writeToString() + ".")); + throw c; } catch (Throwable t) { @@ -1209,16 +1197,8 @@ // Used by the compiler. public static final LispObject readObjectFromString(String s) { - try - { - return new StringInputStream(s).faslRead(true, NIL, false, - LispThread.currentThread()); - } - catch (Throwable t) - { - Debug.trace(t); - return null; - } + return new StringInputStream(s).faslRead(true, NIL, false, + LispThread.currentThread()); } public static final LispObject loadCompiledFunction(final String namestring) @@ -1321,19 +1301,10 @@ } } } - catch (VerifyError e) - { - return error(new LispError("Class verification failed: " + - e.getMessage())); - } catch (IOException e) { Debug.trace(e); } - catch (Throwable t) - { - Debug.trace(t); - } } return error(new LispError("Unable to load " + namestring)); } @@ -1342,74 +1313,76 @@ if (file != null && file.isFile()) { // The .cls file exists. - try - { - LispObject obj = loadCompiledFunction(new FileInputStream(file), - (int) file.length()); - // FIXME close stream! - if (obj != null) - return obj; - } - catch (VerifyError e) - { - return error(new LispError("Class verification failed: " + - e.getMessage())); - } - catch (Throwable t) - { - Debug.trace(t); - } + LispObject obj = null; + try { + obj = loadCompiledFunction(new FileInputStream(file), + (int) file.length()); + } + catch (FileNotFoundException e) { + return error(new LispError("Unable to load " + + pathname.writeToString() + ": Not found.")); + } + // FIXME close stream! + if (obj != null) + return obj; return error(new LispError("Unable to load " + pathname.writeToString())); } + LispObject loadTruename = Symbol.LOAD_TRUENAME.symbolValue(thread); + String zipFileName = ((Pathname)loadTruename).getNamestring(); + ZipFile zipFile = null; try { - LispObject loadTruename = Symbol.LOAD_TRUENAME.symbolValue(thread); - String zipFileName = ((Pathname)loadTruename).getNamestring(); - ZipFile zipFile = ZipCache.getZip(zipFileName); - try - { - ZipEntry entry = zipFile.getEntry(namestring); - if (entry != null) - { - LispObject obj = loadCompiledFunction(zipFile.getInputStream(entry), - (int) entry.getSize()); - if (obj != null) - return obj; - Debug.trace("Unable to load " + namestring); - return error(new LispError("Unable to load " + namestring)); - } - } - finally + zipFile = ZipCache.getZip(zipFileName); + ZipEntry entry = zipFile.getEntry(namestring); + if (entry != null) { - ZipCache.removeZip(zipFile.getName()); + LispObject obj = null; + try { + obj = loadCompiledFunction(zipFile.getInputStream(entry), + (int) entry.getSize()); + } + catch (IOException ignore) { }; + if (obj != null) + return obj; + Debug.trace("Unable to load " + namestring); + return error(new LispError("Unable to load " + namestring)); } } - catch (Throwable t) + catch (IOException ignore) { + //ignore IOException from ZipCache.getZip() + } + finally { - Debug.trace(t); + try { + ZipCache.removeZip(zipFile.getName()); + } + catch (IOException ignore) { } // ignore } return error(new FileError("File not found: " + namestring, new Pathname(namestring))); } - public static final LispObject makeCompiledFunctionFromClass(Class c) - throws Exception { - if (c != null) { - LispObject obj = (LispObject)c.newInstance(); - return obj; - } else { - return null; + public static final LispObject makeCompiledFunctionFromClass(Class c) { + if (c != null) + try { + return (LispObject)c.newInstance(); + } + catch (InstantiationException ignore) { + // ignore } + catch (IllegalAccessException ignore) { + // ignore + } + return null; } private static final LispObject loadCompiledFunction(InputStream in, int size) { - try - { - byte[] bytes = new byte[size]; - int bytesRemaining = size; - int bytesRead = 0; + byte[] bytes = new byte[size]; + int bytesRemaining = size; + int bytesRead = 0; + try { while (bytesRemaining > 0) { int n = in.read(bytes, bytesRead, bytesRemaining); @@ -1419,29 +1392,27 @@ bytesRemaining -= n; } in.close(); - if (bytesRemaining > 0) - Debug.trace("bytesRemaining = " + bytesRemaining); + } + catch (IOException e) { + return null; // fixme: return an error? + } + if (bytesRemaining > 0) + Debug.trace("bytesRemaining = " + bytesRemaining); - return loadCompiledFunction(bytes); - } - catch (Throwable t) - { - Debug.trace(t); - } - return null; + return loadCompiledFunction(bytes); } - public static final LispObject loadCompiledFunction(byte[] bytes) throws Throwable { - return loadCompiledFunction(bytes, new JavaClassLoader()); + public static final LispObject loadCompiledFunction(byte[] bytes) { + return loadCompiledFunction(bytes, new JavaClassLoader()); } - public static final LispObject loadCompiledFunction(byte[] bytes, JavaClassLoader cl) throws Throwable { + public static final LispObject loadCompiledFunction(byte[] bytes, JavaClassLoader cl) { Class c = cl.loadClassFromByteArray(null, bytes, 0, bytes.length); - LispObject obj = makeCompiledFunctionFromClass(c); - if (obj instanceof Function) { - ((Function)obj).setClassBytes(bytes); - } - return obj; + LispObject obj = makeCompiledFunctionFromClass(c); + if (obj instanceof Function) { + ((Function)obj).setClassBytes(bytes); + } + return obj; } Modified: trunk/abcl/src/org/armedbear/lisp/LispStackFrame.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/LispStackFrame.java (original) +++ trunk/abcl/src/org/armedbear/lisp/LispStackFrame.java Fri Dec 18 16:50:54 2009 @@ -121,7 +121,7 @@ try { result = unreadableString(LISP_STACK_FRAME + " " + toLispString().getStringValue()); - } catch (Throwable t) { + } catch (Throwable t) { // error while printing stack Debug.trace("Serious printing error: "); Debug.trace(t); result = unreadableString(LISP_STACK_FRAME); @@ -192,7 +192,7 @@ String result; try { result = this.toLispList().writeToString(); - } catch (Throwable t) { + } catch (Throwable t) { // error while printing stack Debug.trace("Serious printing error: "); Debug.trace(t); result = unreadableString("LISP-STACK-FRAME"); Modified: trunk/abcl/src/org/armedbear/lisp/LispThread.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/LispThread.java (original) +++ trunk/abcl/src/org/armedbear/lisp/LispThread.java Fri Dec 18 16:50:54 2009 @@ -90,7 +90,7 @@ catch (ThreadDestroyed ignored) { // Might happen. } - catch (Throwable t) { + catch (Throwable t) { // any error: process thread interrupts if (isInterrupted()) { processThreadInterrupts(); } @@ -723,29 +723,24 @@ public void printBacktrace(int limit) { if (stack != null) { - try { - int count = 0; - Stream out = - checkCharacterOutputStream(Symbol.TRACE_OUTPUT.symbolValue()); - out._writeLine("Evaluation stack:"); - out._finishOutput(); + int count = 0; + Stream out = + checkCharacterOutputStream(Symbol.TRACE_OUTPUT.symbolValue()); + out._writeLine("Evaluation stack:"); + out._finishOutput(); + + StackFrame s = stack; + while (s != null) { + out._writeString(" "); + out._writeString(String.valueOf(count)); + out._writeString(": "); - StackFrame s = stack; - while (s != null) { - out._writeString(" "); - out._writeString(String.valueOf(count)); - out._writeString(": "); - - pprint(s.toLispList(), out.getCharPos(), out); - out.terpri(); - out._finishOutput(); - if (limit > 0 && ++count == limit) - break; - s = s.next; - } - } - catch (Throwable t) { - t.printStackTrace(); + pprint(s.toLispList(), out.getCharPos(), out); + out.terpri(); + out._finishOutput(); + if (limit > 0 && ++count == limit) + break; + s = s.next; } } } @@ -755,17 +750,12 @@ LispObject result = NIL; if (stack != null) { int count = 0; - try { - StackFrame s = stack; - while (s != null) { - result = result.push(s); - if (limit > 0 && ++count == limit) - break; - s = s.getNext(); - } - } - catch (Throwable t) { - t.printStackTrace(); + StackFrame s = stack; + while (s != null) { + result = result.push(s); + if (limit > 0 && ++count == limit) + break; + s = s.getNext(); } } return result.nreverse(); Modified: trunk/abcl/src/org/armedbear/lisp/Load.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Load.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Load.java Fri Dec 18 16:50:54 2009 @@ -179,7 +179,7 @@ try { zipfile = ZipCache.getZip(zipFileName); } - catch (Throwable t) { + catch (IOException e) { return error (new FileError("Zip file not found: " + filename, pathname)); } ZipEntry entry = zipfile.getEntry(zipEntryName); @@ -373,10 +373,8 @@ catch (ZipException e) { // Fall through. } - catch (Throwable t) { - Debug.trace(t); - in = null; - // Fall through. + catch (IOException e) { + // fall through } } if (in == null) { @@ -672,7 +670,7 @@ && bytes[2] == 0x03 && bytes[3] == 0x04); } - catch (Throwable t) { + catch (Throwable t) { // any error probably means 'no' return false; } finally { @@ -680,7 +678,7 @@ try { in.close(); } - catch (Throwable t) {} + catch (IOException e) {} // ignore exceptions } } } Modified: trunk/abcl/src/org/armedbear/lisp/MathFunctions.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/MathFunctions.java (original) +++ trunk/abcl/src/org/armedbear/lisp/MathFunctions.java Fri Dec 18 16:50:54 2009 @@ -268,23 +268,11 @@ im); } if (arg instanceof SingleFloat) { - try { - double d = Math.sinh(((SingleFloat)arg).value); - return new SingleFloat((float)d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.sinh(((SingleFloat)arg).value); + return new SingleFloat((float)d); } else if (arg instanceof DoubleFloat) { - try { - double d = Math.sinh(((DoubleFloat)arg).value); - return new DoubleFloat(d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.sinh(((DoubleFloat)arg).value); + return new DoubleFloat(d); } LispObject result = exp(arg); result = result.subtract(exp(arg.multiplyBy(Fixnum.MINUS_ONE))); @@ -318,23 +306,11 @@ im); } if (arg instanceof SingleFloat) { - try { - double d = Math.cosh(((SingleFloat)arg).value); - return new SingleFloat((float)d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.cosh(((SingleFloat)arg).value); + return new SingleFloat((float)d); } else if (arg instanceof DoubleFloat) { - try { - double d = Math.cosh(((DoubleFloat)arg).value); - return new DoubleFloat(d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.cosh(((DoubleFloat)arg).value); + return new DoubleFloat(d); } LispObject result = exp(arg); result = result.add(exp(arg.multiplyBy(Fixnum.MINUS_ONE))); @@ -356,23 +332,11 @@ public LispObject execute(LispObject arg) { if (arg instanceof SingleFloat) { - try { - double d = Math.tanh(((SingleFloat)arg).value); - return new SingleFloat((float)d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.tanh(((SingleFloat)arg).value); + return new SingleFloat((float)d); } else if (arg instanceof DoubleFloat) { - try { - double d = Math.tanh(((DoubleFloat)arg).value); - return new DoubleFloat(d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.tanh(((DoubleFloat)arg).value); + return new DoubleFloat(d); } return sinh(arg).divideBy(cosh(arg)); } @@ -576,19 +540,13 @@ { if (number.realp() && !number.minusp() && base.isEqualTo(Fixnum.getInstance(10))) { - try { - double d = - Math.log10(DoubleFloat.coerceToFloat(number).value); - if (number instanceof DoubleFloat - || base instanceof DoubleFloat) - return new DoubleFloat(d); - else - return new SingleFloat((float)d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = + Math.log10(DoubleFloat.coerceToFloat(number).value); + if (number instanceof DoubleFloat + || base instanceof DoubleFloat) + return new DoubleFloat(d); + else + return new SingleFloat((float)d); } return log(number).divideBy(log(base)); } Modified: trunk/abcl/src/org/armedbear/lisp/Package.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Package.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Package.java Fri Dec 18 16:50:54 2009 @@ -263,27 +263,18 @@ { Debug.assertTrue(symbol.getPackage() == this); Debug.assertTrue(symbol.getName().equals("NIL")); - try { - externalSymbols.put(symbol.name, symbol); - } - catch (Throwable t) { - Debug.trace(t); // FIXME - } + externalSymbols.put(symbol.name, symbol); } private synchronized Symbol addSymbol(SimpleString name, int hash) { Symbol symbol = new Symbol(name, hash, this); - try { - if (this == PACKAGE_KEYWORD) { - symbol.initializeConstant(symbol); - externalSymbols.put(name, symbol); - } else - internalSymbols.put(name, symbol); - } - catch (Throwable t) { - Debug.trace(t); // FIXME - } + if (this == PACKAGE_KEYWORD) { + symbol.initializeConstant(symbol); + externalSymbols.put(name, symbol); + } else + internalSymbols.put(name, symbol); + return symbol; } @@ -318,18 +309,13 @@ return symbol; // Look in external symbols of used packages. if (useList instanceof Cons) { - try { - LispObject usedPackages = useList; - while (usedPackages != NIL) { - Package pkg = (Package) usedPackages.car(); - symbol = pkg.findExternalSymbol(symbolName, hash); - if (symbol != null) - return symbol; - usedPackages = usedPackages.cdr(); - } - } - catch (Throwable t) { - Debug.trace(t); + LispObject usedPackages = useList; + while (usedPackages != NIL) { + Package pkg = (Package) usedPackages.car(); + symbol = pkg.findExternalSymbol(symbolName, hash); + if (symbol != null) + return symbol; + usedPackages = usedPackages.cdr(); } } // Not found. @@ -349,18 +335,13 @@ return (Symbol) thread.setValues(symbol, Keyword.INTERNAL); // Look in external symbols of used packages. if (useList instanceof Cons) { - try { - LispObject usedPackages = useList; - while (usedPackages != NIL) { - Package pkg = (Package) usedPackages.car(); - symbol = pkg.findExternalSymbol(s, hash); - if (symbol != null) - return (Symbol) thread.setValues(symbol, Keyword.INHERITED); - usedPackages = usedPackages.cdr(); - } - } - catch (Throwable t) { - Debug.trace(t); + LispObject usedPackages = useList; + while (usedPackages != NIL) { + Package pkg = (Package) usedPackages.car(); + symbol = pkg.findExternalSymbol(s, hash); + if (symbol != null) + return (Symbol) thread.setValues(symbol, Keyword.INHERITED); + usedPackages = usedPackages.cdr(); } } // Not found. @@ -756,21 +737,16 @@ list.addAll(internalSymbols.getSymbols()); list.addAll(externalSymbols.getSymbols()); if (useList instanceof Cons) { - try { - LispObject usedPackages = useList; - while (usedPackages != NIL) { - Package pkg = (Package) usedPackages.car(); - List symbols = pkg.externalSymbols.getSymbols(); - for (int i = 0; i < symbols.size(); i++) { - Symbol symbol = (Symbol) symbols.get(i); - if (shadowingSymbols == null || shadowingSymbols.get(symbol.getName()) == null) - list.add(symbol); - } - usedPackages = usedPackages.cdr(); + LispObject usedPackages = useList; + while (usedPackages != NIL) { + Package pkg = (Package) usedPackages.car(); + List symbols = pkg.externalSymbols.getSymbols(); + for (int i = 0; i < symbols.size(); i++) { + Symbol symbol = (Symbol) symbols.get(i); + if (shadowingSymbols == null || shadowingSymbols.get(symbol.getName()) == null) + list.add(symbol); } - } - catch (Throwable t) { - Debug.trace(t); + usedPackages = usedPackages.cdr(); } } return list; @@ -798,24 +774,19 @@ { LispObject list = NIL; if (useList instanceof Cons) { - try { - LispObject usedPackages = useList; - while (usedPackages != NIL) { - Package pkg = (Package) usedPackages.car(); - List externals = pkg.getExternalSymbols(); - for (int i = externals.size(); i-- > 0;) { - Symbol symbol = (Symbol) externals.get(i); - if (shadowingSymbols != null && shadowingSymbols.get(symbol.getName()) != null) - continue; - if (externalSymbols.get(symbol.name) == symbol) - continue; - list = new Cons(symbol, list); - } - usedPackages = usedPackages.cdr(); + LispObject usedPackages = useList; + while (usedPackages != NIL) { + Package pkg = (Package) usedPackages.car(); + List externals = pkg.getExternalSymbols(); + for (int i = externals.size(); i-- > 0;) { + Symbol symbol = (Symbol) externals.get(i); + if (shadowingSymbols != null && shadowingSymbols.get(symbol.getName()) != null) + continue; + if (externalSymbols.get(symbol.name) == symbol) + continue; + list = new Cons(symbol, list); } - } - catch (Throwable t) { - Debug.trace(t); + usedPackages = usedPackages.cdr(); } } return list; Modified: trunk/abcl/src/org/armedbear/lisp/Pathname.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Pathname.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Pathname.java Fri Dec 18 16:50:54 2009 @@ -497,11 +497,7 @@ boolean printEscape = (Symbol.PRINT_ESCAPE.symbolValue(thread) != NIL); boolean useNamestring; String s = null; - try { - s = getNamestring(); - } - // ### FIXME exception - catch (Throwable t) {} + s = getNamestring(); if (s != null) { useNamestring = true; if (printReadably) { @@ -1388,12 +1384,7 @@ }; static { - try { - LispObject obj = Symbol.DEFAULT_PATHNAME_DEFAULTS.getSymbolValue(); - Symbol.DEFAULT_PATHNAME_DEFAULTS.setSymbolValue(coerceToPathname(obj)); - } - catch (Throwable t) { - Debug.trace(t); - } + LispObject obj = Symbol.DEFAULT_PATHNAME_DEFAULTS.getSymbolValue(); + Symbol.DEFAULT_PATHNAME_DEFAULTS.setSymbolValue(coerceToPathname(obj)); } } Modified: trunk/abcl/src/org/armedbear/lisp/PrintNotReadable.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/PrintNotReadable.java (original) +++ trunk/abcl/src/org/armedbear/lisp/PrintNotReadable.java Fri Dec 18 16:50:54 2009 @@ -83,12 +83,7 @@ { FastStringBuffer sb = new FastStringBuffer(); LispObject object = UNBOUND_VALUE; - try { - object = getInstanceSlotValue(Symbol.OBJECT); - } - catch (Throwable t) { - Debug.trace(t); - } + object = getInstanceSlotValue(Symbol.OBJECT); if (object != UNBOUND_VALUE) { final LispThread thread = LispThread.currentThread(); final SpecialBindingsMark mark = thread.markSpecialBindings(); @@ -97,9 +92,6 @@ try { sb.append(object.writeToString()); } - catch (Throwable t) { - sb.append("Object"); - } finally { thread.resetSpecialBindings(mark); } Modified: trunk/abcl/src/org/armedbear/lisp/RandomState.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/RandomState.java (original) +++ trunk/abcl/src/org/armedbear/lisp/RandomState.java Fri Dec 18 16:50:54 2009 @@ -64,9 +64,9 @@ ObjectInputStream in = new ObjectInputStream(fileIn); random = (Random) in.readObject(); in.close(); - file.delete(); + file.delete(); // FIXME: file leak on exception } - catch (Throwable t) { + catch (Throwable t) { // ANY exception gets converted to a lisp error error(new LispError("Unable to copy random state.")); } } Modified: trunk/abcl/src/org/armedbear/lisp/Return.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Return.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Return.java Fri Dec 18 16:50:54 2009 @@ -71,15 +71,9 @@ @Override public LispObject getCondition() { - try { - FastStringBuffer sb = new FastStringBuffer("No block named "); - sb.append(tag.writeToString()); - sb.append(" is currently visible."); - return new ControlError(sb.toString()); - } - catch (Throwable t) { - Debug.trace(t); - return new Condition(); - } + FastStringBuffer sb = new FastStringBuffer("No block named "); + sb.append(tag.writeToString()); + sb.append(" is currently visible."); + return new ControlError(sb.toString()); } } Modified: trunk/abcl/src/org/armedbear/lisp/RuntimeClass.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/RuntimeClass.java (original) +++ trunk/abcl/src/org/armedbear/lisp/RuntimeClass.java Fri Dec 18 16:50:54 2009 @@ -122,9 +122,6 @@ return error(new LispError("class could not be linked: " + e.getMessage())); } - catch (Throwable t) { - Debug.trace(t); - } return error( new LispError("unable to load ".concat(cn))); } Modified: trunk/abcl/src/org/armedbear/lisp/ShellCommand.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/ShellCommand.java (original) +++ trunk/abcl/src/org/armedbear/lisp/ShellCommand.java Fri Dec 18 16:50:54 2009 @@ -204,12 +204,7 @@ String s = read(); if (s == null) return; - try { - processOutput(s); - } - catch (Throwable t) { - Debug.trace(t); - } + processOutput(s); } } @@ -234,9 +229,6 @@ catch (InterruptedException e) { return null; } - catch (Throwable t) { - return null; - } return sb.toString(); } } Modified: trunk/abcl/src/org/armedbear/lisp/SimpleTypeError.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/SimpleTypeError.java (original) +++ trunk/abcl/src/org/armedbear/lisp/SimpleTypeError.java Fri Dec 18 16:50:54 2009 @@ -72,21 +72,17 @@ @Override public String getMessage() { - try { - LispObject formatControl = getFormatControl(); - if (formatControl != NIL) { - LispObject formatArguments = getFormatArguments(); - // (apply 'format (append '(nil format-control) format-arguments)) - LispObject result = - Primitives.APPLY.execute(Symbol.FORMAT, - Primitives.APPEND.execute(list(NIL, - formatControl), - formatArguments)); - return result.getStringValue(); - } - return super.getMessage(); + LispObject formatControl = getFormatControl(); + if (formatControl != NIL) { + LispObject formatArguments = getFormatArguments(); + // (apply 'format (append '(nil format-control) format-arguments)) + LispObject result = + Primitives.APPLY.execute(Symbol.FORMAT, + Primitives.APPEND.execute(list(NIL, + formatControl), + formatArguments)); + return result.getStringValue(); } - catch (Throwable t) {} - return null; + return super.getMessage(); } } Modified: trunk/abcl/src/org/armedbear/lisp/Site.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Site.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Site.java Fri Dec 18 16:50:54 2009 @@ -83,13 +83,8 @@ exportSpecial("*LISP-HOME*", PACKAGE_EXT, NIL); static { - try { - String s = Site.getLispHome(); - if (s != null) - _LISP_HOME_.setSymbolValue(new Pathname(s)); - } - catch (Throwable t) { - Debug.trace(t); - } + String s = Site.getLispHome(); + if (s != null) + _LISP_HOME_.setSymbolValue(new Pathname(s)); } } Modified: trunk/abcl/src/org/armedbear/lisp/SiteName.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/SiteName.java (original) +++ trunk/abcl/src/org/armedbear/lisp/SiteName.java Fri Dec 18 16:50:54 2009 @@ -36,18 +36,23 @@ import static org.armedbear.lisp.Lisp.*; import java.net.InetAddress; +import java.net.UnknownHostException; public final class SiteName { private static LispObject getHostName() { String hostName = null; + InetAddress addr; try { - InetAddress addr = InetAddress.getLocalHost(); - if (addr != null) - hostName = addr.getHostName(); + addr = InetAddress.getLocalHost(); } - catch (Throwable t) {} + catch (UnknownHostException e) { + addr = null; + } + if (addr != null) + hostName = addr.getHostName(); + return hostName != null ? new SimpleString(hostName) : NIL; } Modified: trunk/abcl/src/org/armedbear/lisp/SlimeInputStream.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/SlimeInputStream.java (original) +++ trunk/abcl/src/org/armedbear/lisp/SlimeInputStream.java Fri Dec 18 16:50:54 2009 @@ -96,13 +96,8 @@ protected int _readChar() { if (offset >= length) { - try { - ostream.finishOutput(); - s = LispThread.currentThread().execute(f).getStringValue(); - } - catch (Throwable t) { - return -1; - } + ostream.finishOutput(); + s = LispThread.currentThread().execute(f).getStringValue(); if (s.length() == 0) return -1; offset = 0; Modified: trunk/abcl/src/org/armedbear/lisp/SlotClass.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/SlotClass.java (original) +++ trunk/abcl/src/org/armedbear/lisp/SlotClass.java Fri Dec 18 16:50:54 2009 @@ -123,43 +123,39 @@ { if (isFinalized()) return; - try { - Debug.assertTrue(slotDefinitions == NIL); - LispObject cpl = getCPL(); - Debug.assertTrue(cpl != null); - Debug.assertTrue(cpl.listp()); - cpl = cpl.reverse(); - while (cpl != NIL) { - LispObject car = cpl.car(); - if (car instanceof StandardClass) { - StandardClass cls = (StandardClass) car; - LispObject defs = cls.getDirectSlotDefinitions(); - Debug.assertTrue(defs != null); - Debug.assertTrue(defs.listp()); - while (defs != NIL) { - slotDefinitions = slotDefinitions.push(defs.car()); - defs = defs.cdr(); - } + + Debug.assertTrue(slotDefinitions == NIL); + LispObject cpl = getCPL(); + Debug.assertTrue(cpl != null); + Debug.assertTrue(cpl.listp()); + cpl = cpl.reverse(); + while (cpl != NIL) { + LispObject car = cpl.car(); + if (car instanceof StandardClass) { + StandardClass cls = (StandardClass) car; + LispObject defs = cls.getDirectSlotDefinitions(); + Debug.assertTrue(defs != null); + Debug.assertTrue(defs.listp()); + while (defs != NIL) { + slotDefinitions = slotDefinitions.push(defs.car()); + defs = defs.cdr(); } - cpl = cpl.cdr(); } - slotDefinitions = slotDefinitions.nreverse(); - LispObject[] instanceSlotNames = new LispObject[slotDefinitions.length()]; - int i = 0; - LispObject tail = slotDefinitions; - while (tail != NIL) { - SlotDefinition slotDefinition = (SlotDefinition) tail.car(); - slotDefinition.setLocation(i); - instanceSlotNames[i++] = slotDefinition.getName(); - tail = tail.cdr(); - } - setClassLayout(new Layout(this, instanceSlotNames, NIL)); - setDefaultInitargs(computeDefaultInitargs()); - setFinalized(true); - } - catch (Throwable t) { - Debug.trace(t); + cpl = cpl.cdr(); } + slotDefinitions = slotDefinitions.nreverse(); + LispObject[] instanceSlotNames = new LispObject[slotDefinitions.length()]; + int i = 0; + LispObject tail = slotDefinitions; + while (tail != NIL) { + SlotDefinition slotDefinition = (SlotDefinition) tail.car(); + slotDefinition.setLocation(i); + instanceSlotNames[i++] = slotDefinition.getName(); + tail = tail.cdr(); + } + setClassLayout(new Layout(this, instanceSlotNames, NIL)); + setDefaultInitargs(computeDefaultInitargs()); + setFinalized(true); } // ### class-direct-slots Modified: trunk/abcl/src/org/armedbear/lisp/SlotDefinition.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/SlotDefinition.java (original) +++ trunk/abcl/src/org/armedbear/lisp/SlotDefinition.java Fri Dec 18 16:50:54 2009 @@ -47,41 +47,27 @@ public SlotDefinition(LispObject name, LispObject readers) { this(); - try - { - Debug.assertTrue(name instanceof Symbol); - slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name; - slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL; - slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = - new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())); - slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers; - slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; - } - catch (Throwable t) - { - Debug.trace(t); - } + Debug.assertTrue(name instanceof Symbol); + slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name; + slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL; + slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = + new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())); + slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers; + slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; } public SlotDefinition(LispObject name, LispObject readers, LispObject initForm) { this(); - try - { - Debug.assertTrue(name instanceof Symbol); - slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name; - slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL; - slots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = initForm; - slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = - new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())); - slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers; - slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; - } - catch (Throwable t) - { - Debug.trace(t); - } + Debug.assertTrue(name instanceof Symbol); + slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name; + slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL; + slots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = initForm; + slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = + new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())); + slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers; + slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; } public static SlotDefinition checkSlotDefination(LispObject obj) { Modified: trunk/abcl/src/org/armedbear/lisp/Symbol.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Symbol.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Symbol.java Fri Dec 18 16:50:54 2009 @@ -247,39 +247,23 @@ public final String getName() { - try - { - return name.getStringValue(); - } - catch (Throwable t) - { - Debug.trace(t); - return null; - } + return name.getStringValue(); } public final String getQualifiedName() { - try - { - final String n = name.getStringValue(); - if (pkg == NIL) - return("#:".concat(n)); - if (pkg == PACKAGE_KEYWORD) - return ":".concat(n); - FastStringBuffer sb = new FastStringBuffer(((Package)pkg).getName()); - if (((Package)pkg).findExternalSymbol(name) != null) - sb.append(':'); - else - sb.append("::"); - sb.append(n); - return sb.toString(); - } - catch (Throwable t) - { - Debug.trace(t); - return null; - } + final String n = name.getStringValue(); + if (pkg == NIL) + return("#:".concat(n)); + if (pkg == PACKAGE_KEYWORD) + return ":".concat(n); + FastStringBuffer sb = new FastStringBuffer(((Package)pkg).getName()); + if (((Package)pkg).findExternalSymbol(name) != null) + sb.append(':'); + else + sb.append("::"); + sb.append(n); + return sb.toString(); } /** Gets the value associated with the symbol Modified: trunk/abcl/src/org/armedbear/lisp/SymbolHashTable.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/SymbolHashTable.java (original) +++ trunk/abcl/src/org/armedbear/lisp/SymbolHashTable.java Fri Dec 18 16:50:54 2009 @@ -65,13 +65,8 @@ { HashEntry e = buckets[key.sxhash() & mask]; while (e != null) { - try { - if (key.equal(e.symbol.name)) - return e.symbol; // Return the symbol. - } - catch (Throwable t) { - Debug.trace(t); // Shouldn't happen. - } + if (key.equal(e.symbol.name)) + return e.symbol; // Return the symbol. e = e.next; } return null; @@ -81,13 +76,8 @@ { HashEntry e = buckets[hash & mask]; while (e != null) { - try { - if (key.equal(e.symbol.name)) - return e.symbol; // Return the symbol. - } - catch (Throwable t) { - Debug.trace(t); // Shouldn't happen. - } + if (key.equal(e.symbol.name)) + return e.symbol; // Return the symbol. e = e.next; } return null; @@ -98,19 +88,14 @@ int index = key.sxhash() & mask; HashEntry e = buckets[index]; while (e != null) { - try { - if (key.equal(e.symbol.name)) { - if (e.symbol != symbol) { - Debug.trace("replacing existing key for " + key.getStringValue() + - " in package " + e.symbol.getPackage().writeToString()); - Thread.dumpStack(); - e.symbol = symbol; - } - return; + if (key.equal(e.symbol.name)) { + if (e.symbol != symbol) { + Debug.trace("replacing existing key for " + key.getStringValue() + + " in package " + e.symbol.getPackage().writeToString()); + Thread.dumpStack(); + e.symbol = symbol; } - } - catch (Throwable t) { - Debug.trace(t); // FIXME + return; } e = e.next; } @@ -130,18 +115,13 @@ int index = symbol.sxhash() & mask; HashEntry e = buckets[index]; while (e != null) { - try { - if (symbol.name.equal(e.symbol.name)) { - if (e.symbol != symbol) { - Debug.trace("replacing existing key for " + symbol.getName()); - Thread.dumpStack(); - e.symbol = symbol; // Replace existing key. - } - return; + if (symbol.name.equal(e.symbol.name)) { + if (e.symbol != symbol) { + Debug.trace("replacing existing key for " + symbol.getName()); + Thread.dumpStack(); + e.symbol = symbol; // Replace existing key. } - } - catch (Throwable t) { - Debug.trace(t); // FIXME + return; } e = e.next; } @@ -164,18 +144,13 @@ HashEntry e = buckets[index]; HashEntry last = null; while (e != null) { - try { - if (key.equal(e.symbol.name)) { - if (last == null) - buckets[index] = e.next; - else - last.next = e.next; - --count; - return e.symbol; // The key is the value! - } - } - catch (Throwable t) { - Debug.trace(t); // FIXME + if (key.equal(e.symbol.name)) { + if (last == null) + buckets[index] = e.next; + else + last.next = e.next; + --count; + return e.symbol; // The key is the value! } last = e; e = e.next; Modified: trunk/abcl/src/org/armedbear/lisp/Throw.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Throw.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Throw.java Fri Dec 18 16:50:54 2009 @@ -56,13 +56,7 @@ @Override public LispObject getCondition() { - try { - return new ControlError("Attempt to throw to the nonexistent tag " + - tag.writeToString() + "."); - } - catch (Throwable t) { - Debug.trace(t); - return new Condition(); - } + return new ControlError("Attempt to throw to the nonexistent tag " + + tag.writeToString() + "."); } } Modified: trunk/abcl/src/org/armedbear/lisp/TypeError.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/TypeError.java (original) +++ trunk/abcl/src/org/armedbear/lisp/TypeError.java Fri Dec 18 16:50:54 2009 @@ -129,48 +129,37 @@ @Override public String getMessage() { - // FIXME + final LispThread thread = LispThread.currentThread(); + final SpecialBindingsMark mark = thread.markSpecialBindings(); + thread.bindSpecial(Symbol.PRINT_ESCAPE, T); try { - final LispThread thread = LispThread.currentThread(); - final SpecialBindingsMark mark = thread.markSpecialBindings(); - thread.bindSpecial(Symbol.PRINT_ESCAPE, T); - try { - String s = super.getMessage(); - if (s != null) - return s; - final LispObject datum = getDatum(); - final LispObject expectedType = getExpectedType(); - FastStringBuffer sb = new FastStringBuffer(); - String name = datum != null ? datum.writeToString() : null; - String type = null; - if (expectedType != null) - type = expectedType.writeToString(); - if (type != null) { - if (name != null) { - sb.append("The value "); - sb.append(name); - } else - sb.append("Value"); - sb.append(" is not of type "); - sb.append(type); - } else if (name != null) { - sb.append("Wrong type: "); + String s = super.getMessage(); + if (s != null) + return s; + final LispObject datum = getDatum(); + final LispObject expectedType = getExpectedType(); + FastStringBuffer sb = new FastStringBuffer(); + String name = datum != null ? datum.writeToString() : null; + String type = null; + if (expectedType != null) + type = expectedType.writeToString(); + if (type != null) { + if (name != null) { + sb.append("The value "); sb.append(name); - } - sb.append('.'); - return sb.toString(); - } - catch (Throwable t) { - // FIXME - Debug.trace(t); - return toString(); - } - finally { - thread.resetSpecialBindings(mark); + } else + sb.append("Value"); + sb.append(" is not of type "); + sb.append(type); + } else if (name != null) { + sb.append("Wrong type: "); + sb.append(name); } + sb.append('.'); + return sb.toString(); } - catch (Throwable t) { - return toString(); + finally { + thread.resetSpecialBindings(mark); } } Modified: trunk/abcl/src/org/armedbear/lisp/UnboundVariable.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/UnboundVariable.java (original) +++ trunk/abcl/src/org/armedbear/lisp/UnboundVariable.java Fri Dec 18 16:50:54 2009 @@ -54,12 +54,9 @@ final SpecialBindingsMark mark = thread.markSpecialBindings(); thread.bindSpecial(Symbol.PRINT_ESCAPE, T); StringBuffer sb = new StringBuffer("The variable "); - // FIXME - try - { + try { sb.append(getCellName().writeToString()); - } - catch (Throwable t) {} + } finally { thread.resetSpecialBindings(mark); } Modified: trunk/abcl/src/org/armedbear/lisp/WrongNumberOfArgumentsException.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/WrongNumberOfArgumentsException.java (original) +++ trunk/abcl/src/org/armedbear/lisp/WrongNumberOfArgumentsException.java Fri Dec 18 16:50:54 2009 @@ -58,12 +58,7 @@ LispObject lambdaName = operator.getLambdaName(); if (lambdaName != null && lambdaName != NIL) { sb.append(" for "); - try { - sb.append(operator.getLambdaName().writeToString()); - } - catch (Throwable t) { - Debug.trace(t); - } + sb.append(operator.getLambdaName().writeToString()); } sb.append('.'); return sb.toString(); From ehuelsmann at common-lisp.net Fri Dec 18 22:12:24 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Fri, 18 Dec 2009 17:12:24 -0500 Subject: [armedbear-cvs] r12299 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Fri Dec 18 17:12:22 2009 New Revision: 12299 Log: Annotate some remaining "catch (Throwable" occurrences. While at it: fix handling of ControlTransfer exceptions in invocation of code which itself *could* invoke lisp code again. Modified: trunk/abcl/src/org/armedbear/lisp/Java.java Modified: trunk/abcl/src/org/armedbear/lisp/Java.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Java.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Java.java Fri Dec 18 17:12:22 2009 @@ -215,7 +215,7 @@ catch (IllegalArgumentException e) { error(new LispError("illegal argument")); } - catch (Throwable t) { + catch (Throwable t) { // no code -> no ControlTransfer error(new LispError(getMessage(t))); } // Not reached. @@ -282,7 +282,7 @@ catch (ControlTransfer e) { throw e; } - catch (Throwable t) { + catch (Throwable t) { // ControlTransfer addressed above error(new LispError(getMessage(t))); } // Not reached. @@ -340,7 +340,7 @@ catch (ControlTransfer e) { throw e; } - catch (Throwable t) { + catch (Throwable t) { // ControlTransfer addressed above error(new LispError(getMessage(t))); } // Not reached. @@ -393,7 +393,10 @@ Object result = m.invoke(null, methodArgs); return JavaObject.getInstance(result, translate); } - catch (Throwable t) { + catch (ControlTransfer c) { + throw c; + } + catch (Throwable t) { // ControlTransfer handled above if (t instanceof InvocationTargetException) t = t.getCause(); Symbol condition = getCondition(t.getClass()); @@ -458,7 +461,10 @@ } return JavaObject.getInstance(constructor.newInstance(initargs)); } - catch (Throwable t) { + catch (ControlTransfer c) { + throw c; + } + catch (Throwable t) { // ControlTransfer handled above if (t instanceof InvocationTargetException) t = t.getCause(); Symbol condition = getCondition(t.getClass()); @@ -494,7 +500,7 @@ dimensions[i-1] = ((Integer)args[i].javaInstance()).intValue(); return JavaObject.getInstance(Array.newInstance(c, dimensions)); } - catch (Throwable t) { + catch (Throwable t) { // no code -> no ControlTransfer error(new JavaException(t)); } // Not reached. @@ -514,7 +520,7 @@ return JavaObject.getInstance(Array.get(a, ((Integer)args[args.length - 1].javaInstance()).intValue()), translate); } - catch (Throwable t) { + catch (Throwable t) { // no code -> no ControlTransfer Symbol condition = getCondition(t.getClass()); if (condition == null) error(new JavaException(t)); @@ -572,7 +578,7 @@ Array.set(a, ((Integer)args[args.length - 1].javaInstance()).intValue(), v.javaInstance()); return v; } - catch (Throwable t) { + catch (Throwable t) { // no code -> no ControlTransfer Symbol condition = getCondition(t.getClass()); if (condition == null) error(new JavaException(t)); @@ -653,7 +659,7 @@ catch (ControlTransfer t) { throw t; } - catch (Throwable t) { + catch (Throwable t) { // ControlTransfer handled above if (t instanceof InvocationTargetException) t = t.getCause(); Symbol condition = getCondition(t.getClass()); From mevenson at common-lisp.net Tue Dec 22 15:06:55 2009 From: mevenson at common-lisp.net (Mark Evenson) Date: Tue, 22 Dec 2009 10:06:55 -0500 Subject: [armedbear-cvs] r12300 - trunk/abcl Message-ID: Author: mevenson Date: Tue Dec 22 10:06:50 2009 New Revision: 12300 Log: Fix typo in ASDF dependencies for ABCL-TEST-LISP. Modified: trunk/abcl/abcl.asd Modified: trunk/abcl/abcl.asd ============================================================================== --- trunk/abcl/abcl.asd (original) +++ trunk/abcl/abcl.asd Tue Dec 22 10:06:50 2009 @@ -49,7 +49,7 @@ (defsystem :abcl-test-lisp :version "1.0" :components ((:module abcl-rt :pathname "test/lisp/abcl/" :serial t :components ((:file "rt-package") (:file "rt"))) - (:module package :depends (abcl-rt) + (:module package :depends-on (abcl-rt) :pathname "test/lisp/abcl/" :components ((:file "package"))))) From mevenson at common-lisp.net Tue Dec 22 16:07:11 2009 From: mevenson at common-lisp.net (Mark Evenson) Date: Tue, 22 Dec 2009 11:07:11 -0500 Subject: [armedbear-cvs] r12301 - in trunk/abcl: . test/lisp/abcl Message-ID: Author: mevenson Date: Tue Dec 22 11:07:07 2009 New Revision: 12301 Log: Loading ABCL tests improved; renamed loading jar-file tests. ASDF loading of ABCL-TEST-LISP improved to not need :FORCE argument. JAR-FILE tests included as part of ABCL-TEST-LISP. Added: trunk/abcl/test/lisp/abcl/jar-file.lisp - copied, changed from r12300, /trunk/abcl/test/lisp/abcl/load.lisp Removed: trunk/abcl/test/lisp/abcl/load.lisp Modified: trunk/abcl/abcl.asd trunk/abcl/test/lisp/abcl/package.lisp Modified: trunk/abcl/abcl.asd ============================================================================== --- trunk/abcl/abcl.asd (original) +++ trunk/abcl/abcl.asd Tue Dec 22 11:07:07 2009 @@ -7,7 +7,7 @@ (in-package :abcl-asdf) ;;; Wrapper for all ABCL ASDF definitions. -(defsystem :abcl :version "0.3.0") +(defsystem :abcl :version "0.3.1") (defmethod perform :after ((o load-op) (c (eql (find-system :abcl)))) ;;; Additional test suite loads would go here. @@ -19,15 +19,18 @@ ;;; A collection of test suites for ABCL. (defsystem :test-abcl - :version "0.3" + :version "0.3.1" :depends-on (:ansi-compiled #+nil :abcl-tests)) -(defmethod perform :after ((o load-op) (c (eql (find-system :test-abcl)))) +(defmethod perform :after ((o load-op) (c (eql (find-system :abcl)))) #+nil (asdf:oos 'asdf:test-op :cl-bench :force t) (operate 'load-op :abcl-test-lisp :force t) (operate 'load-op :ansi-compiled :force t) (operate 'load-op :ansi-interpreted :force t)) +(defmethod perform :before ((o load-op) (c t)) + (warn "ASDF load-op class is ~A" c)) + (defsystem :ansi-test :version "1.0" :components ;;; GCL ANSI test suite. ((:module ansi-tests :pathname "test/lisp/ansi/" :components @@ -36,27 +39,35 @@ (defsystem :ansi-interpreted :version "1.0" :depends-on (ansi-test)) (defmethod perform ((o test-op) (c (eql (find-system :ansi-interpreted)))) "Invoke tests with: (asdf:oos 'asdf:test-op :ansi-interpreted :force t)." - ;;; FIXME needs ASDF:OOS to be invoked with :FORCE t (funcall (intern (symbol-name 'run) :abcl.test.ansi) :compile-tests nil)) +(defmethod perform :before ((o test-op) (c (eql (find-system + :ansi-interpreted)))) + (operate 'load-op :ansi-interpreted :force t)) (defsystem :ansi-compiled :version "1.0" :depends-on (ansi-test)) (defmethod perform ((o test-op) (c (eql (find-system :ansi-compiled)))) "Invoke tests with: (asdf:oos 'asdf:test-op :abcl-compiled :force t)." (funcall (intern (symbol-name 'run) :abcl.test.ansi) :compile-tests t)) +(defmethod perform :before ((o test-op) (c (eql (find-system + :ansi-compiled)))) + (operate 'load-op :ansi-compiled :force t)) -(defsystem :abcl-test-lisp :version "1.0" :components +(defsystem :abcl-test-lisp :version "1.1" :components ((:module abcl-rt :pathname "test/lisp/abcl/" :serial t :components ((:file "rt-package") (:file "rt"))) (:module package :depends-on (abcl-rt) :pathname "test/lisp/abcl/" :components ((:file "package"))))) +(defmethod perform :before ((o test-op) (c (eql (find-system + :abcl-test-lisp)))) + (operate 'load-op :abcl-test-lisp :force t)) + (defmethod perform ((o test-op) (c (eql (find-system 'abcl-test-lisp)))) - "Invoke tests with: (asdf:oos 'asdf:test-op :abcl-test-lisp :force t)." - ;;; FIXME needs ASDF:OOS to be invoked with :FORCE t - (funcall (intern (symbol-name 'run) :abcl.test.lisp))) + "Invoke tests with (asdf:oos 'asdf:test-op :abcl-test-lisp)." + (funcall (intern (symbol-name 'run) :abcl-test))) ;;; Build ABCL from a Lisp. ;;; aka the "Lisp-hosted build system" Copied: trunk/abcl/test/lisp/abcl/jar-file.lisp (from r12300, /trunk/abcl/test/lisp/abcl/load.lisp) ============================================================================== --- /trunk/abcl/test/lisp/abcl/load.lisp (original) +++ trunk/abcl/test/lisp/abcl/jar-file.lisp Tue Dec 22 11:07:07 2009 @@ -5,55 +5,79 @@ (defun load-init () (let* ((*default-pathname-defaults* *this-directory*) (asdf::*verbose-out* *standard-output*) - (package-command (format nil "sh ~A" (merge-pathnames "package-load.sh")))) + (package-command (format nil "cd ~A; sh ~A" + *this-directory* + (merge-pathnames "package-load.sh")))) (compile-file "foo.lisp") (compile-file "bar.lisp") (compile-file "eek.lisp") - (asdf:run-shell-command package-command))) + (asdf:run-shell-command package-command)) + (setf *jar-file-init* t)) -(load-init) +(defvar *jar-file-init* nil) -(deftest load.1 - (let ((*default-pathname-defaults* *this-directory*)) - (load "foo")) + +(defmacro with-jar-file-init (&rest body) + `(let ((*default-pathname-defaults* *this-directory*)) + (progn + (unless *jar-file-init* + (load-init)) + , at body))) + + +(deftest jar-file-load.1 + (with-jar-file-init + (load "foo")) t) -(deftest load.2 - (let ((*default-pathname-defaults* *this-directory*)) +(deftest jar-file-load.2 + (with-jar-file-init (load "foo.lisp")) t) -(deftest load.3 - (let ((*default-pathname-defaults* *this-directory*)) +(deftest jar-file-load.3 + (with-jar-file-init (load "foo.abcl")) t) -(deftest load.4 - (let ((*default-pathname-defaults* *this-directory*)) +(deftest jar-file-load.4 + (with-jar-file-init (load "jar:file:baz.jar!/foo")) t) -(deftest load.6 - (let ((*default-pathname-defaults* *this-directory*)) +(deftest jar-file-load.6 + (with-jar-file-init (load "jar:file:baz.jar!/bar")) t) -(deftest load.7 - (let ((*default-pathname-defaults* *this-directory*)) +(deftest jar-file-load.7 + (with-jar-file-init (load "jar:file:baz.jar!/bar.abcl")) t) -(deftest load.8 - (let ((*default-pathname-defaults* *this-directory*)) +(deftest jar-file-load.8 + (with-jar-file-init (load "jar:file:baz.jar!/eek")) t) -(deftest load.9 - (let ((*default-pathname-defaults* *this-directory*)) +(deftest jar-file-load.9 + (with-jar-file-init (load "jar:file:baz.jar!/eek.lisp")) t) +(deftest jar-file-probe-file.1 + (with-jar-file-init + (probe-file "jar:file:baz.jar!/eek.lisp")) + #p"jar:file:baz.jar!/eek.lisp") + + +(deftest jar-file-merge-pathnames.1 + (merge-pathnames + "!/foo" #p"jar:file:baz.jar") + #p"jar:file:baz.jar!/foo") + + Modified: trunk/abcl/test/lisp/abcl/package.lisp ============================================================================== --- trunk/abcl/test/lisp/abcl/package.lisp (original) +++ trunk/abcl/test/lisp/abcl/package.lisp Tue Dec 22 11:07:07 2009 @@ -23,6 +23,9 @@ (load "math-tests.lisp") (load "misc-tests.lisp") + (when (find :unix *features*) + (load "jar-file.lisp")) + (do-tests))) \ No newline at end of file From astalla at common-lisp.net Tue Dec 22 18:48:57 2009 From: astalla at common-lisp.net (Alessio Stalla) Date: Tue, 22 Dec 2009 13:48:57 -0500 Subject: [armedbear-cvs] r12302 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: astalla Date: Tue Dec 22 13:48:55 2009 New Revision: 12302 Log: Applied Yoshinori Tahara's patch that allows jcall to invoke the correct method (based on argument types) if the method name is passed instead of the method metaobject. Modified: trunk/abcl/src/org/armedbear/lisp/Java.java Modified: trunk/abcl/src/org/armedbear/lisp/Java.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Java.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Java.java Tue Dec 22 13:48:55 2009 @@ -640,8 +640,7 @@ if (methodArg instanceof AbstractString) { String methodName = methodArg.getStringValue(); Class c = instance.getClass(); - // FIXME Use the actual args, not just the count! - method = findMethod(c, methodName, args.length - 2); + method = findMethod(c, methodName, args); } else method = (Method) JavaObject.getObject(methodArg); Class[] argTypes = (Class[])method.getParameterTypes(); @@ -677,18 +676,100 @@ return null; } - // FIXME This just returns the first matching method that it finds. Allegro - // signals a continuable error if there are multiple matching methods. - private static Method findMethod(Class c, String methodName, int argCount) - { + private static Method findMethod(Class c, String methodName, LispObject[] args) throws NoSuchMethodException { + int argCount = args.length - 2; + Object[] javaArgs = new Object[argCount]; + for (int i = 0; i < argCount; ++i) { + Object x = args[i + 2]; + if (x == NIL) { + javaArgs[i] = null; + } else { + javaArgs[i] = ((LispObject) x).javaInstance(); + } + } Method[] methods = c.getMethods(); + Method result = null; for (int i = methods.length; i-- > 0;) { Method method = methods[i]; - if (method.getName().equals(methodName)) - if (method.getParameterTypes().length == argCount) - return method; + if (!method.getName().equals(methodName)) { + continue; + } + if (method.getParameterTypes().length != argCount) { + continue; + } + Class[] methodTypes = (Class[]) method.getParameterTypes(); + if (!isApplicableMethod(methodTypes, javaArgs)) { + continue; + } + if (result == null || isMoreSpecialized(method, result)) { + result = method; + } + } + if (result == null) { + throw new NoSuchMethodException(methodName); + } + return result; + } + + private static boolean isApplicableMethod(Class[] methodTypes, + Object[] args) { + for (int i = 0; i < methodTypes.length; ++i) { + Class methodType = methodTypes[i]; + Object arg = args[i]; + if (methodType.isPrimitive()) { + Class x = getBoxedClass(methodType); + if (!x.isInstance(arg)) { + return false; + } + } else if (arg != null && !methodType.isInstance(arg)) { + return false; + } + } + return true; + } + + private static boolean isMoreSpecialized(Method x, Method y) { + Class[] xtypes = x.getParameterTypes(); + Class[] ytypes = y.getParameterTypes(); + for (int i = 0; i < xtypes.length; ++i) { + Class xtype = xtypes[i]; + if (xtype.isPrimitive()) { + xtype = getBoxedClass(xtype); + } + Class ytype = ytypes[i]; + if (ytype.isPrimitive()) { + ytype = getBoxedClass(ytype); + } + if (xtype.equals(ytype)) { + continue; + } + if (ytype.isAssignableFrom(xtype)) { + return true; + } + } + return false; + } + + private static Class getBoxedClass(Class clazz) { + if (clazz.equals(int.class)) { + return Integer.class; + } else if (clazz.equals(boolean.class)) { + return Boolean.class; + } else if (clazz.equals(byte.class)) { + return Byte.class; + } else if (clazz.equals(char.class)) { + return Character.class; + } else if (clazz.equals(long.class)) { + return Long.class; + } else if (clazz.equals(float.class)) { + return Float.class; + } else if (clazz.equals(double.class)) { + return Double.class; + } else if (clazz.equals(short.class)) { + return Short.class; + } else { // if (methodType.equals(void.class)) + return Void.class; } - return null; } // ### make-immediate-object object &optional type From astalla at common-lisp.net Wed Dec 23 20:54:00 2009 From: astalla at common-lisp.net (Alessio Stalla) Date: Wed, 23 Dec 2009 15:54:00 -0500 Subject: [armedbear-cvs] r12303 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: astalla Date: Wed Dec 23 15:53:57 2009 New Revision: 12303 Log: Extended the new smart behavior of jcall to jnew: (jnew class-name args) finds the most specific constructor and calls it. Modified: trunk/abcl/src/org/armedbear/lisp/Java.java Modified: trunk/abcl/src/org/armedbear/lisp/Java.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Java.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Java.java Wed Dec 23 15:53:57 2009 @@ -448,7 +448,12 @@ error(new WrongNumberOfArgumentsException(this)); LispObject classRef = args[0]; try { - Constructor constructor = (Constructor) JavaObject.getObject(classRef); + Constructor constructor; + if(classRef instanceof AbstractString) { + constructor = findConstructor(javaClass(classRef), args); + } else { + constructor = (Constructor) JavaObject.getObject(classRef); + } Class[] argTypes = constructor.getParameterTypes(); Object[] initargs = new Object[args.length-1]; for (int i = 1; i < args.length; i++) { @@ -676,17 +681,27 @@ return null; } - private static Method findMethod(Class c, String methodName, LispObject[] args) throws NoSuchMethodException { - int argCount = args.length - 2; + private static Object[] translateMethodArguments(LispObject[] args) { + return translateMethodArguments(args, 0); + } + + private static Object[] translateMethodArguments(LispObject[] args, int offs) { + int argCount = args.length - offs; Object[] javaArgs = new Object[argCount]; for (int i = 0; i < argCount; ++i) { - Object x = args[i + 2]; + Object x = args[i + offs]; if (x == NIL) { javaArgs[i] = null; } else { javaArgs[i] = ((LispObject) x).javaInstance(); } } + return javaArgs; + } + + private static Method findMethod(Class c, String methodName, LispObject[] args) throws NoSuchMethodException { + int argCount = args.length - 2; + Object[] javaArgs = translateMethodArguments(args, 2); Method[] methods = c.getMethods(); Method result = null; for (int i = methods.length; i-- > 0;) { @@ -701,7 +716,7 @@ if (!isApplicableMethod(methodTypes, javaArgs)) { continue; } - if (result == null || isMoreSpecialized(method, result)) { + if (result == null || isMoreSpecialized(methodTypes, result.getParameterTypes())) { result = method; } } @@ -711,6 +726,30 @@ return result; } + private static Constructor findConstructor(Class c, LispObject[] args) throws NoSuchMethodException { + int argCount = args.length - 1; + Object[] javaArgs = translateMethodArguments(args, 1); + Constructor[] ctors = c.getConstructors(); + Constructor result = null; + for (int i = ctors.length; i-- > 0;) { + Constructor ctor = ctors[i]; + if (ctor.getParameterTypes().length != argCount) { + continue; + } + Class[] methodTypes = (Class[]) ctor.getParameterTypes(); + if (!isApplicableMethod(methodTypes, javaArgs)) { + continue; + } + if (result == null || isMoreSpecialized(methodTypes, result.getParameterTypes())) { + result = ctor; + } + } + if (result == null) { + throw new NoSuchMethodException(c.getSimpleName()); + } + return result; + } + private static boolean isApplicableMethod(Class[] methodTypes, Object[] args) { for (int i = 0; i < methodTypes.length; ++i) { @@ -728,9 +767,7 @@ return true; } - private static boolean isMoreSpecialized(Method x, Method y) { - Class[] xtypes = x.getParameterTypes(); - Class[] ytypes = y.getParameterTypes(); + private static boolean isMoreSpecialized(Class[] xtypes, Class[] ytypes) { for (int i = 0; i < xtypes.length; ++i) { Class xtype = xtypes[i]; if (xtype.isPrimitive()) { From astalla at common-lisp.net Wed Dec 23 21:04:41 2009 From: astalla at common-lisp.net (Alessio Stalla) Date: Wed, 23 Dec 2009 16:04:41 -0500 Subject: [armedbear-cvs] r12304 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: astalla Date: Wed Dec 23 16:04:40 2009 New Revision: 12304 Log: Refinement: better error message when an applicable constructor cannot be found. Modified: trunk/abcl/src/org/armedbear/lisp/Java.java Modified: trunk/abcl/src/org/armedbear/lisp/Java.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Java.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Java.java Wed Dec 23 16:04:40 2009 @@ -745,7 +745,23 @@ } } if (result == null) { - throw new NoSuchMethodException(c.getSimpleName()); + StringBuilder sb = new StringBuilder(c.getSimpleName()); + sb.append('('); + boolean first = true; + for(Object o : javaArgs) { + if(first) { + first = false; + } else { + sb.append(", "); + } + if(o != null) { + sb.append(o.getClass().getName()); + } else { + sb.append(""); + } + } + sb.append(')'); + throw new NoSuchMethodException(sb.toString()); } return result; } From ehuelsmann at common-lisp.net Fri Dec 25 14:27:38 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Fri, 25 Dec 2009 09:27:38 -0500 Subject: [armedbear-cvs] r12305 - in branches/fast-boot-preloading/abcl: examples/abcl/interface_implementation_in_lisp examples/abcl/java_exception_in_lisp examples/abcl/javacall_from_lisp examples/abcl/lispcall_from_java_simple examples/abcl/lispcall_from_java_with_params_and_return src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Fri Dec 25 09:27:34 2009 New Revision: 12305 Log: Backport r12298: review of "catch (Throwable". Note: Lisp.java redone because of merge conflicts. Modified: branches/fast-boot-preloading/abcl/examples/abcl/interface_implementation_in_lisp/Main.java branches/fast-boot-preloading/abcl/examples/abcl/java_exception_in_lisp/Main.java branches/fast-boot-preloading/abcl/examples/abcl/javacall_from_lisp/Main.java branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_simple/Main.java branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_simple/MainAlternative.java branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_with_params_and_return/Main.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AbstractArray.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AbstractVector.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/BuiltInClass.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Condition.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Go.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Interpreter.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Java.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/JavaClassLoader.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Layout.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Lisp.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/LispStackFrame.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/LispThread.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Load.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/MathFunctions.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Package.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Pathname.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/PrintNotReadable.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/RandomState.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Return.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/RuntimeClass.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/ShellCommand.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SimpleTypeError.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Site.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SiteName.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlimeInputStream.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlotClass.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlotDefinition.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Symbol.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SymbolHashTable.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Throw.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/TypeError.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/UnboundVariable.java branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/WrongNumberOfArgumentsException.java Modified: branches/fast-boot-preloading/abcl/examples/abcl/interface_implementation_in_lisp/Main.java ============================================================================== --- branches/fast-boot-preloading/abcl/examples/abcl/interface_implementation_in_lisp/Main.java (original) +++ branches/fast-boot-preloading/abcl/examples/abcl/interface_implementation_in_lisp/Main.java Fri Dec 25 09:27:34 2009 @@ -63,7 +63,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: branches/fast-boot-preloading/abcl/examples/abcl/java_exception_in_lisp/Main.java ============================================================================== --- branches/fast-boot-preloading/abcl/examples/abcl/java_exception_in_lisp/Main.java (original) +++ branches/fast-boot-preloading/abcl/examples/abcl/java_exception_in_lisp/Main.java Fri Dec 25 09:27:34 2009 @@ -52,7 +52,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: branches/fast-boot-preloading/abcl/examples/abcl/javacall_from_lisp/Main.java ============================================================================== --- branches/fast-boot-preloading/abcl/examples/abcl/javacall_from_lisp/Main.java (original) +++ branches/fast-boot-preloading/abcl/examples/abcl/javacall_from_lisp/Main.java Fri Dec 25 09:27:34 2009 @@ -52,7 +52,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_simple/Main.java ============================================================================== --- branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_simple/Main.java (original) +++ branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_simple/Main.java Fri Dec 25 09:27:34 2009 @@ -38,7 +38,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_simple/MainAlternative.java ============================================================================== --- branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_simple/MainAlternative.java (original) +++ branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_simple/MainAlternative.java Fri Dec 25 09:27:34 2009 @@ -47,7 +47,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_with_params_and_return/Main.java ============================================================================== --- branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_with_params_and_return/Main.java (original) +++ branches/fast-boot-preloading/abcl/examples/abcl/lispcall_from_java_with_params_and_return/Main.java Fri Dec 25 09:27:34 2009 @@ -65,7 +65,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AbstractArray.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AbstractArray.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AbstractArray.java Fri Dec 25 09:27:34 2009 @@ -294,23 +294,16 @@ @Override public int psxhash() { - try { - long result = 128387; // Chosen at random. - final int rank = getRank(); - int limit = rank < 4 ? rank : 4; - for (int i = 0; i < limit; i++) - result = mix(result, getDimension(i)); - final int length = getTotalSize(); - limit = length < 4 ? length : 4; - for (int i = 0; i < length; i++) - result = mix(result, AREF(i).psxhash()); - return (int) (result & 0x7fffffff); - } - catch (Throwable t) { - // Shouldn't happen. - Debug.trace(t); - return 0; - } + long result = 128387; // Chosen at random. + final int rank = getRank(); + int limit = rank < 4 ? rank : 4; + for (int i = 0; i < limit; i++) + result = mix(result, getDimension(i)); + final int length = getTotalSize(); + limit = length < 4 ? length : 4; + for (int i = 0; i < length; i++) + result = mix(result, AREF(i).psxhash()); + return (int) (result & 0x7fffffff); } /** Returns a newly allocated array or the current array with Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AbstractVector.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AbstractVector.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AbstractVector.java Fri Dec 25 09:27:34 2009 @@ -276,21 +276,12 @@ @Override public int psxhash() { - try - { - final int length = length(); - final int limit = length < 4 ? length : 4; - long result = 48920713; // Chosen at random. - for (int i = 0; i < limit; i++) - result = mix(result, AREF(i).psxhash()); - return (int) (result & 0x7fffffff); - } - catch (Throwable t) - { - // Shouldn't happen. - Debug.trace(t); - return 0; - } + final int length = length(); + final int limit = length < 4 ? length : 4; + long result = 48920713; // Chosen at random. + for (int i = 0; i < limit; i++) + result = mix(result, AREF(i).psxhash()); + return (int) (result & 0x7fffffff); } public abstract AbstractArray adjustArray(int size, Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/BuiltInClass.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/BuiltInClass.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/BuiltInClass.java Fri Dec 25 09:27:34 2009 @@ -291,13 +291,6 @@ static { - try - { - StandardClass.initializeStandardClasses(); - } - catch (Throwable t) - { - Debug.trace(t); - } + StandardClass.initializeStandardClasses(); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Condition.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Condition.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Condition.java Fri Dec 25 09:27:34 2009 @@ -98,15 +98,8 @@ { super(StandardClass.CONDITION); Debug.assertTrue(slots.length == 2); - try - { - setFormatControl(message); - setFormatArguments(NIL); - } - catch (Throwable t) - { - Debug.trace(t); - } + setFormatControl(message); + setFormatArguments(NIL); } public final LispObject getFormatControl() @@ -177,11 +170,7 @@ LispObject formatControl = getFormatControl(); if (formatControl != NIL) { - try - { - return format(formatControl, getFormatArguments()); - } - catch (Throwable t) {} + return format(formatControl, getFormatArguments()); } return unreadableString(typeOf().writeToString()); } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Go.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Go.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Go.java Fri Dec 25 09:27:34 2009 @@ -57,15 +57,9 @@ @Override public LispObject getCondition() { - try { - StringBuffer sb = new StringBuffer("No tag named "); - sb.append(tag.writeToString()); - sb.append(" is currently visible"); - return new ControlError(sb.toString()); - } - catch (Throwable t) { - Debug.trace(t); - return new Condition(); - } + StringBuffer sb = new StringBuffer("No tag named "); + sb.append(tag.writeToString()); + sb.append(" is currently visible"); + return new ControlError(sb.toString()); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Interpreter.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Interpreter.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Interpreter.java Fri Dec 25 09:27:34 2009 @@ -75,31 +75,28 @@ if (interpreter != null) return null; interpreter = new Interpreter(); - try { - if (args != null) - preprocessCommandLineArguments(args); - if (!noinform) { - Stream out = getStandardOutput(); - out._writeString(banner()); - out._finishOutput(); - } - if (noinform) - _NOINFORM_.setSymbolValue(T); - else { - double uptime = (System.currentTimeMillis() - Main.startTimeMillis) / 1000.0; - getStandardOutput()._writeString("Low-level initialization completed in " + - uptime + " seconds.\n"); - } - initializeLisp(); - initializeTopLevel(); - if (!noinit) - processInitializationFile(); - if (args != null) - postprocessCommandLineArguments(args); + + if (args != null) + preprocessCommandLineArguments(args); + if (!noinform) { + Stream out = getStandardOutput(); + out._writeString(banner()); + out._finishOutput(); } - catch (Throwable t) { - t.printStackTrace(); + if (noinform) + _NOINFORM_.setSymbolValue(T); + else { + double uptime = (System.currentTimeMillis() - Main.startTimeMillis) / 1000.0; + getStandardOutput()._writeString("Low-level initialization completed in " + + uptime + " seconds.\n"); } + initializeLisp(); + initializeTopLevel(); + if (!noinit) + processInitializationFile(); + if (args != null) + postprocessCommandLineArguments(args); + return interpreter; } @@ -112,15 +109,12 @@ if (interpreter != null) return null; interpreter = new Interpreter(in, out, initialDirectory); - try { - Stream stdout = getStandardOutput(); - stdout._writeLine(version); - stdout._writeString(banner()); - stdout._finishOutput(); - } - catch (Throwable t) { - t.printStackTrace(); - } + + Stream stdout = getStandardOutput(); + stdout._writeLine(version); + stdout._writeString(banner()); + stdout._finishOutput(); + initializeJLisp(); initializeTopLevel(); processInitializationFile(); @@ -144,12 +138,7 @@ new Stream(outputStream, Symbol.CHARACTER)); if (!initialDirectory.endsWith(File.separator)) initialDirectory = initialDirectory.concat(File.separator); - try { - Symbol.DEFAULT_PATHNAME_DEFAULTS.setSymbolValue(new Pathname(initialDirectory)); - } - catch (Throwable t) { - Debug.trace(t); - } + Symbol.DEFAULT_PATHNAME_DEFAULTS.setSymbolValue(new Pathname(initialDirectory)); } // Interface. @@ -170,17 +159,17 @@ public static synchronized void initializeJLisp() { if (!initialized) { + Symbol.FEATURES.setSymbolValue(new Cons(Keyword.J, + Symbol.FEATURES.getSymbolValue())); + Load.loadSystemFile("boot.lisp", false, false, false); + try { - Symbol.FEATURES.setSymbolValue(new Cons(Keyword.J, - Symbol.FEATURES.getSymbolValue())); - Load.loadSystemFile("boot.lisp", false, false, false); Class.forName("org.armedbear.j.LispAPI"); - Load.loadSystemFile("j.lisp"); - } - catch (Throwable t) { - // ### FIXME exception - t.printStackTrace(); } + catch (ClassNotFoundException e) { } // FIXME: what to do? + + Load.loadSystemFile("j.lisp"); + initialized = true; } } @@ -190,18 +179,14 @@ private static synchronized void initializeTopLevel() { if (!topLevelInitialized) { - try { - // Resolve top-level-loop autoload. - Symbol TOP_LEVEL_LOOP = intern("TOP-LEVEL-LOOP", PACKAGE_TPL); - LispObject tplFun = TOP_LEVEL_LOOP.getSymbolFunction(); - if (tplFun instanceof Autoload) { - Autoload autoload = (Autoload) tplFun; - autoload.load(); - } - } - catch (Throwable t) { - t.printStackTrace(); + // Resolve top-level-loop autoload. + Symbol TOP_LEVEL_LOOP = intern("TOP-LEVEL-LOOP", PACKAGE_TPL); + LispObject tplFun = TOP_LEVEL_LOOP.getSymbolFunction(); + if (tplFun instanceof Autoload) { + Autoload autoload = (Autoload) tplFun; + autoload.load(); } + topLevelInitialized = true; } } @@ -216,8 +201,8 @@ return; } } - catch (Throwable t) { - t.printStackTrace(); + catch (IOException e) { + e.printStackTrace(); } } @@ -385,36 +370,26 @@ private static void reportError(ControlTransfer c, LispThread thread) { - try { - getStandardInput().clearInput(); - Stream out = getStandardOutput(); - out.freshLine(); - Condition condition = (Condition) c.getCondition(); - out._writeLine("Error: unhandled condition: " + - condition.writeToString()); - if (thread != null) - thread.printBacktrace(); - } - catch (Throwable t) { - - } + getStandardInput().clearInput(); + Stream out = getStandardOutput(); + out.freshLine(); + Condition condition = (Condition) c.getCondition(); + out._writeLine("Error: unhandled condition: " + + condition.writeToString()); + if (thread != null) + thread.printBacktrace(); } private static void reportError(UnhandledCondition c, LispThread thread) { - try { - getStandardInput().clearInput(); - Stream out = getStandardOutput(); - out.freshLine(); - Condition condition = (Condition) c.getCondition(); - out._writeLine("Error: unhandled condition: " + - condition.writeToString()); - if (thread != null) - thread.printBacktrace(); - } - catch (Throwable t) { - - } + getStandardInput().clearInput(); + Stream out = getStandardOutput(); + out.freshLine(); + Condition condition = (Condition) c.getCondition(); + out._writeLine("Error: unhandled condition: " + + condition.writeToString()); + if (thread != null) + thread.printBacktrace(); } public void kill() @@ -500,7 +475,7 @@ condition.typeOf().writeToString() + ':'); Debug.trace(" " + condition.writeToString()); } - catch (Throwable t) {} + catch (Throwable t) {} // catch any exception to throw below finally { thread.resetSpecialBindings(mark); } @@ -511,13 +486,8 @@ public static final LispObject readFromString(String s) { - try { - return new StringInputStream(s).read(true, NIL, false, - LispThread.currentThread()); - } - catch (Throwable t) { - return null; - } + return new StringInputStream(s).read(true, NIL, false, + LispThread.currentThread()); } // For j. Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Java.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Java.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Java.java Fri Dec 25 09:27:34 2009 @@ -215,7 +215,7 @@ catch (IllegalArgumentException e) { error(new LispError("illegal argument")); } - catch (Throwable t) { + catch (Throwable t) { // no code -> no ControlTransfer error(new LispError(getMessage(t))); } // Not reached. @@ -282,7 +282,7 @@ catch (ControlTransfer e) { throw e; } - catch (Throwable t) { + catch (Throwable t) { // ControlTransfer addressed above error(new LispError(getMessage(t))); } // Not reached. @@ -340,7 +340,7 @@ catch (ControlTransfer e) { throw e; } - catch (Throwable t) { + catch (Throwable t) { // ControlTransfer addressed above error(new LispError(getMessage(t))); } // Not reached. @@ -393,7 +393,10 @@ Object result = m.invoke(null, methodArgs); return JavaObject.getInstance(result, translate); } - catch (Throwable t) { + catch (ControlTransfer c) { + throw c; + } + catch (Throwable t) { // ControlTransfer handled above if (t instanceof InvocationTargetException) t = t.getCause(); Symbol condition = getCondition(t.getClass()); @@ -458,7 +461,10 @@ } return JavaObject.getInstance(constructor.newInstance(initargs)); } - catch (Throwable t) { + catch (ControlTransfer c) { + throw c; + } + catch (Throwable t) { // ControlTransfer handled above if (t instanceof InvocationTargetException) t = t.getCause(); Symbol condition = getCondition(t.getClass()); @@ -494,7 +500,7 @@ dimensions[i-1] = ((Integer)args[i].javaInstance()).intValue(); return JavaObject.getInstance(Array.newInstance(c, dimensions)); } - catch (Throwable t) { + catch (Throwable t) { // no code -> no ControlTransfer error(new JavaException(t)); } // Not reached. @@ -514,7 +520,7 @@ return JavaObject.getInstance(Array.get(a, ((Integer)args[args.length - 1].javaInstance()).intValue()), translate); } - catch (Throwable t) { + catch (Throwable t) { // no code -> no ControlTransfer Symbol condition = getCondition(t.getClass()); if (condition == null) error(new JavaException(t)); @@ -572,7 +578,7 @@ Array.set(a, ((Integer)args[args.length - 1].javaInstance()).intValue(), v.javaInstance()); return v; } - catch (Throwable t) { + catch (Throwable t) { // no code -> no ControlTransfer Symbol condition = getCondition(t.getClass()); if (condition == null) error(new JavaException(t)); @@ -653,7 +659,7 @@ catch (ControlTransfer t) { throw t; } - catch (Throwable t) { + catch (Throwable t) { // ControlTransfer handled above if (t instanceof InvocationTargetException) t = t.getCause(); Symbol condition = getCondition(t.getClass()); @@ -696,30 +702,23 @@ if (args.length < 1) error(new WrongNumberOfArgumentsException(this)); LispObject object = args[0]; - try { - if (args.length > 1) { - LispObject type = args[1]; - if (type == Keyword.BOOLEAN) { - if (object == NIL) - return JavaObject.getInstance(Boolean.FALSE); - else - return JavaObject.getInstance(Boolean.TRUE); - } - if (type == Keyword.REF) { - if (object == NIL) - return JavaObject.getInstance(null); - else - throw new Error(); - } - // other special cases come here + if (args.length > 1) { + LispObject type = args[1]; + if (type == Keyword.BOOLEAN) { + if (object == NIL) + return JavaObject.getInstance(Boolean.FALSE); + else + return JavaObject.getInstance(Boolean.TRUE); } - return JavaObject.getInstance(object.javaInstance()); - } - catch (Throwable t) { - error(new LispError("MAKE-IMMEDIATE-OBJECT: not implemented")); + if (type == Keyword.REF) { + if (object == NIL) + return JavaObject.getInstance(null); + else + error(new LispError("MAKE-IMMEDIATE-OBJECT: not implemented")); + } + // other special cases come here } - // Not reached. - return NIL; + return JavaObject.getInstance(object.javaInstance()); } }; Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/JavaClassLoader.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/JavaClassLoader.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/JavaClassLoader.java Fri Dec 25 09:27:34 2009 @@ -33,6 +33,8 @@ package org.armedbear.lisp; +import static org.armedbear.lisp.Lisp.*; + import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -70,7 +72,7 @@ } public Class loadClassFromByteArray(byte[] classbytes) { - return loadClassFromByteArray(null, classbytes); + return loadClassFromByteArray(null, classbytes); } public Class loadClassFromByteArray(String className, @@ -87,9 +89,9 @@ } } } - catch (LinkageError e) { - throw e; - } + catch (LinkageError e) { + throw e; + } catch (Throwable t) { Debug.trace(t); } @@ -106,6 +108,10 @@ return c; } } + catch (VerifyError e) + { + error(new LispError("Class verification failed: " + e.getMessage())); + } catch (Throwable t) { Debug.trace(t); } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Layout.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Layout.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Layout.java Fri Dec 25 09:27:34 2009 @@ -49,31 +49,16 @@ { this.lispClass = lispClass; Debug.assertTrue(instanceSlots.listp()); - int length = 0; - try - { - length = instanceSlots.length(); - } - catch (Throwable t) - { - // Shouldn't happen. - Debug.trace(t); - } + int length = instanceSlots.length(); slotNames = new LispObject[length]; int i = 0; - try - { - while (instanceSlots != NIL) - { - slotNames[i++] = instanceSlots.car(); - instanceSlots = instanceSlots.cdr(); - } - } - catch (Throwable t) + + while (instanceSlots != NIL) { - // Shouldn't happen. - Debug.trace(t); + slotNames[i++] = instanceSlots.car(); + instanceSlots = instanceSlots.cdr(); } + Debug.assertTrue(i == length); this.sharedSlots = sharedSlots; slotTable = initializeSlotTable(slotNames); @@ -153,16 +138,9 @@ protected LispObject generateSlotDefinitions() { LispObject list = NIL; - try - { - for (int i = slotNames.length; i-- > 0;) - list = list.push(new SlotDefinition(slotNames[i], NIL)); - } - catch (Throwable t) - { - // Shouldn't happen. - Debug.trace(t); - } + for (int i = slotNames.length; i-- > 0;) + list = list.push(new SlotDefinition(slotNames[i], NIL)); + return list; } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Lisp.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Lisp.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Lisp.java Fri Dec 25 09:27:34 2009 @@ -35,9 +35,9 @@ import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.lang.reflect.Constructor; import java.math.BigInteger; import java.net.MalformedURLException; import java.net.URL; @@ -95,52 +95,45 @@ // We need NIL before we can call usePackage(). static { - try - { - PACKAGE_CL.addNickname("CL"); - PACKAGE_CL_USER.addNickname("CL-USER"); - PACKAGE_CL_USER.usePackage(PACKAGE_CL); - PACKAGE_CL_USER.usePackage(PACKAGE_EXT); - PACKAGE_CL_USER.usePackage(PACKAGE_JAVA); - PACKAGE_SYS.addNickname("SYS"); - PACKAGE_SYS.usePackage(PACKAGE_CL); - PACKAGE_SYS.usePackage(PACKAGE_EXT); - PACKAGE_MOP.usePackage(PACKAGE_CL); - PACKAGE_MOP.usePackage(PACKAGE_EXT); - PACKAGE_MOP.usePackage(PACKAGE_SYS); - PACKAGE_TPL.addNickname("TPL"); - PACKAGE_TPL.usePackage(PACKAGE_CL); - PACKAGE_TPL.usePackage(PACKAGE_EXT); - PACKAGE_EXT.addNickname("EXT"); - PACKAGE_EXT.usePackage(PACKAGE_CL); - PACKAGE_EXT.usePackage(PACKAGE_THREADS); - PACKAGE_JVM.usePackage(PACKAGE_CL); - PACKAGE_JVM.usePackage(PACKAGE_EXT); - PACKAGE_JVM.usePackage(PACKAGE_SYS); - PACKAGE_LOOP.usePackage(PACKAGE_CL); - PACKAGE_PROF.addNickname("PROF"); - PACKAGE_PROF.usePackage(PACKAGE_CL); - PACKAGE_PROF.usePackage(PACKAGE_EXT); - PACKAGE_JAVA.usePackage(PACKAGE_CL); - PACKAGE_JAVA.usePackage(PACKAGE_EXT); - PACKAGE_LISP.usePackage(PACKAGE_CL); - PACKAGE_LISP.usePackage(PACKAGE_EXT); - PACKAGE_LISP.usePackage(PACKAGE_SYS); - PACKAGE_THREADS.usePackage(PACKAGE_CL); - PACKAGE_THREADS.usePackage(PACKAGE_EXT); - PACKAGE_THREADS.usePackage(PACKAGE_SYS); - PACKAGE_FORMAT.usePackage(PACKAGE_CL); - PACKAGE_FORMAT.usePackage(PACKAGE_EXT); - PACKAGE_XP.usePackage(PACKAGE_CL); - PACKAGE_PRECOMPILER.addNickname("PRE"); - PACKAGE_PRECOMPILER.usePackage(PACKAGE_CL); - PACKAGE_PRECOMPILER.usePackage(PACKAGE_EXT); - PACKAGE_PRECOMPILER.usePackage(PACKAGE_SYS); - } - catch (Throwable t) - { - Debug.trace(t); - } + PACKAGE_CL.addNickname("CL"); + PACKAGE_CL_USER.addNickname("CL-USER"); + PACKAGE_CL_USER.usePackage(PACKAGE_CL); + PACKAGE_CL_USER.usePackage(PACKAGE_EXT); + PACKAGE_CL_USER.usePackage(PACKAGE_JAVA); + PACKAGE_SYS.addNickname("SYS"); + PACKAGE_SYS.usePackage(PACKAGE_CL); + PACKAGE_SYS.usePackage(PACKAGE_EXT); + PACKAGE_MOP.usePackage(PACKAGE_CL); + PACKAGE_MOP.usePackage(PACKAGE_EXT); + PACKAGE_MOP.usePackage(PACKAGE_SYS); + PACKAGE_TPL.addNickname("TPL"); + PACKAGE_TPL.usePackage(PACKAGE_CL); + PACKAGE_TPL.usePackage(PACKAGE_EXT); + PACKAGE_EXT.addNickname("EXT"); + PACKAGE_EXT.usePackage(PACKAGE_CL); + PACKAGE_EXT.usePackage(PACKAGE_THREADS); + PACKAGE_JVM.usePackage(PACKAGE_CL); + PACKAGE_JVM.usePackage(PACKAGE_EXT); + PACKAGE_JVM.usePackage(PACKAGE_SYS); + PACKAGE_LOOP.usePackage(PACKAGE_CL); + PACKAGE_PROF.addNickname("PROF"); + PACKAGE_PROF.usePackage(PACKAGE_CL); + PACKAGE_PROF.usePackage(PACKAGE_EXT); + PACKAGE_JAVA.usePackage(PACKAGE_CL); + PACKAGE_JAVA.usePackage(PACKAGE_EXT); + PACKAGE_LISP.usePackage(PACKAGE_CL); + PACKAGE_LISP.usePackage(PACKAGE_EXT); + PACKAGE_LISP.usePackage(PACKAGE_SYS); + PACKAGE_THREADS.usePackage(PACKAGE_CL); + PACKAGE_THREADS.usePackage(PACKAGE_EXT); + PACKAGE_THREADS.usePackage(PACKAGE_SYS); + PACKAGE_FORMAT.usePackage(PACKAGE_CL); + PACKAGE_FORMAT.usePackage(PACKAGE_EXT); + PACKAGE_XP.usePackage(PACKAGE_CL); + PACKAGE_PRECOMPILER.addNickname("PRE"); + PACKAGE_PRECOMPILER.usePackage(PACKAGE_CL); + PACKAGE_PRECOMPILER.usePackage(PACKAGE_EXT); + PACKAGE_PRECOMPILER.usePackage(PACKAGE_SYS); } // End-of-file marker. @@ -291,16 +284,11 @@ thread.backtrace(0)); return error(new StorageCondition("Stack overflow.")); } - catch (Go go) - { - throw go; - } - catch (Throw t) + catch (ControlTransfer c) { - return error(new ControlError("Attempt to throw to the nonexistent tag " + - t.tag.writeToString() + ".")); + throw c; } - catch (Throwable t) + catch (Throwable t) // ControlTransfer handled above { Debug.trace(t); thread.setSpecialVariable(_SAVED_BACKTRACE_, @@ -1209,37 +1197,18 @@ // Used by the compiler. public static final LispObject readObjectFromString(String s) { - try - { - return new StringInputStream(s).faslRead(true, NIL, false, - LispThread.currentThread()); - } - catch (Throwable t) - { - Debug.trace(t); - return null; - } + return new StringInputStream(s).faslRead(true, NIL, false, + LispThread.currentThread()); } public static final LispObject loadCompiledFunction(final String namestring) { - try { byte[] bytes = readFunctionBytes(namestring); if (bytes != null) return loadClassBytes(bytes); - } - catch (VerifyError e) - { - return error(new LispError("Class verification failed: " + - e.getMessage())); - } - catch (Throwable t) - { - Debug.trace(t); - } - return error(new FileError("File not found: " + namestring, - new Pathname(namestring))); + + return null; } public static final byte[] readFunctionBytes(final String namestring) @@ -1347,10 +1316,6 @@ { Debug.trace(e); } - catch (Throwable t) - { - Debug.trace(t); - } } error(new LispError("Unable to load " + namestring)); return null; // not reached @@ -1368,17 +1333,11 @@ if (bytes != null) return bytes; } - catch (VerifyError e) - { - error(new LispError("Class verification failed: " + - e.getMessage())); + catch (FileNotFoundException fnf) { + error(new LispError("Unable to load " + pathname.writeToString() + + ": " + fnf.getMessage())); return null; // not reached - } - catch (Throwable t) - { - Debug.trace(t); - } - error(new LispError("Unable to load " + pathname.writeToString())); + } return null; // not reached } try @@ -1405,7 +1364,7 @@ ZipCache.removeZip(zipFile.getName()); } } - catch (Throwable t) + catch (IOException t) { Debug.trace(t); } @@ -1432,21 +1391,11 @@ public static final LispObject loadCompiledFunction(InputStream in, int size) { - try { byte[] bytes = readFunctionBytes(in, size); if (bytes != null) return loadClassBytes(bytes); - } - catch (VerifyError e) - { - return error(new LispError("Class verification failed: " + - e.getMessage())); - } - catch (Throwable t) - { - Debug.trace(t); - } - return error(new FileError("Can't read file off stream.")); + else + return error(new FileError("Can't read file off stream.")); } @@ -1472,22 +1421,20 @@ return bytes; } - catch (Throwable t) + catch (IOException t) { - Debug.trace(t); + Debug.trace(t); // FIXME: call error()? } return null; } public static final Function loadClassBytes(byte[] bytes) - throws Throwable { - return loadClassBytes(bytes, new JavaClassLoader()); + return loadClassBytes(bytes, new JavaClassLoader()); } public static final Function loadClassBytes(byte[] bytes, JavaClassLoader cl) - throws Throwable { Class c = cl.loadClassFromByteArray(null, bytes, 0, bytes.length); Function obj = makeCompiledFunctionFromClass(c); Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/LispStackFrame.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/LispStackFrame.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/LispStackFrame.java Fri Dec 25 09:27:34 2009 @@ -121,7 +121,7 @@ try { result = unreadableString(LISP_STACK_FRAME + " " + toLispString().getStringValue()); - } catch (Throwable t) { + } catch (Throwable t) { // error while printing stack Debug.trace("Serious printing error: "); Debug.trace(t); result = unreadableString(LISP_STACK_FRAME); @@ -192,7 +192,7 @@ String result; try { result = this.toLispList().writeToString(); - } catch (Throwable t) { + } catch (Throwable t) { // error while printing stack Debug.trace("Serious printing error: "); Debug.trace(t); result = unreadableString("LISP-STACK-FRAME"); Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/LispThread.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/LispThread.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/LispThread.java Fri Dec 25 09:27:34 2009 @@ -90,7 +90,7 @@ catch (ThreadDestroyed ignored) { // Might happen. } - catch (Throwable t) { + catch (Throwable t) { // any error: process thread interrupts if (isInterrupted()) { processThreadInterrupts(); } @@ -723,29 +723,24 @@ public void printBacktrace(int limit) { if (stack != null) { - try { - int count = 0; - Stream out = - checkCharacterOutputStream(Symbol.TRACE_OUTPUT.symbolValue()); - out._writeLine("Evaluation stack:"); - out._finishOutput(); + int count = 0; + Stream out = + checkCharacterOutputStream(Symbol.TRACE_OUTPUT.symbolValue()); + out._writeLine("Evaluation stack:"); + out._finishOutput(); + + StackFrame s = stack; + while (s != null) { + out._writeString(" "); + out._writeString(String.valueOf(count)); + out._writeString(": "); - StackFrame s = stack; - while (s != null) { - out._writeString(" "); - out._writeString(String.valueOf(count)); - out._writeString(": "); - - pprint(s.toLispList(), out.getCharPos(), out); - out.terpri(); - out._finishOutput(); - if (limit > 0 && ++count == limit) - break; - s = s.next; - } - } - catch (Throwable t) { - t.printStackTrace(); + pprint(s.toLispList(), out.getCharPos(), out); + out.terpri(); + out._finishOutput(); + if (limit > 0 && ++count == limit) + break; + s = s.next; } } } @@ -755,17 +750,12 @@ LispObject result = NIL; if (stack != null) { int count = 0; - try { - StackFrame s = stack; - while (s != null) { - result = result.push(s); - if (limit > 0 && ++count == limit) - break; - s = s.getNext(); - } - } - catch (Throwable t) { - t.printStackTrace(); + StackFrame s = stack; + while (s != null) { + result = result.push(s); + if (limit > 0 && ++count == limit) + break; + s = s.getNext(); } } return result.nreverse(); Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Load.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Load.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Load.java Fri Dec 25 09:27:34 2009 @@ -180,7 +180,7 @@ try { zipfile = ZipCache.getZip(zipFileName); } - catch (Throwable t) { + catch (IOException e) { return error (new FileError("Zip file not found: " + filename, pathname)); } ZipEntry entry = zipfile.getEntry(zipEntryName); @@ -374,10 +374,8 @@ catch (ZipException e) { // Fall through. } - catch (Throwable t) { - Debug.trace(t); - in = null; - // Fall through. + catch (IOException e) { + // fall through } } if (in == null) { @@ -675,7 +673,7 @@ && bytes[2] == 0x03 && bytes[3] == 0x04); } - catch (Throwable t) { + catch (Throwable t) { // any error probably means 'no' return false; } finally { @@ -683,7 +681,7 @@ try { in.close(); } - catch (Throwable t) {} + catch (IOException e) {} // ignore exceptions } } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/MathFunctions.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/MathFunctions.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/MathFunctions.java Fri Dec 25 09:27:34 2009 @@ -268,23 +268,11 @@ im); } if (arg instanceof SingleFloat) { - try { - double d = Math.sinh(((SingleFloat)arg).value); - return new SingleFloat((float)d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.sinh(((SingleFloat)arg).value); + return new SingleFloat((float)d); } else if (arg instanceof DoubleFloat) { - try { - double d = Math.sinh(((DoubleFloat)arg).value); - return new DoubleFloat(d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.sinh(((DoubleFloat)arg).value); + return new DoubleFloat(d); } LispObject result = exp(arg); result = result.subtract(exp(arg.multiplyBy(Fixnum.MINUS_ONE))); @@ -318,23 +306,11 @@ im); } if (arg instanceof SingleFloat) { - try { - double d = Math.cosh(((SingleFloat)arg).value); - return new SingleFloat((float)d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.cosh(((SingleFloat)arg).value); + return new SingleFloat((float)d); } else if (arg instanceof DoubleFloat) { - try { - double d = Math.cosh(((DoubleFloat)arg).value); - return new DoubleFloat(d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.cosh(((DoubleFloat)arg).value); + return new DoubleFloat(d); } LispObject result = exp(arg); result = result.add(exp(arg.multiplyBy(Fixnum.MINUS_ONE))); @@ -356,23 +332,11 @@ public LispObject execute(LispObject arg) { if (arg instanceof SingleFloat) { - try { - double d = Math.tanh(((SingleFloat)arg).value); - return new SingleFloat((float)d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.tanh(((SingleFloat)arg).value); + return new SingleFloat((float)d); } else if (arg instanceof DoubleFloat) { - try { - double d = Math.tanh(((DoubleFloat)arg).value); - return new DoubleFloat(d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = Math.tanh(((DoubleFloat)arg).value); + return new DoubleFloat(d); } return sinh(arg).divideBy(cosh(arg)); } @@ -576,19 +540,13 @@ { if (number.realp() && !number.minusp() && base.isEqualTo(Fixnum.getInstance(10))) { - try { - double d = - Math.log10(DoubleFloat.coerceToFloat(number).value); - if (number instanceof DoubleFloat - || base instanceof DoubleFloat) - return new DoubleFloat(d); - else - return new SingleFloat((float)d); - } - catch (Throwable t) { - Debug.trace(t); - // Fall through... - } + double d = + Math.log10(DoubleFloat.coerceToFloat(number).value); + if (number instanceof DoubleFloat + || base instanceof DoubleFloat) + return new DoubleFloat(d); + else + return new SingleFloat((float)d); } return log(number).divideBy(log(base)); } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Package.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Package.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Package.java Fri Dec 25 09:27:34 2009 @@ -263,27 +263,18 @@ { Debug.assertTrue(symbol.getPackage() == this); Debug.assertTrue(symbol.getName().equals("NIL")); - try { - externalSymbols.put(symbol.name, symbol); - } - catch (Throwable t) { - Debug.trace(t); // FIXME - } + externalSymbols.put(symbol.name, symbol); } private synchronized Symbol addSymbol(SimpleString name, int hash) { Symbol symbol = new Symbol(name, hash, this); - try { - if (this == PACKAGE_KEYWORD) { - symbol.initializeConstant(symbol); - externalSymbols.put(name, symbol); - } else - internalSymbols.put(name, symbol); - } - catch (Throwable t) { - Debug.trace(t); // FIXME - } + if (this == PACKAGE_KEYWORD) { + symbol.initializeConstant(symbol); + externalSymbols.put(name, symbol); + } else + internalSymbols.put(name, symbol); + return symbol; } @@ -318,18 +309,13 @@ return symbol; // Look in external symbols of used packages. if (useList instanceof Cons) { - try { - LispObject usedPackages = useList; - while (usedPackages != NIL) { - Package pkg = (Package) usedPackages.car(); - symbol = pkg.findExternalSymbol(symbolName, hash); - if (symbol != null) - return symbol; - usedPackages = usedPackages.cdr(); - } - } - catch (Throwable t) { - Debug.trace(t); + LispObject usedPackages = useList; + while (usedPackages != NIL) { + Package pkg = (Package) usedPackages.car(); + symbol = pkg.findExternalSymbol(symbolName, hash); + if (symbol != null) + return symbol; + usedPackages = usedPackages.cdr(); } } // Not found. @@ -349,18 +335,13 @@ return (Symbol) thread.setValues(symbol, Keyword.INTERNAL); // Look in external symbols of used packages. if (useList instanceof Cons) { - try { - LispObject usedPackages = useList; - while (usedPackages != NIL) { - Package pkg = (Package) usedPackages.car(); - symbol = pkg.findExternalSymbol(s, hash); - if (symbol != null) - return (Symbol) thread.setValues(symbol, Keyword.INHERITED); - usedPackages = usedPackages.cdr(); - } - } - catch (Throwable t) { - Debug.trace(t); + LispObject usedPackages = useList; + while (usedPackages != NIL) { + Package pkg = (Package) usedPackages.car(); + symbol = pkg.findExternalSymbol(s, hash); + if (symbol != null) + return (Symbol) thread.setValues(symbol, Keyword.INHERITED); + usedPackages = usedPackages.cdr(); } } // Not found. @@ -756,21 +737,16 @@ list.addAll(internalSymbols.getSymbols()); list.addAll(externalSymbols.getSymbols()); if (useList instanceof Cons) { - try { - LispObject usedPackages = useList; - while (usedPackages != NIL) { - Package pkg = (Package) usedPackages.car(); - List symbols = pkg.externalSymbols.getSymbols(); - for (int i = 0; i < symbols.size(); i++) { - Symbol symbol = (Symbol) symbols.get(i); - if (shadowingSymbols == null || shadowingSymbols.get(symbol.getName()) == null) - list.add(symbol); - } - usedPackages = usedPackages.cdr(); + LispObject usedPackages = useList; + while (usedPackages != NIL) { + Package pkg = (Package) usedPackages.car(); + List symbols = pkg.externalSymbols.getSymbols(); + for (int i = 0; i < symbols.size(); i++) { + Symbol symbol = (Symbol) symbols.get(i); + if (shadowingSymbols == null || shadowingSymbols.get(symbol.getName()) == null) + list.add(symbol); } - } - catch (Throwable t) { - Debug.trace(t); + usedPackages = usedPackages.cdr(); } } return list; @@ -798,24 +774,19 @@ { LispObject list = NIL; if (useList instanceof Cons) { - try { - LispObject usedPackages = useList; - while (usedPackages != NIL) { - Package pkg = (Package) usedPackages.car(); - List externals = pkg.getExternalSymbols(); - for (int i = externals.size(); i-- > 0;) { - Symbol symbol = (Symbol) externals.get(i); - if (shadowingSymbols != null && shadowingSymbols.get(symbol.getName()) != null) - continue; - if (externalSymbols.get(symbol.name) == symbol) - continue; - list = new Cons(symbol, list); - } - usedPackages = usedPackages.cdr(); + LispObject usedPackages = useList; + while (usedPackages != NIL) { + Package pkg = (Package) usedPackages.car(); + List externals = pkg.getExternalSymbols(); + for (int i = externals.size(); i-- > 0;) { + Symbol symbol = (Symbol) externals.get(i); + if (shadowingSymbols != null && shadowingSymbols.get(symbol.getName()) != null) + continue; + if (externalSymbols.get(symbol.name) == symbol) + continue; + list = new Cons(symbol, list); } - } - catch (Throwable t) { - Debug.trace(t); + usedPackages = usedPackages.cdr(); } } return list; Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Pathname.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Pathname.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Pathname.java Fri Dec 25 09:27:34 2009 @@ -497,11 +497,7 @@ boolean printEscape = (Symbol.PRINT_ESCAPE.symbolValue(thread) != NIL); boolean useNamestring; String s = null; - try { - s = getNamestring(); - } - // ### FIXME exception - catch (Throwable t) {} + s = getNamestring(); if (s != null) { useNamestring = true; if (printReadably) { @@ -1388,12 +1384,7 @@ }; static { - try { - LispObject obj = Symbol.DEFAULT_PATHNAME_DEFAULTS.getSymbolValue(); - Symbol.DEFAULT_PATHNAME_DEFAULTS.setSymbolValue(coerceToPathname(obj)); - } - catch (Throwable t) { - Debug.trace(t); - } + LispObject obj = Symbol.DEFAULT_PATHNAME_DEFAULTS.getSymbolValue(); + Symbol.DEFAULT_PATHNAME_DEFAULTS.setSymbolValue(coerceToPathname(obj)); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/PrintNotReadable.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/PrintNotReadable.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/PrintNotReadable.java Fri Dec 25 09:27:34 2009 @@ -83,12 +83,7 @@ { FastStringBuffer sb = new FastStringBuffer(); LispObject object = UNBOUND_VALUE; - try { - object = getInstanceSlotValue(Symbol.OBJECT); - } - catch (Throwable t) { - Debug.trace(t); - } + object = getInstanceSlotValue(Symbol.OBJECT); if (object != UNBOUND_VALUE) { final LispThread thread = LispThread.currentThread(); final SpecialBindingsMark mark = thread.markSpecialBindings(); @@ -97,9 +92,6 @@ try { sb.append(object.writeToString()); } - catch (Throwable t) { - sb.append("Object"); - } finally { thread.resetSpecialBindings(mark); } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/RandomState.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/RandomState.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/RandomState.java Fri Dec 25 09:27:34 2009 @@ -64,9 +64,9 @@ ObjectInputStream in = new ObjectInputStream(fileIn); random = (Random) in.readObject(); in.close(); - file.delete(); + file.delete(); // FIXME: file leak on exception } - catch (Throwable t) { + catch (Throwable t) { // ANY exception gets converted to a lisp error error(new LispError("Unable to copy random state.")); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Return.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Return.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Return.java Fri Dec 25 09:27:34 2009 @@ -71,15 +71,9 @@ @Override public LispObject getCondition() { - try { - FastStringBuffer sb = new FastStringBuffer("No block named "); - sb.append(tag.writeToString()); - sb.append(" is currently visible."); - return new ControlError(sb.toString()); - } - catch (Throwable t) { - Debug.trace(t); - return new Condition(); - } + FastStringBuffer sb = new FastStringBuffer("No block named "); + sb.append(tag.writeToString()); + sb.append(" is currently visible."); + return new ControlError(sb.toString()); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/RuntimeClass.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/RuntimeClass.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/RuntimeClass.java Fri Dec 25 09:27:34 2009 @@ -122,9 +122,6 @@ return error(new LispError("class could not be linked: " + e.getMessage())); } - catch (Throwable t) { - Debug.trace(t); - } return error( new LispError("unable to load ".concat(cn))); } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/ShellCommand.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/ShellCommand.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/ShellCommand.java Fri Dec 25 09:27:34 2009 @@ -204,12 +204,7 @@ String s = read(); if (s == null) return; - try { - processOutput(s); - } - catch (Throwable t) { - Debug.trace(t); - } + processOutput(s); } } @@ -234,9 +229,6 @@ catch (InterruptedException e) { return null; } - catch (Throwable t) { - return null; - } return sb.toString(); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SimpleTypeError.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SimpleTypeError.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SimpleTypeError.java Fri Dec 25 09:27:34 2009 @@ -72,21 +72,17 @@ @Override public String getMessage() { - try { - LispObject formatControl = getFormatControl(); - if (formatControl != NIL) { - LispObject formatArguments = getFormatArguments(); - // (apply 'format (append '(nil format-control) format-arguments)) - LispObject result = - Primitives.APPLY.execute(Symbol.FORMAT, - Primitives.APPEND.execute(list(NIL, - formatControl), - formatArguments)); - return result.getStringValue(); - } - return super.getMessage(); + LispObject formatControl = getFormatControl(); + if (formatControl != NIL) { + LispObject formatArguments = getFormatArguments(); + // (apply 'format (append '(nil format-control) format-arguments)) + LispObject result = + Primitives.APPLY.execute(Symbol.FORMAT, + Primitives.APPEND.execute(list(NIL, + formatControl), + formatArguments)); + return result.getStringValue(); } - catch (Throwable t) {} - return null; + return super.getMessage(); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Site.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Site.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Site.java Fri Dec 25 09:27:34 2009 @@ -83,13 +83,8 @@ exportSpecial("*LISP-HOME*", PACKAGE_EXT, NIL); static { - try { - String s = Site.getLispHome(); - if (s != null) - _LISP_HOME_.setSymbolValue(new Pathname(s)); - } - catch (Throwable t) { - Debug.trace(t); - } + String s = Site.getLispHome(); + if (s != null) + _LISP_HOME_.setSymbolValue(new Pathname(s)); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SiteName.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SiteName.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SiteName.java Fri Dec 25 09:27:34 2009 @@ -36,18 +36,23 @@ import static org.armedbear.lisp.Lisp.*; import java.net.InetAddress; +import java.net.UnknownHostException; public final class SiteName { private static LispObject getHostName() { String hostName = null; + InetAddress addr; try { - InetAddress addr = InetAddress.getLocalHost(); - if (addr != null) - hostName = addr.getHostName(); + addr = InetAddress.getLocalHost(); } - catch (Throwable t) {} + catch (UnknownHostException e) { + addr = null; + } + if (addr != null) + hostName = addr.getHostName(); + return hostName != null ? new SimpleString(hostName) : NIL; } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlimeInputStream.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlimeInputStream.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlimeInputStream.java Fri Dec 25 09:27:34 2009 @@ -96,13 +96,8 @@ protected int _readChar() { if (offset >= length) { - try { - ostream.finishOutput(); - s = LispThread.currentThread().execute(f).getStringValue(); - } - catch (Throwable t) { - return -1; - } + ostream.finishOutput(); + s = LispThread.currentThread().execute(f).getStringValue(); if (s.length() == 0) return -1; offset = 0; Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlotClass.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlotClass.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlotClass.java Fri Dec 25 09:27:34 2009 @@ -123,43 +123,39 @@ { if (isFinalized()) return; - try { - Debug.assertTrue(slotDefinitions == NIL); - LispObject cpl = getCPL(); - Debug.assertTrue(cpl != null); - Debug.assertTrue(cpl.listp()); - cpl = cpl.reverse(); - while (cpl != NIL) { - LispObject car = cpl.car(); - if (car instanceof StandardClass) { - StandardClass cls = (StandardClass) car; - LispObject defs = cls.getDirectSlotDefinitions(); - Debug.assertTrue(defs != null); - Debug.assertTrue(defs.listp()); - while (defs != NIL) { - slotDefinitions = slotDefinitions.push(defs.car()); - defs = defs.cdr(); - } + + Debug.assertTrue(slotDefinitions == NIL); + LispObject cpl = getCPL(); + Debug.assertTrue(cpl != null); + Debug.assertTrue(cpl.listp()); + cpl = cpl.reverse(); + while (cpl != NIL) { + LispObject car = cpl.car(); + if (car instanceof StandardClass) { + StandardClass cls = (StandardClass) car; + LispObject defs = cls.getDirectSlotDefinitions(); + Debug.assertTrue(defs != null); + Debug.assertTrue(defs.listp()); + while (defs != NIL) { + slotDefinitions = slotDefinitions.push(defs.car()); + defs = defs.cdr(); } - cpl = cpl.cdr(); } - slotDefinitions = slotDefinitions.nreverse(); - LispObject[] instanceSlotNames = new LispObject[slotDefinitions.length()]; - int i = 0; - LispObject tail = slotDefinitions; - while (tail != NIL) { - SlotDefinition slotDefinition = (SlotDefinition) tail.car(); - slotDefinition.setLocation(i); - instanceSlotNames[i++] = slotDefinition.getName(); - tail = tail.cdr(); - } - setClassLayout(new Layout(this, instanceSlotNames, NIL)); - setDefaultInitargs(computeDefaultInitargs()); - setFinalized(true); - } - catch (Throwable t) { - Debug.trace(t); + cpl = cpl.cdr(); } + slotDefinitions = slotDefinitions.nreverse(); + LispObject[] instanceSlotNames = new LispObject[slotDefinitions.length()]; + int i = 0; + LispObject tail = slotDefinitions; + while (tail != NIL) { + SlotDefinition slotDefinition = (SlotDefinition) tail.car(); + slotDefinition.setLocation(i); + instanceSlotNames[i++] = slotDefinition.getName(); + tail = tail.cdr(); + } + setClassLayout(new Layout(this, instanceSlotNames, NIL)); + setDefaultInitargs(computeDefaultInitargs()); + setFinalized(true); } // ### class-direct-slots Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlotDefinition.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlotDefinition.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SlotDefinition.java Fri Dec 25 09:27:34 2009 @@ -47,41 +47,27 @@ public SlotDefinition(LispObject name, LispObject readers) { this(); - try - { - Debug.assertTrue(name instanceof Symbol); - slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name; - slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL; - slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = - new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())); - slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers; - slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; - } - catch (Throwable t) - { - Debug.trace(t); - } + Debug.assertTrue(name instanceof Symbol); + slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name; + slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL; + slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = + new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())); + slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers; + slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; } public SlotDefinition(LispObject name, LispObject readers, LispObject initForm) { this(); - try - { - Debug.assertTrue(name instanceof Symbol); - slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name; - slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL; - slots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = initForm; - slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = - new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())); - slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers; - slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; - } - catch (Throwable t) - { - Debug.trace(t); - } + Debug.assertTrue(name instanceof Symbol); + slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name; + slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL; + slots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = initForm; + slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = + new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())); + slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers; + slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; } public static SlotDefinition checkSlotDefination(LispObject obj) { Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Symbol.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Symbol.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Symbol.java Fri Dec 25 09:27:34 2009 @@ -247,39 +247,23 @@ public final String getName() { - try - { - return name.getStringValue(); - } - catch (Throwable t) - { - Debug.trace(t); - return null; - } + return name.getStringValue(); } public final String getQualifiedName() { - try - { - final String n = name.getStringValue(); - if (pkg == NIL) - return("#:".concat(n)); - if (pkg == PACKAGE_KEYWORD) - return ":".concat(n); - FastStringBuffer sb = new FastStringBuffer(((Package)pkg).getName()); - if (((Package)pkg).findExternalSymbol(name) != null) - sb.append(':'); - else - sb.append("::"); - sb.append(n); - return sb.toString(); - } - catch (Throwable t) - { - Debug.trace(t); - return null; - } + final String n = name.getStringValue(); + if (pkg == NIL) + return("#:".concat(n)); + if (pkg == PACKAGE_KEYWORD) + return ":".concat(n); + FastStringBuffer sb = new FastStringBuffer(((Package)pkg).getName()); + if (((Package)pkg).findExternalSymbol(name) != null) + sb.append(':'); + else + sb.append("::"); + sb.append(n); + return sb.toString(); } /** Gets the value associated with the symbol Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SymbolHashTable.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SymbolHashTable.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/SymbolHashTable.java Fri Dec 25 09:27:34 2009 @@ -65,13 +65,8 @@ { HashEntry e = buckets[key.sxhash() & mask]; while (e != null) { - try { - if (key.equal(e.symbol.name)) - return e.symbol; // Return the symbol. - } - catch (Throwable t) { - Debug.trace(t); // Shouldn't happen. - } + if (key.equal(e.symbol.name)) + return e.symbol; // Return the symbol. e = e.next; } return null; @@ -81,13 +76,8 @@ { HashEntry e = buckets[hash & mask]; while (e != null) { - try { - if (key.equal(e.symbol.name)) - return e.symbol; // Return the symbol. - } - catch (Throwable t) { - Debug.trace(t); // Shouldn't happen. - } + if (key.equal(e.symbol.name)) + return e.symbol; // Return the symbol. e = e.next; } return null; @@ -98,19 +88,14 @@ int index = key.sxhash() & mask; HashEntry e = buckets[index]; while (e != null) { - try { - if (key.equal(e.symbol.name)) { - if (e.symbol != symbol) { - Debug.trace("replacing existing key for " + key.getStringValue() + - " in package " + e.symbol.getPackage().writeToString()); - Thread.dumpStack(); - e.symbol = symbol; - } - return; + if (key.equal(e.symbol.name)) { + if (e.symbol != symbol) { + Debug.trace("replacing existing key for " + key.getStringValue() + + " in package " + e.symbol.getPackage().writeToString()); + Thread.dumpStack(); + e.symbol = symbol; } - } - catch (Throwable t) { - Debug.trace(t); // FIXME + return; } e = e.next; } @@ -130,18 +115,13 @@ int index = symbol.sxhash() & mask; HashEntry e = buckets[index]; while (e != null) { - try { - if (symbol.name.equal(e.symbol.name)) { - if (e.symbol != symbol) { - Debug.trace("replacing existing key for " + symbol.getName()); - Thread.dumpStack(); - e.symbol = symbol; // Replace existing key. - } - return; + if (symbol.name.equal(e.symbol.name)) { + if (e.symbol != symbol) { + Debug.trace("replacing existing key for " + symbol.getName()); + Thread.dumpStack(); + e.symbol = symbol; // Replace existing key. } - } - catch (Throwable t) { - Debug.trace(t); // FIXME + return; } e = e.next; } @@ -164,18 +144,13 @@ HashEntry e = buckets[index]; HashEntry last = null; while (e != null) { - try { - if (key.equal(e.symbol.name)) { - if (last == null) - buckets[index] = e.next; - else - last.next = e.next; - --count; - return e.symbol; // The key is the value! - } - } - catch (Throwable t) { - Debug.trace(t); // FIXME + if (key.equal(e.symbol.name)) { + if (last == null) + buckets[index] = e.next; + else + last.next = e.next; + --count; + return e.symbol; // The key is the value! } last = e; e = e.next; Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Throw.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Throw.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/Throw.java Fri Dec 25 09:27:34 2009 @@ -56,13 +56,7 @@ @Override public LispObject getCondition() { - try { - return new ControlError("Attempt to throw to the nonexistent tag " + - tag.writeToString() + "."); - } - catch (Throwable t) { - Debug.trace(t); - return new Condition(); - } + return new ControlError("Attempt to throw to the nonexistent tag " + + tag.writeToString() + "."); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/TypeError.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/TypeError.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/TypeError.java Fri Dec 25 09:27:34 2009 @@ -129,48 +129,37 @@ @Override public String getMessage() { - // FIXME + final LispThread thread = LispThread.currentThread(); + final SpecialBindingsMark mark = thread.markSpecialBindings(); + thread.bindSpecial(Symbol.PRINT_ESCAPE, T); try { - final LispThread thread = LispThread.currentThread(); - final SpecialBindingsMark mark = thread.markSpecialBindings(); - thread.bindSpecial(Symbol.PRINT_ESCAPE, T); - try { - String s = super.getMessage(); - if (s != null) - return s; - final LispObject datum = getDatum(); - final LispObject expectedType = getExpectedType(); - FastStringBuffer sb = new FastStringBuffer(); - String name = datum != null ? datum.writeToString() : null; - String type = null; - if (expectedType != null) - type = expectedType.writeToString(); - if (type != null) { - if (name != null) { - sb.append("The value "); - sb.append(name); - } else - sb.append("Value"); - sb.append(" is not of type "); - sb.append(type); - } else if (name != null) { - sb.append("Wrong type: "); + String s = super.getMessage(); + if (s != null) + return s; + final LispObject datum = getDatum(); + final LispObject expectedType = getExpectedType(); + FastStringBuffer sb = new FastStringBuffer(); + String name = datum != null ? datum.writeToString() : null; + String type = null; + if (expectedType != null) + type = expectedType.writeToString(); + if (type != null) { + if (name != null) { + sb.append("The value "); sb.append(name); - } - sb.append('.'); - return sb.toString(); - } - catch (Throwable t) { - // FIXME - Debug.trace(t); - return toString(); - } - finally { - thread.resetSpecialBindings(mark); + } else + sb.append("Value"); + sb.append(" is not of type "); + sb.append(type); + } else if (name != null) { + sb.append("Wrong type: "); + sb.append(name); } + sb.append('.'); + return sb.toString(); } - catch (Throwable t) { - return toString(); + finally { + thread.resetSpecialBindings(mark); } } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/UnboundVariable.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/UnboundVariable.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/UnboundVariable.java Fri Dec 25 09:27:34 2009 @@ -54,12 +54,9 @@ final SpecialBindingsMark mark = thread.markSpecialBindings(); thread.bindSpecial(Symbol.PRINT_ESCAPE, T); StringBuffer sb = new StringBuffer("The variable "); - // FIXME - try - { + try { sb.append(getCellName().writeToString()); - } - catch (Throwable t) {} + } finally { thread.resetSpecialBindings(mark); } Modified: branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/WrongNumberOfArgumentsException.java ============================================================================== --- branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/WrongNumberOfArgumentsException.java (original) +++ branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/WrongNumberOfArgumentsException.java Fri Dec 25 09:27:34 2009 @@ -58,12 +58,7 @@ LispObject lambdaName = operator.getLambdaName(); if (lambdaName != null && lambdaName != NIL) { sb.append(" for "); - try { - sb.append(operator.getLambdaName().writeToString()); - } - catch (Throwable t) { - Debug.trace(t); - } + sb.append(operator.getLambdaName().writeToString()); } sb.append('.'); return sb.toString(); From ehuelsmann at common-lisp.net Fri Dec 25 21:52:27 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Fri, 25 Dec 2009 16:52:27 -0500 Subject: [armedbear-cvs] r12306 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Fri Dec 25 16:52:23 2009 New Revision: 12306 Log: Land fast-boot-preloading branch on trunk. Note: things to do include 1. Applying the same strategy to macro functions 2. Applying the same strategy to functions which get loaded during EVAL-WHEN when compiling Added: trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java - copied unchanged from r12305, /branches/fast-boot-preloading/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java Modified: trunk/abcl/src/org/armedbear/lisp/Autoload.java trunk/abcl/src/org/armedbear/lisp/CompiledClosure.java trunk/abcl/src/org/armedbear/lisp/Lisp.java trunk/abcl/src/org/armedbear/lisp/Load.java trunk/abcl/src/org/armedbear/lisp/Symbol.java trunk/abcl/src/org/armedbear/lisp/compile-file.lisp trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp Modified: trunk/abcl/src/org/armedbear/lisp/Autoload.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Autoload.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Autoload.java Fri Dec 25 16:52:23 2009 @@ -664,6 +664,13 @@ autoload(PACKAGE_SYS, "std-allocate-instance", "StandardObjectFunctions", true); autoload(PACKAGE_SYS, "zip", "zip", true); + autoload(PACKAGE_SYS, "proxy-preloaded-function", + "AutoloadedFunctionProxy", false); + autoload(PACKAGE_SYS, "make-function-preloading-context", + "AutoloadedFunctionProxy", false); + autoload(PACKAGE_SYS, "function-preload", + "AutoloadedFunctionProxy", false); + autoload(Symbol.COPY_LIST, "copy_list"); autoload(Symbol.SET_CHAR, "StringFunctions"); Modified: trunk/abcl/src/org/armedbear/lisp/CompiledClosure.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/CompiledClosure.java (original) +++ trunk/abcl/src/org/armedbear/lisp/CompiledClosure.java Fri Dec 25 16:52:23 2009 @@ -219,11 +219,13 @@ namestring = ((Pathname)arg).getNamestring(); else if (arg instanceof AbstractString) namestring = arg.getStringValue(); - if (namestring != null) - return loadCompiledFunction(namestring); + if (namestring != null) { + // Debug.trace("autoloading preloaded ... " + namestring); + return AutoloadedFunctionProxy.loadPreloadedFunction(namestring); + } if(arg instanceof JavaObject) { try { - return loadCompiledFunction((byte[]) arg.javaInstance(byte[].class)); + return loadClassBytes((byte[]) arg.javaInstance(byte[].class)); } catch(Throwable t) { Debug.trace(t); return error(new LispError("Unable to load " + arg.writeToString())); Modified: trunk/abcl/src/org/armedbear/lisp/Lisp.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Lisp.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Lisp.java Fri Dec 25 16:52:23 2009 @@ -288,7 +288,7 @@ { throw c; } - catch (Throwable t) + catch (Throwable t) // ControlTransfer handled above { Debug.trace(t); thread.setSpecialVariable(_SAVED_BACKTRACE_, @@ -1204,6 +1204,15 @@ public static final LispObject loadCompiledFunction(final String namestring) { + byte[] bytes = readFunctionBytes(namestring); + if (bytes != null) + return loadClassBytes(bytes); + + return null; + } + + public static final byte[] readFunctionBytes(final String namestring) + { final LispThread thread = LispThread.currentThread(); final boolean absolute = Utilities.isFilenameAbsolute(namestring); LispObject device = NIL; @@ -1276,8 +1285,7 @@ { long size = entry.getSize(); InputStream in = zipFile.getInputStream(entry); - LispObject obj = loadCompiledFunction(in, (int) size); - return obj != null ? obj : NIL; + return readFunctionBytes(in, (int) size); } else { @@ -1285,13 +1293,10 @@ entryName = defaultPathname.name.getStringValue() + "." + "abcl";//defaultPathname.type.getStringValue(); - byte in[] - = Utilities - .getZippedZipEntryAsByteArray(zipFile, + return Utilities + .getZippedZipEntryAsByteArray(zipFile, entryName, namestring); - LispObject o = loadCompiledFunction(in); - return o != null ? o : NIL; } } finally @@ -1301,88 +1306,107 @@ } } } + catch (VerifyError e) + { + error(new LispError("Class verification failed: " + + e.getMessage())); + return null; // not reached + } catch (IOException e) { Debug.trace(e); } } - return error(new LispError("Unable to load " + namestring)); + error(new LispError("Unable to load " + namestring)); + return null; // not reached } Pathname pathname = new Pathname(namestring); final File file = Utilities.getFile(pathname, defaultPathname); if (file != null && file.isFile()) { // The .cls file exists. - LispObject obj = null; - try { - obj = loadCompiledFunction(new FileInputStream(file), - (int) file.length()); - } - catch (FileNotFoundException e) { - return error(new LispError("Unable to load " + - pathname.writeToString() + ": Not found.")); + try + { + byte[] bytes = readFunctionBytes(new FileInputStream(file), + (int) file.length()); + // FIXME close stream! + if (bytes != null) + return bytes; + } + catch (FileNotFoundException fnf) { + error(new LispError("Unable to load " + pathname.writeToString() + + ": " + fnf.getMessage())); + return null; // not reached } - // FIXME close stream! - if (obj != null) - return obj; - return error(new LispError("Unable to load " + - pathname.writeToString())); - } - LispObject loadTruename = Symbol.LOAD_TRUENAME.symbolValue(thread); - String zipFileName = ((Pathname)loadTruename).getNamestring(); - ZipFile zipFile = null; + return null; // not reached + } try { - zipFile = ZipCache.getZip(zipFileName); - ZipEntry entry = zipFile.getEntry(namestring); - if (entry != null) + LispObject loadTruename = Symbol.LOAD_TRUENAME.symbolValue(thread); + String zipFileName = ((Pathname)loadTruename).getNamestring(); + ZipFile zipFile = ZipCache.getZip(zipFileName); + try { - LispObject obj = null; - try { - obj = loadCompiledFunction(zipFile.getInputStream(entry), - (int) entry.getSize()); - } - catch (IOException ignore) { }; - if (obj != null) - return obj; - Debug.trace("Unable to load " + namestring); - return error(new LispError("Unable to load " + namestring)); + ZipEntry entry = zipFile.getEntry(namestring); + if (entry != null) + { + byte[] bytes = readFunctionBytes(zipFile.getInputStream(entry), + (int) entry.getSize()); + if (bytes != null) + return bytes; + Debug.trace("Unable to load " + namestring); + error(new LispError("Unable to load " + namestring)); + return null; // not reached + } + } + finally + { + ZipCache.removeZip(zipFile.getName()); } } - catch (IOException ignore) { - //ignore IOException from ZipCache.getZip() - } - finally + catch (IOException t) { - try { - ZipCache.removeZip(zipFile.getName()); + Debug.trace(t); + } + error(new FileError("File not found: " + namestring, + new Pathname(namestring))); + return null; // not reached + } + + public static final Function makeCompiledFunctionFromClass(Class c) { + try { + if (c != null) { + Function obj = (Function)c.newInstance(); + return obj; + } else { + return null; } - catch (IOException ignore) { } // ignore } - return error(new FileError("File not found: " + namestring, - new Pathname(namestring))); - } + catch (InstantiationException e) {} // ### FIXME + catch (IllegalAccessException e) {} // ### FIXME - public static final LispObject makeCompiledFunctionFromClass(Class c) { - if (c != null) - try { - return (LispObject)c.newInstance(); - } - catch (InstantiationException ignore) { - // ignore - } - catch (IllegalAccessException ignore) { - // ignore - } - return null; + return null; } - private static final LispObject loadCompiledFunction(InputStream in, int size) + + public static final LispObject loadCompiledFunction(InputStream in, int size) { - byte[] bytes = new byte[size]; - int bytesRemaining = size; - int bytesRead = 0; - try { + byte[] bytes = readFunctionBytes(in, size); + if (bytes != null) + return loadClassBytes(bytes); + else + return error(new FileError("Can't read file off stream.")); + } + + + + private static final byte[] readFunctionBytes(InputStream in, int size) + { + try + { + byte[] bytes = new byte[size]; + int bytesRemaining = size; + int bytesRead = 0; while (bytesRemaining > 0) { int n = in.read(bytes, bytesRead, bytesRemaining); @@ -1392,27 +1416,32 @@ bytesRemaining -= n; } in.close(); - } - catch (IOException e) { - return null; // fixme: return an error? - } - if (bytesRemaining > 0) - Debug.trace("bytesRemaining = " + bytesRemaining); + if (bytesRemaining > 0) + Debug.trace("bytesRemaining = " + bytesRemaining); - return loadCompiledFunction(bytes); + return bytes; + } + catch (IOException t) + { + Debug.trace(t); // FIXME: call error()? + } + return null; } - public static final LispObject loadCompiledFunction(byte[] bytes) { - return loadCompiledFunction(bytes, new JavaClassLoader()); + public static final Function loadClassBytes(byte[] bytes) + { + return loadClassBytes(bytes, new JavaClassLoader()); } - public static final LispObject loadCompiledFunction(byte[] bytes, JavaClassLoader cl) { + public static final Function loadClassBytes(byte[] bytes, + JavaClassLoader cl) + { Class c = cl.loadClassFromByteArray(null, bytes, 0, bytes.length); - LispObject obj = makeCompiledFunctionFromClass(c); - if (obj instanceof Function) { - ((Function)obj).setClassBytes(bytes); - } - return obj; + Function obj = makeCompiledFunctionFromClass(c); + if (obj != null) { + obj.setClassBytes(bytes); + } + return obj; } @@ -2442,6 +2471,10 @@ public static final Symbol _AUTOLOAD_VERBOSE_ = exportSpecial("*AUTOLOAD-VERBOSE*", PACKAGE_EXT, NIL); + // ### *preloading-cache* + public static final Symbol AUTOLOADING_CACHE = + internSpecial("*AUTOLOADING-CACHE*", PACKAGE_SYS, NIL); + // ### *compile-file-type* public static final String COMPILE_FILE_TYPE = "abcl"; public static final Symbol _COMPILE_FILE_TYPE_ = Modified: trunk/abcl/src/org/armedbear/lisp/Load.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Load.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Load.java Fri Dec 25 16:52:23 2009 @@ -44,6 +44,7 @@ import java.io.InputStream; import java.net.URL; import java.net.URLDecoder; +import java.util.Hashtable; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; @@ -606,6 +607,8 @@ LispObject result = NIL; try { thread.bindSpecial(_FASL_ANONYMOUS_PACKAGE_, new Package()); + thread.bindSpecial(AUTOLOADING_CACHE, + AutoloadedFunctionProxy.makePreloadingContext()); while (true) { LispObject obj = in.faslRead(false, EOF, true, thread); if (obj == EOF) Modified: trunk/abcl/src/org/armedbear/lisp/Symbol.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Symbol.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Symbol.java Fri Dec 25 16:52:23 2009 @@ -3014,10 +3014,14 @@ PACKAGE_SYS.addInternalSymbol("FORMAT-CONTROL"); public static final Symbol FSET = PACKAGE_SYS.addInternalSymbol("FSET"); + public static final Symbol FUNCTION_PRELOAD = + PACKAGE_SYS.addInternalSymbol("FUNCTION-PRELOAD"); public static final Symbol INSTANCE = PACKAGE_SYS.addInternalSymbol("INSTANCE"); public static final Symbol MACROEXPAND_MACRO = PACKAGE_SYS.addInternalSymbol("MACROEXPAND-MACRO"); + public static final Symbol MAKE_FUNCTION_PRELOADING_CONTEXT = + PACKAGE_SYS.addInternalSymbol("MAKE-FUNCTION-PRELOADING-CONTEXT"); public static final Symbol NAME = PACKAGE_SYS.addInternalSymbol("NAME"); public static final Symbol OBJECT = @@ -3026,6 +3030,8 @@ PACKAGE_SYS.addInternalSymbol("OPERANDS"); public static final Symbol OPERATION = PACKAGE_SYS.addInternalSymbol("OPERATION"); + public static final Symbol PROXY_PRELOADED_FUNCTION = + PACKAGE_SYS.addInternalSymbol("PROXY-PRELOADED-FUNCTION"); public static final Symbol _SOURCE = PACKAGE_SYS.addInternalSymbol("%SOURCE"); public static final Symbol SOCKET_STREAM = Modified: trunk/abcl/src/org/armedbear/lisp/compile-file.lisp ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/compile-file.lisp (original) +++ trunk/abcl/src/org/armedbear/lisp/compile-file.lisp Fri Dec 25 16:52:23 2009 @@ -160,7 +160,7 @@ (compiled-function (setf form `(fset ',name - (load-compiled-function ,(file-namestring classfile)) + (proxy-preloaded-function ',name ,(file-namestring classfile)) ,*source-position* ',lambda-list ,doc)) @@ -484,6 +484,8 @@ (type (pathname-type output-file)) (temp-file (merge-pathnames (make-pathname :type (concatenate 'string type "-tmp")) output-file)) + (temp-file2 (merge-pathnames (make-pathname :type (concatenate 'string type "-tmp2")) + output-file)) (warnings-p nil) (failure-p nil)) (with-open-file (in input-file :direction :input) @@ -510,15 +512,6 @@ *forms-for-output*) (jvm::with-saved-compiler-policy (jvm::with-file-compilation - (write "; -*- Mode: Lisp -*-" :escape nil :stream out) - (%stream-terpri out) - (let ((*package* (find-package '#:cl))) - (write (list 'init-fasl :version *fasl-version*) - :stream out) - (%stream-terpri out) - (write (list 'setq '*source* *compile-file-truename*) - :stream out) - (%stream-terpri out)) (handler-bind ((style-warning #'(lambda (c) (setf warnings-p t) ;; let outer handlers @@ -544,7 +537,34 @@ (finalize-fasl-output) (dolist (name *fbound-names*) (fmakunbound name))))))) - (rename-file temp-file output-file) + (with-open-file (in temp-file :direction :input) + (with-open-file (out temp-file2 :direction :output + :if-does-not-exist :create + :if-exists :supersede) + ;; write header + (write "; -*- Mode: Lisp -*-" :escape nil :stream out) + (%stream-terpri out) + (let ((*package* (find-package '#:cl)) + (count-sym (gensym))) + (write (list 'init-fasl :version *fasl-version*) + :stream out) + (%stream-terpri out) + (write (list 'setq '*source* *compile-file-truename*) + :stream out) + (%stream-terpri out) + (dump-form `(dotimes (,count-sym ,*class-number*) + (function-preload + (%format nil "~A-~D.cls" ,(pathname-name output-file) + (1+ ,count-sym)))) out) + (%stream-terpri out)) + + + ;; copy remaining content + (loop for line = (read-line in nil :eof) + while (not (eq line :eof)) + do (write-line line out)))) + (delete-file temp-file) + (rename-file temp-file2 output-file) (when *compile-file-zip* (let* ((type ;; Don't use ".zip", it'll result in an extension Modified: trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp (original) +++ trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp Fri Dec 25 16:52:23 2009 @@ -2070,7 +2070,7 @@ ;; fixme *declare-inline* (declare-field g +lisp-object+ +field-access-default+) (emit 'ldc (pool-string (file-namestring pathname))) - (emit-invokestatic +lisp-class+ "loadCompiledFunction" + (emit-invokestatic "org/armedbear/lisp/AutoloadedFunctionProxy" "loadPreloadedFunction" (list +java-string+) +lisp-object+) (emit 'putstatic *this-class* g +lisp-object+) (setf *static-code* *code*) From ehuelsmann at common-lisp.net Fri Dec 25 21:54:32 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Fri, 25 Dec 2009 16:54:32 -0500 Subject: [armedbear-cvs] r12307 - in trunk/abcl/examples/abcl: interface_implementation_in_lisp java_exception_in_lisp javacall_from_lisp lispcall_from_java_simple lispcall_from_java_with_params_and_return Message-ID: Author: ehuelsmann Date: Fri Dec 25 16:54:31 2009 New Revision: 12307 Log: Complete "catch (Throwable" review by reviewing ../examples. Modified: trunk/abcl/examples/abcl/interface_implementation_in_lisp/Main.java trunk/abcl/examples/abcl/java_exception_in_lisp/Main.java trunk/abcl/examples/abcl/javacall_from_lisp/Main.java trunk/abcl/examples/abcl/lispcall_from_java_simple/Main.java trunk/abcl/examples/abcl/lispcall_from_java_simple/MainAlternative.java trunk/abcl/examples/abcl/lispcall_from_java_with_params_and_return/Main.java Modified: trunk/abcl/examples/abcl/interface_implementation_in_lisp/Main.java ============================================================================== --- trunk/abcl/examples/abcl/interface_implementation_in_lisp/Main.java (original) +++ trunk/abcl/examples/abcl/interface_implementation_in_lisp/Main.java Fri Dec 25 16:54:31 2009 @@ -63,7 +63,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: trunk/abcl/examples/abcl/java_exception_in_lisp/Main.java ============================================================================== --- trunk/abcl/examples/abcl/java_exception_in_lisp/Main.java (original) +++ trunk/abcl/examples/abcl/java_exception_in_lisp/Main.java Fri Dec 25 16:54:31 2009 @@ -52,7 +52,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: trunk/abcl/examples/abcl/javacall_from_lisp/Main.java ============================================================================== --- trunk/abcl/examples/abcl/javacall_from_lisp/Main.java (original) +++ trunk/abcl/examples/abcl/javacall_from_lisp/Main.java Fri Dec 25 16:54:31 2009 @@ -52,7 +52,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: trunk/abcl/examples/abcl/lispcall_from_java_simple/Main.java ============================================================================== --- trunk/abcl/examples/abcl/lispcall_from_java_simple/Main.java (original) +++ trunk/abcl/examples/abcl/lispcall_from_java_simple/Main.java Fri Dec 25 16:54:31 2009 @@ -38,7 +38,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: trunk/abcl/examples/abcl/lispcall_from_java_simple/MainAlternative.java ============================================================================== --- trunk/abcl/examples/abcl/lispcall_from_java_simple/MainAlternative.java (original) +++ trunk/abcl/examples/abcl/lispcall_from_java_simple/MainAlternative.java Fri Dec 25 16:54:31 2009 @@ -47,7 +47,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } Modified: trunk/abcl/examples/abcl/lispcall_from_java_with_params_and_return/Main.java ============================================================================== --- trunk/abcl/examples/abcl/lispcall_from_java_with_params_and_return/Main.java (original) +++ trunk/abcl/examples/abcl/lispcall_from_java_with_params_and_return/Main.java Fri Dec 25 16:54:31 2009 @@ -65,7 +65,7 @@ } catch (Throwable t) { - System.out.println("abcl exception!"); + System.out.println("exception!"); t.printStackTrace(); } } From ehuelsmann at common-lisp.net Fri Dec 25 22:09:04 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Fri, 25 Dec 2009 17:09:04 -0500 Subject: [armedbear-cvs] r12308 - branches/fast-boot-preloading Message-ID: Author: ehuelsmann Date: Fri Dec 25 17:09:03 2009 New Revision: 12308 Log: Delete branch: it's merged back to trunk. Removed: branches/fast-boot-preloading/ From ehuelsmann at common-lisp.net Fri Dec 25 22:34:54 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Fri, 25 Dec 2009 17:34:54 -0500 Subject: [armedbear-cvs] r12309 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Fri Dec 25 17:34:53 2009 New Revision: 12309 Log: Turn an inline named class name into a string constant. Modified: trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp Modified: trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp (original) +++ trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp Fri Dec 25 17:34:53 2009 @@ -220,6 +220,8 @@ (defconstant +lisp-fixnum-class+ "org/armedbear/lisp/Fixnum") (defconstant +lisp-fixnum+ "Lorg/armedbear/lisp/Fixnum;") (defconstant +lisp-fixnum-array+ "[Lorg/armedbear/lisp/Fixnum;") +(defconstant +lisp-function-proxy-class+ + "org/armedbear/lisp/AutoloadedFunctionProxy") (defconstant +lisp-bignum-class+ "org/armedbear/lisp/Bignum") (defconstant +lisp-bignum+ "Lorg/armedbear/lisp/Bignum;") (defconstant +lisp-single-float-class+ "org/armedbear/lisp/SingleFloat") @@ -2070,7 +2072,7 @@ ;; fixme *declare-inline* (declare-field g +lisp-object+ +field-access-default+) (emit 'ldc (pool-string (file-namestring pathname))) - (emit-invokestatic "org/armedbear/lisp/AutoloadedFunctionProxy" "loadPreloadedFunction" + (emit-invokestatic +lisp-function-proxy-class+ "loadPreloadedFunction" (list +java-string+) +lisp-object+) (emit 'putstatic *this-class* g +lisp-object+) (setf *static-code* *code*) From ehuelsmann at common-lisp.net Mon Dec 28 13:00:56 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Mon, 28 Dec 2009 08:00:56 -0500 Subject: [armedbear-cvs] r12310 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Mon Dec 28 08:00:31 2009 New Revision: 12310 Log: Implement note 1 from r12306: function preloading for macros. Modified: trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java trunk/abcl/src/org/armedbear/lisp/Lisp.java trunk/abcl/src/org/armedbear/lisp/compile-file.lisp Modified: trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java (original) +++ trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java Mon Dec 28 08:00:31 2009 @@ -41,27 +41,31 @@ public class AutoloadedFunctionProxy extends Function { + public enum FunctionType + { + NORMAL, SETF, MACRO + }; + final private Symbol symbol; final private String name; final private LispObject cache; final private LispObject pack; final private LispObject anonymousPackage; - final private boolean isSetfFunction; + final private FunctionType fType; Function fun = null; public AutoloadedFunctionProxy(Symbol symbol, LispObject name, LispObject cache, LispObject pack, LispObject anonymousPackage, - boolean setfFunction) { + FunctionType ft) { super(); this.symbol = symbol; this.name = name.getStringValue(); this.cache = cache; this.pack = pack; - // Debug.trace("proxying ... " + name.getStringValue()); Debug.assertTrue(! (cache instanceof Nil)); this.anonymousPackage = anonymousPackage; - this.isSetfFunction = setfFunction; + this.fType = ft; } final private synchronized Function load() { @@ -86,16 +90,27 @@ thread.resetSpecialBindings(mark); } - if (symbol != null) { - if (isSetfFunction) - put(symbol, Symbol.SETF_FUNCTION, fun); - else - symbol.setSymbolFunction(fun); - } + if (symbol != null) + installFunction(fType, symbol, fun); return fun; } + final static private void installFunction(FunctionType fType, + Symbol sym, Function fun) { + + if (fType == FunctionType.SETF) + put(sym, Symbol.SETF_FUNCTION, fun); + else if (fType == FunctionType.MACRO) { + if (sym.getSymbolFunction() instanceof SpecialOperator) + put(sym, Symbol.MACROEXPAND_MACRO, + new MacroObject(sym, fun)); + else + sym.setSymbolFunction(new MacroObject(sym, fun)); + } else + sym.setSymbolFunction(fun); + } + @Override public LispObject execute() { @@ -214,14 +229,17 @@ final public LispObject execute(LispObject symbol, LispObject name) { LispThread thread = LispThread.currentThread(); Symbol sym; - LispObject fun; - boolean setfFun = false; + Function fun; + FunctionType fType = FunctionType.NORMAL; if (symbol instanceof Symbol) sym = (Symbol)symbol; else if (isValidSetfFunctionName(symbol)) { sym = (Symbol)symbol.cadr(); - setfFun = true; + fType = FunctionType.SETF; + } else if (isValidMacroFunctionName(symbol)) { + sym = (Symbol)symbol.cadr(); + fType = FunctionType.MACRO; } else { checkSymbol(symbol); // generate an error return null; // not reached @@ -235,11 +253,9 @@ else { fun = new AutoloadedFunctionProxy(sym, name, cache, pack, Load._FASL_ANONYMOUS_PACKAGE_.symbolValue(thread), - setfFun); - if (setfFun) - put(sym, Symbol.SETF_FUNCTION, fun); - else - sym.setSymbolFunction(fun); + fType); + + installFunction(fType, sym, fun); } return fun; Modified: trunk/abcl/src/org/armedbear/lisp/Lisp.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Lisp.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Lisp.java Mon Dec 28 08:00:31 2009 @@ -1478,6 +1478,21 @@ return false; } + public static final boolean isValidMacroFunctionName(LispObject obj) + { + if (obj instanceof Cons) + { + Cons cons = (Cons) obj; + if (cons.car == Symbol.MACRO_FUNCTION && cons.cdr instanceof Cons) + { + Cons cdr = (Cons) cons.cdr; + return (cdr.car instanceof Symbol && cdr.cdr == NIL); + } + } + return false; + } + + public static final LispObject FUNCTION_NAME = list(Symbol.OR, Symbol.SYMBOL, Modified: trunk/abcl/src/org/armedbear/lisp/compile-file.lisp ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/compile-file.lisp (original) +++ trunk/abcl/src/org/armedbear/lisp/compile-file.lisp Mon Dec 28 08:00:31 2009 @@ -224,11 +224,13 @@ (if (special-operator-p name) `(put ',name 'macroexpand-macro (make-macro ',name - (load-compiled-function + (proxy-preloaded-function + '(macro-function ,name) ,(file-namestring classfile)))) `(fset ',name (make-macro ',name - (load-compiled-function + (proxy-preloaded-function + '(macro-function ,name) ,(file-namestring classfile))) ,*source-position* ',(third form))))))))) From ehuelsmann at common-lisp.net Mon Dec 28 23:11:39 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Mon, 28 Dec 2009 18:11:39 -0500 Subject: [armedbear-cvs] r12311 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Mon Dec 28 18:11:35 2009 New Revision: 12311 Log: Followup to r12306: "unbreak" Slime, at least partially. Modified: trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java trunk/abcl/src/org/armedbear/lisp/LispObject.java trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp Modified: trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java (original) +++ trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java Mon Dec 28 18:11:35 2009 @@ -68,6 +68,12 @@ this.fType = ft; } + /** Resolve this instance by returning the function we're proxy for */ + @Override + public LispObject resolve() { + return load(); + } + final private synchronized Function load() { if (fun != null) return fun; @@ -249,6 +255,9 @@ LispObject pack = Symbol._PACKAGE_.symbolValue(thread); if (cache instanceof Nil) + // during EVAL-WHEN :compile-toplevel, this function will + // be called without a caching environment; we'll need to + // forward to the compiled function loader return loadCompiledFunction(name.getStringValue()); else { fun = new AutoloadedFunctionProxy(sym, name, cache, pack, Modified: trunk/abcl/src/org/armedbear/lisp/LispObject.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/LispObject.java (original) +++ trunk/abcl/src/org/armedbear/lisp/LispObject.java Mon Dec 28 18:11:35 2009 @@ -38,6 +38,16 @@ public class LispObject //extends Lisp { + + /** Function to allow objects to return the value + * "they stand for". Used by AutoloadedFunctionProxy to return + * the function it is proxying. + */ + public LispObject resolve() + { + return this; + } + public LispObject typeOf() { return T; Modified: trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp (original) +++ trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp Mon Dec 28 18:11:35 2009 @@ -2048,6 +2048,10 @@ "getSymbolSetfFunctionOrDie" "getSymbolFunctionOrDie") nil +lisp-object+) + ;; make sure we're not cacheing a proxied function + ;; (AutoloadedFunctionProxy) by allowing it to resolve itself + (emit-invokevirtual +lisp-object-class+ + "resolve" nil +lisp-object+) (emit 'putstatic *this-class* f +lisp-object+) (if *declare-inline* (setf saved-code *code*) From ehuelsmann at common-lisp.net Mon Dec 28 23:12:35 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Mon, 28 Dec 2009 18:12:35 -0500 Subject: [armedbear-cvs] r12312 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Mon Dec 28 18:12:34 2009 New Revision: 12312 Log: Add a function interface to test whether the interpreter is already initialized. Modified: trunk/abcl/src/org/armedbear/lisp/Interpreter.java Modified: trunk/abcl/src/org/armedbear/lisp/Interpreter.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Interpreter.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Interpreter.java Mon Dec 28 18:12:34 2009 @@ -121,6 +121,10 @@ return interpreter; } + public static boolean initialized() { + return interpreter != null; + } + private Interpreter() { jlisp = false; From ehuelsmann at common-lisp.net Tue Dec 29 22:58:43 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Tue, 29 Dec 2009 17:58:43 -0500 Subject: [armedbear-cvs] r12313 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Tue Dec 29 17:58:40 2009 New Revision: 12313 Log: Fix LOAD-TIME-VALUE instability introduced by r12306, best seen as failures in CLOS. Modified: trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java Modified: trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java (original) +++ trunk/abcl/src/org/armedbear/lisp/AutoloadedFunctionProxy.java Tue Dec 29 17:58:40 2009 @@ -46,25 +46,35 @@ NORMAL, SETF, MACRO }; + /** List of symbols that need to be saved upon instantiation of a + * proxy and restored while loading the actual function. + */ + final static private Symbol[] symsToSave = + new Symbol[] + { + AUTOLOADING_CACHE, // allow loading local preloaded functions + Load._FASL_ANONYMOUS_PACKAGE_, // package for uninterned symbols + Symbol._PACKAGE_, // current package + Symbol.LOAD_TRUENAME // LOAD-TIME-VALUE depends on this + }; + final private Symbol symbol; final private String name; final private LispObject cache; - final private LispObject pack; - final private LispObject anonymousPackage; + final private LispObject[] savedSyms; final private FunctionType fType; Function fun = null; public AutoloadedFunctionProxy(Symbol symbol, LispObject name, - LispObject cache, LispObject pack, - LispObject anonymousPackage, + LispObject cache, + LispObject[] savedSyms, FunctionType ft) { super(); this.symbol = symbol; this.name = name.getStringValue(); this.cache = cache; - this.pack = pack; + this.savedSyms = savedSyms; Debug.assertTrue(! (cache instanceof Nil)); - this.anonymousPackage = anonymousPackage; this.fType = ft; } @@ -81,9 +91,9 @@ LispThread thread = LispThread.currentThread(); SpecialBindingsMark mark = thread.markSpecialBindings(); - thread.bindSpecial(AUTOLOADING_CACHE, cache); - thread.bindSpecial(Load._FASL_ANONYMOUS_PACKAGE_, anonymousPackage); - thread.bindSpecial(Symbol._PACKAGE_, pack); + for (int i = 0; i < symsToSave.length; i++) + thread.bindSpecial(symsToSave[i], savedSyms[i]); + byte[] classbytes = (byte[])((Hashtable)cache.javaInstance()).get(name); try { @@ -208,6 +218,9 @@ Hashtable cache = (Hashtable)value.javaInstance(); byte[] bytes = (byte[])cache.get(name); + if (bytes == null) + return error(new LispError("Function '" + name + "' not preloaded" + + " while preloading requested.")); try { return loadClassBytes(bytes); } @@ -252,17 +265,18 @@ } LispObject cache = AUTOLOADING_CACHE.symbolValue(thread); - LispObject pack = Symbol._PACKAGE_.symbolValue(thread); - if (cache instanceof Nil) // during EVAL-WHEN :compile-toplevel, this function will // be called without a caching environment; we'll need to // forward to the compiled function loader return loadCompiledFunction(name.getStringValue()); else { - fun = new AutoloadedFunctionProxy(sym, name, cache, pack, - Load._FASL_ANONYMOUS_PACKAGE_.symbolValue(thread), - fType); + LispObject[] cachedSyms = new LispObject[symsToSave.length]; + for (int i = 0; i < symsToSave.length; i++) + cachedSyms[i] = symsToSave[i].symbolValue(thread); + + fun = new AutoloadedFunctionProxy(sym, name, cache, + cachedSyms, fType); installFunction(fType, sym, fun); } From ehuelsmann at common-lisp.net Wed Dec 30 22:04:58 2009 From: ehuelsmann at common-lisp.net (Erik Huelsmann) Date: Wed, 30 Dec 2009 17:04:58 -0500 Subject: [armedbear-cvs] r12314 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: ehuelsmann Date: Wed Dec 30 17:04:55 2009 New Revision: 12314 Log: Upon OutOfMemoryError or StackOverflowError, unwind the stack to the first enclosing HANDLER-BIND, allowing it to bind a handler to STORAGE-CONDITION. Modified: trunk/abcl/src/org/armedbear/lisp/Java.java trunk/abcl/src/org/armedbear/lisp/signal.lisp Modified: trunk/abcl/src/org/armedbear/lisp/Java.java ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/Java.java (original) +++ trunk/abcl/src/org/armedbear/lisp/Java.java Wed Dec 30 17:04:55 2009 @@ -930,7 +930,28 @@ } } }; - + + + private static final Primitive JRUN_EXCEPTION_PROTECTED = + new Primitive("jrun-exception-protected", PACKAGE_JAVA, true, + "closure") { + + @Override + public LispObject execute(LispObject closure) { + Function fun = checkFunction(closure); + + try { + return LispThread.currentThread().execute(closure); + } + catch (OutOfMemoryError oom) { + return error(new StorageCondition("Out of memory.")); + } + catch (StackOverflowError oos) { + return error(new StorageCondition("Stack overflow.")); + } + } + }; + private static PropertyDescriptor getPropertyDescriptor(Object obj, LispObject propertyName) throws IntrospectionException { String prop = ((AbstractString) propertyName).getStringValue(); BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); Modified: trunk/abcl/src/org/armedbear/lisp/signal.lisp ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/signal.lisp (original) +++ trunk/abcl/src/org/armedbear/lisp/signal.lisp Wed Dec 30 17:04:55 2009 @@ -105,8 +105,10 @@ (cons (list ,@(mapcar (lambda (x) `(cons ',(car x) ,(cadr x))) bindings)) *handler-clusters*))) - (progn - , at forms))) + (java:jrun-exception-protected + (lambda () + (progn + , at forms))))) (defmacro handler-case (form &rest cases) (let ((no-error-clause (assoc ':no-error cases))) From astalla at common-lisp.net Wed Dec 30 22:46:35 2009 From: astalla at common-lisp.net (Alessio Stalla) Date: Wed, 30 Dec 2009 17:46:35 -0500 Subject: [armedbear-cvs] r12315 - trunk/abcl/src/org/armedbear/lisp Message-ID: Author: astalla Date: Wed Dec 30 17:46:31 2009 New Revision: 12315 Log: Implemented (setf jfield). Modified: trunk/abcl/src/org/armedbear/lisp/java.lisp Modified: trunk/abcl/src/org/armedbear/lisp/java.lisp ============================================================================== --- trunk/abcl/src/org/armedbear/lisp/java.lisp (original) +++ trunk/abcl/src/org/armedbear/lisp/java.lisp Wed Dec 30 17:46:31 2009 @@ -217,6 +217,14 @@ "Returns the name of FIELD as a Lisp string" (jcall (jmethod "java.lang.reflect.Field" "getName") field)) + +(defun (setf jfield) (newvalue class-ref-or-field field-or-instance + &optional (instance nil instance-supplied-p) unused-value) + (declare (ignore unused-value)) + (if instance-supplied-p + (jfield class-ref-or-field field-or-instance instance newvalue) + (jfield class-ref-or-field field-or-instance newvalue))) + (defun jclass-methods (class &key declared public) "Return a vector of all (or just the declared/public, if DECLARED/PUBLIC is true) methods of CLASS" (let* ((getter (if declared "getDeclaredMethods" "getMethods")) @@ -227,9 +235,13 @@ "Returns a vector of parameter types (Java classes) for METHOD" (jcall (jmethod "java.lang.reflect.Method" "getParameterTypes") method)) -;; (defun jmethod-return-type (method) -;; "Returns the result type (Java class) of the METHOD" -;; (jcall (jmethod "java.lang.reflect.Method" "getReturnType") method)) +(defun jmethod-return-type (method) + "Returns the result type (Java class) of the METHOD" + (jcall (jmethod "java.lang.reflect.Method" "getReturnType") method)) + +(defun jmethod-declaring-class (method) + "Returns the Java class declaring METHOD" + (jcall (jmethod "java.lang.reflect.Method" "getDeclaringClass") method)) (defun jmethod-name (method) "Returns the name of METHOD as a Lisp string"