From mevenson at common-lisp.net Sun Jan 1 21:25:04 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Sun, 01 Jan 2012 13:25:04 -0800
Subject: [armedbear-cvs] r13711 - trunk/abcl/tools
Message-ID:
Author: mevenson
Date: Sun Jan 1 13:25:03 2012
New Revision: 13711
Log:
Use the hg bisect command to search for where an ANSI test breaks.
A local copy of the ABCL source tree for the revision at which a given
ANSI-TESTS test breaks.
The code currently uses the failure of the test named by the symbol in
*TEST* to decide if a given revision is a "good" or "bad" changeset.
A Mercurial copy of the ABCL sources may be cloned from
.
Added:
trunk/abcl/tools/check.sh
Added: trunk/abcl/tools/check.sh
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/abcl/tools/check.sh Sun Jan 1 13:25:03 2012 (r13711)
@@ -0,0 +1,2 @@
+#!/bin/sh
+A
From mevenson at common-lisp.net Sun Jan 1 21:29:06 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Sun, 01 Jan 2012 13:29:06 -0800
Subject: [armedbear-cvs] r13712 - trunk/abcl/tools
Message-ID:
Author: mevenson
Date: Sun Jan 1 13:29:05 2012
New Revision: 13712
Log:
Correctly commit 'tools/check.lisp' not its generated wrapper.
Use GENERATE-BISECT-WRAPPER to generate the check.sh wrapper. This
should be generalized to the Windows 'check.bat' equivalent.
Added:
trunk/abcl/tools/check.lisp
Deleted:
trunk/abcl/tools/check.sh
Added: trunk/abcl/tools/check.lisp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/abcl/tools/check.lisp Sun Jan 1 13:29:05 2012 (r13712)
@@ -0,0 +1,42 @@
+;;;; Run a bisection tool to determine where a test fails
+;;; This file is in the public domain.
+;;; Copyright (C) 2012 by Mark
+(in-package :cl-user)
+
+(defun generate-bisect-wrapper ()
+ "Create 'check.sh', a script suitable for use with hg bisect.
+
+ To use, adjust the contents of the *TESTS*
+
+ hg clone https://evenson.not.org at code.google.com/p/abcl-dynamic-install/ ./abcl
+&& cd abcl
+&& hg bisect --reset && hg bisect --good && hg --command sh ./check.sh
+"
+ (let ((check.sh #p"check.sh"))
+ (unless (probe-file check.sh)
+ (with-open-file (output check.sh :direction :output)
+ (format output "#!/bin/sh~A~%"
+ "ant && ./abcl --noinit --batch --eval \"(load \\\"check.lisp\\\"")))))
+
+;;; XXX separate out runtime yucky top-level forms
+(require :asdf)
+(require :abcl-contrib)
+(require :asdf-install) ;;; to push "~/.asdf-install-dir/systems/" into ASDF:*CENTRAL-REGISTRY*
+
+
+
+;;; The ASDF definition for ANSI-COMPILED contains the ANSI-TESTS package.
+;;; The CL-TEST package is defined by the GCL ANSI tests.
+(eval-when (:load-toplevel :execute)
+ (asdf:load-system :abcl)
+ (asdf:load-system :ansi-compiled)
+ (ansi-tests:load-tests)) ;; TODO figure out how to not load all the tests
+
+(defparameter *test*
+ 'CL-TEST::SYNTAX.SHARP-BACKSLASH.7)
+
+(unless (rt:do-test *test*)
+ (error "~A failed" *test*))
+
+
+
From mevenson at common-lisp.net Wed Jan 4 13:44:29 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Wed, 04 Jan 2012 05:44:29 -0800
Subject: [armedbear-cvs] r13713 - trunk/abcl/src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Wed Jan 4 05:44:27 2012
New Revision: 13713
Log:
[PATCH 1/2] add class METAOBJECT, splice it into mop class
>From 0d36155221ec6ac028cde6ba3741253e618773e9 Mon Sep 17 00:00:00 2001
hierarchy.
... see AMOP table 5.1
---
src/org/armedbear/lisp/GenericFunction.java | 2 +-
src/org/armedbear/lisp/Metaobject.java | 52 +++++++++++++++++++++++++++
src/org/armedbear/lisp/StandardClass.java | 40 ++++++++++++---------
src/org/armedbear/lisp/Symbol.java | 2 +
4 files changed, 78 insertions(+), 18 deletions(-)
create mode 100644 src/org/armedbear/lisp/Metaobject.java
Added:
trunk/abcl/src/org/armedbear/lisp/Metaobject.java
Modified:
trunk/abcl/src/org/armedbear/lisp/GenericFunction.java
trunk/abcl/src/org/armedbear/lisp/StandardClass.java
trunk/abcl/src/org/armedbear/lisp/Symbol.java
Modified: trunk/abcl/src/org/armedbear/lisp/GenericFunction.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/GenericFunction.java Sun Jan 1 13:29:05 2012 (r13712)
+++ trunk/abcl/src/org/armedbear/lisp/GenericFunction.java Wed Jan 4 05:44:27 2012 (r13713)
@@ -35,7 +35,7 @@
import static org.armedbear.lisp.Lisp.*;
-public abstract class GenericFunction extends StandardObject
+public abstract class GenericFunction extends Metaobject
{
protected GenericFunction(LispClass cls, int length)
{
Added: trunk/abcl/src/org/armedbear/lisp/Metaobject.java
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/abcl/src/org/armedbear/lisp/Metaobject.java Wed Jan 4 05:44:27 2012 (r13713)
@@ -0,0 +1,52 @@
+/*
+ * Metaobject.java
+ *
+ * Copyright (C) 2003-2005 Peter Graves, 2012 Rudolf Schlatte
+ * $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.*;
+
+public abstract class Metaobject extends StandardObject
+{
+ protected Metaobject(LispClass cls, int length)
+ {
+ super(cls, length);
+ }
+
+ @Override
+ public LispObject typep(LispObject type)
+ {
+ if (type == Symbol.METAOBJECT)
+ return T;
+ return super.typep(type);
+ }
+}
Modified: trunk/abcl/src/org/armedbear/lisp/StandardClass.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/StandardClass.java Sun Jan 1 13:29:05 2012 (r13712)
+++ trunk/abcl/src/org/armedbear/lisp/StandardClass.java Wed Jan 4 05:44:27 2012 (r13713)
@@ -385,9 +385,11 @@
addStandardClass(Symbol.STANDARD_CLASS, list(BuiltInClass.CLASS_T));
public static final StandardClass STANDARD_OBJECT =
addStandardClass(Symbol.STANDARD_OBJECT, list(BuiltInClass.CLASS_T));
+ public static final StandardClass METAOBJECT =
+ addStandardClass(Symbol.METAOBJECT, list(STANDARD_OBJECT));
public static final StandardClass SLOT_DEFINITION =
- addStandardClass(Symbol.SLOT_DEFINITION, list(STANDARD_OBJECT));
+ addStandardClass(Symbol.SLOT_DEFINITION, list(METAOBJECT));
public static final StandardClass STANDARD_SLOT_DEFINITION =
addClass(Symbol.STANDARD_SLOT_DEFINITION, new SlotDefinitionClass(Symbol.STANDARD_SLOT_DEFINITION, list(SLOT_DEFINITION)));
@@ -416,8 +418,8 @@
// BuiltInClass.FUNCTION is also null here (see previous comment).
public static final StandardClass GENERIC_FUNCTION =
- addStandardClass(Symbol.GENERIC_FUNCTION, list(BuiltInClass.FUNCTION,
- STANDARD_OBJECT));
+ addStandardClass(Symbol.GENERIC_FUNCTION, list(METAOBJECT,
+ BuiltInClass.FUNCTION));
public static final StandardClass CLASS =
addStandardClass(Symbol.CLASS, list(STANDARD_OBJECT));
@@ -536,7 +538,7 @@
addStandardClass(Symbol.JAVA_EXCEPTION, list(ERROR));
public static final StandardClass METHOD =
- addStandardClass(Symbol.METHOD, list(STANDARD_OBJECT));
+ addStandardClass(Symbol.METHOD, list(METAOBJECT));
public static final StandardClass STANDARD_METHOD =
new StandardMethodClass();
@@ -566,8 +568,8 @@
// STANDARD_OBJECT).
STANDARD_CLASS.setDirectSuperclass(CLASS);
STANDARD_OBJECT.setDirectSuperclass(BuiltInClass.CLASS_T);
- GENERIC_FUNCTION.setDirectSuperclasses(list(BuiltInClass.FUNCTION,
- STANDARD_OBJECT));
+ GENERIC_FUNCTION.setDirectSuperclasses(list(METAOBJECT,
+ BuiltInClass.FUNCTION));
ARITHMETIC_ERROR.setCPL(ARITHMETIC_ERROR, ERROR, SERIOUS_CONDITION,
CONDITION, STANDARD_OBJECT, BuiltInClass.CLASS_T);
@@ -631,14 +633,15 @@
STANDARD_OBJECT, BuiltInClass.CLASS_T);
FORWARD_REFERENCED_CLASS.setCPL(FORWARD_REFERENCED_CLASS, CLASS,
BuiltInClass.CLASS_T);
- GENERIC_FUNCTION.setCPL(GENERIC_FUNCTION, STANDARD_OBJECT,
+ GENERIC_FUNCTION.setCPL(GENERIC_FUNCTION, METAOBJECT, STANDARD_OBJECT,
BuiltInClass.FUNCTION,
BuiltInClass.CLASS_T);
JAVA_EXCEPTION.setCPL(JAVA_EXCEPTION, ERROR, SERIOUS_CONDITION, CONDITION,
STANDARD_OBJECT, BuiltInClass.CLASS_T);
JAVA_EXCEPTION.setDirectSlotDefinitions(
list(new SlotDefinition(Symbol.CAUSE, list(Symbol.JAVA_EXCEPTION_CAUSE))));
- METHOD.setCPL(METHOD, STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ METAOBJECT.setCPL(METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ METHOD.setCPL(METHOD, METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
PACKAGE_ERROR.setCPL(PACKAGE_ERROR, ERROR, SERIOUS_CONDITION, CONDITION,
STANDARD_OBJECT, BuiltInClass.CLASS_T);
PACKAGE_ERROR.setDirectSlotDefinitions(
@@ -725,6 +728,7 @@
FLOATING_POINT_OVERFLOW.finalizeClass();
FLOATING_POINT_UNDERFLOW.finalizeClass();
JAVA_EXCEPTION.finalizeClass();
+ METAOBJECT.finalizeClass();
PACKAGE_ERROR.finalizeClass();
PARSE_ERROR.finalizeClass();
PRINT_NOT_READABLE.finalizeClass();
@@ -747,33 +751,33 @@
// SYS:SLOT-DEFINITION is constructed and finalized in
// SlotDefinitionClass.java, but we need to fill in a few things here.
Debug.assertTrue(SLOT_DEFINITION.isFinalized());
- SLOT_DEFINITION.setCPL(SLOT_DEFINITION, STANDARD_OBJECT,
+ SLOT_DEFINITION.setCPL(SLOT_DEFINITION, METAOBJECT, STANDARD_OBJECT,
BuiltInClass.CLASS_T);
SLOT_DEFINITION.setDirectSlotDefinitions(SLOT_DEFINITION.getClassLayout().generateSlotDefinitions());
// There are no inherited slots.
SLOT_DEFINITION.setSlotDefinitions(SLOT_DEFINITION.getDirectSlotDefinitions());
DIRECT_SLOT_DEFINITION.setCPL(DIRECT_SLOT_DEFINITION, SLOT_DEFINITION,
- STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
DIRECT_SLOT_DEFINITION.finalizeClass();
EFFECTIVE_SLOT_DEFINITION.setCPL(EFFECTIVE_SLOT_DEFINITION, SLOT_DEFINITION,
- STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
EFFECTIVE_SLOT_DEFINITION.finalizeClass();
STANDARD_SLOT_DEFINITION.setCPL(STANDARD_SLOT_DEFINITION, SLOT_DEFINITION,
- STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
STANDARD_SLOT_DEFINITION.finalizeClass();
STANDARD_DIRECT_SLOT_DEFINITION.setCPL(STANDARD_DIRECT_SLOT_DEFINITION, STANDARD_SLOT_DEFINITION,
- DIRECT_SLOT_DEFINITION, SLOT_DEFINITION, STANDARD_OBJECT,
+ DIRECT_SLOT_DEFINITION, SLOT_DEFINITION, METAOBJECT, STANDARD_OBJECT,
BuiltInClass.CLASS_T);
STANDARD_DIRECT_SLOT_DEFINITION.finalizeClass();
STANDARD_EFFECTIVE_SLOT_DEFINITION.setCPL(STANDARD_EFFECTIVE_SLOT_DEFINITION, STANDARD_SLOT_DEFINITION,
- EFFECTIVE_SLOT_DEFINITION, SLOT_DEFINITION, STANDARD_OBJECT,
+ EFFECTIVE_SLOT_DEFINITION, SLOT_DEFINITION, METAOBJECT, STANDARD_OBJECT,
BuiltInClass.CLASS_T);
STANDARD_EFFECTIVE_SLOT_DEFINITION.finalizeClass();
// STANDARD-METHOD
Debug.assertTrue(STANDARD_METHOD.isFinalized());
- STANDARD_METHOD.setCPL(STANDARD_METHOD, METHOD, STANDARD_OBJECT,
+ STANDARD_METHOD.setCPL(STANDARD_METHOD, METHOD, METAOBJECT, STANDARD_OBJECT,
BuiltInClass.CLASS_T);
STANDARD_METHOD.setDirectSlotDefinitions(STANDARD_METHOD.getClassLayout().generateSlotDefinitions());
// There are no inherited slots.
@@ -782,7 +786,8 @@
// STANDARD-READER-METHOD
Debug.assertTrue(STANDARD_READER_METHOD.isFinalized());
STANDARD_READER_METHOD.setCPL(STANDARD_READER_METHOD, STANDARD_METHOD,
- METHOD, STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ METHOD, METAOBJECT, STANDARD_OBJECT,
+ BuiltInClass.CLASS_T);
STANDARD_READER_METHOD.setSlotDefinitions(STANDARD_READER_METHOD.getClassLayout().generateSlotDefinitions());
// All but the last slot are inherited.
STANDARD_READER_METHOD.setDirectSlotDefinitions(list(STANDARD_READER_METHOD.getSlotDefinitions().reverse().car()));
@@ -790,7 +795,8 @@
// STANDARD-GENERIC-FUNCTION
Debug.assertTrue(STANDARD_GENERIC_FUNCTION.isFinalized());
STANDARD_GENERIC_FUNCTION.setCPL(STANDARD_GENERIC_FUNCTION,
- GENERIC_FUNCTION, STANDARD_OBJECT,
+ GENERIC_FUNCTION, METAOBJECT,
+ STANDARD_OBJECT,
BuiltInClass.FUNCTION,
BuiltInClass.CLASS_T);
STANDARD_GENERIC_FUNCTION.setDirectSlotDefinitions(STANDARD_GENERIC_FUNCTION.getClassLayout().generateSlotDefinitions());
Modified: trunk/abcl/src/org/armedbear/lisp/Symbol.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/Symbol.java Sun Jan 1 13:29:05 2012 (r13712)
+++ trunk/abcl/src/org/armedbear/lisp/Symbol.java Wed Jan 4 05:44:27 2012 (r13713)
@@ -2967,6 +2967,8 @@
PACKAGE_MOP.addInternalSymbol("CLASS-LAYOUT");
public static final Symbol CLASS_PRECEDENCE_LIST =
PACKAGE_MOP.addInternalSymbol("CLASS-PRECEDENCE-LIST");
+ public static final Symbol METAOBJECT =
+ PACKAGE_MOP.addExternalSymbol("METAOBJECT");
public static final Symbol STANDARD_READER_METHOD =
PACKAGE_MOP.addExternalSymbol("STANDARD-READER-METHOD");
public static final Symbol DIRECT_SLOT_DEFINITION =
From mevenson at common-lisp.net Wed Jan 4 13:44:29 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Wed, 04 Jan 2012 05:44:29 -0800
Subject: [armedbear-cvs] r13714 - trunk/abcl/src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Wed Jan 4 05:44:29 2012
New Revision: 13714
Log:
[PATCH 2/2] add class SPECIALIZER, splice it into mop class
>From 3d54c11cd984ce6df5a563c57dce85765c1ab602 Mon Sep 17 00:00:00 2001
hierarchy.
---
src/org/armedbear/lisp/Specializer.java | 52 +++++++++++++++++++++++++++++
src/org/armedbear/lisp/StandardClass.java | 18 ++++++----
src/org/armedbear/lisp/Symbol.java | 2 +
3 files changed, 65 insertions(+), 7 deletions(-)
create mode 100644 src/org/armedbear/lisp/Specializer.java
Added:
trunk/abcl/src/org/armedbear/lisp/Specializer.java
Modified:
trunk/abcl/src/org/armedbear/lisp/StandardClass.java
trunk/abcl/src/org/armedbear/lisp/Symbol.java
Added: trunk/abcl/src/org/armedbear/lisp/Specializer.java
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/abcl/src/org/armedbear/lisp/Specializer.java Wed Jan 4 05:44:29 2012 (r13714)
@@ -0,0 +1,52 @@
+/*
+ * Specializer.java
+ *
+ * Copyright (C) 2003-2005 Peter Graves, 2012 Rudolf Schlatte
+ * $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.*;
+
+public abstract class Specializer extends Metaobject
+{
+ protected Specializer(LispClass cls, int length)
+ {
+ super(cls, length);
+ }
+
+ @Override
+ public LispObject typep(LispObject type)
+ {
+ if (type == Symbol.SPECIALIZER)
+ return T;
+ return super.typep(type);
+ }
+}
Modified: trunk/abcl/src/org/armedbear/lisp/StandardClass.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/StandardClass.java Wed Jan 4 05:44:27 2012 (r13713)
+++ trunk/abcl/src/org/armedbear/lisp/StandardClass.java Wed Jan 4 05:44:29 2012 (r13714)
@@ -387,6 +387,8 @@
addStandardClass(Symbol.STANDARD_OBJECT, list(BuiltInClass.CLASS_T));
public static final StandardClass METAOBJECT =
addStandardClass(Symbol.METAOBJECT, list(STANDARD_OBJECT));
+ public static final StandardClass SPECIALIZER =
+ addStandardClass(Symbol.SPECIALIZER, list(METAOBJECT));
public static final StandardClass SLOT_DEFINITION =
addStandardClass(Symbol.SLOT_DEFINITION, list(METAOBJECT));
@@ -422,7 +424,7 @@
BuiltInClass.FUNCTION));
public static final StandardClass CLASS =
- addStandardClass(Symbol.CLASS, list(STANDARD_OBJECT));
+ addStandardClass(Symbol.CLASS, list(SPECIALIZER));
public static final StandardClass BUILT_IN_CLASS =
addStandardClass(Symbol.BUILT_IN_CLASS, list(CLASS));
@@ -578,14 +580,14 @@
list(PACKAGE_CL.intern("ARITHMETIC-ERROR-OPERATION"))),
new SlotDefinition(Symbol.OPERANDS,
list(PACKAGE_CL.intern("ARITHMETIC-ERROR-OPERANDS")))));
- BUILT_IN_CLASS.setCPL(BUILT_IN_CLASS, CLASS, STANDARD_OBJECT,
+ BUILT_IN_CLASS.setCPL(BUILT_IN_CLASS, CLASS, SPECIALIZER, METAOBJECT, STANDARD_OBJECT,
BuiltInClass.CLASS_T);
CELL_ERROR.setCPL(CELL_ERROR, ERROR, SERIOUS_CONDITION, CONDITION,
STANDARD_OBJECT, BuiltInClass.CLASS_T);
CELL_ERROR.setDirectSlotDefinitions(
list(new SlotDefinition(Symbol.NAME,
list(Symbol.CELL_ERROR_NAME))));
- CLASS.setCPL(CLASS, STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ CLASS.setCPL(CLASS, SPECIALIZER, METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
COMPILER_ERROR.setCPL(COMPILER_ERROR, CONDITION, STANDARD_OBJECT,
BuiltInClass.CLASS_T);
INTERNAL_COMPILER_ERROR.setCPL(INTERNAL_COMPILER_ERROR, CONDITION, STANDARD_OBJECT,
@@ -632,7 +634,7 @@
ERROR, SERIOUS_CONDITION, CONDITION,
STANDARD_OBJECT, BuiltInClass.CLASS_T);
FORWARD_REFERENCED_CLASS.setCPL(FORWARD_REFERENCED_CLASS, CLASS,
- BuiltInClass.CLASS_T);
+ SPECIALIZER, METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
GENERIC_FUNCTION.setCPL(GENERIC_FUNCTION, METAOBJECT, STANDARD_OBJECT,
BuiltInClass.FUNCTION,
BuiltInClass.CLASS_T);
@@ -641,6 +643,7 @@
JAVA_EXCEPTION.setDirectSlotDefinitions(
list(new SlotDefinition(Symbol.CAUSE, list(Symbol.JAVA_EXCEPTION_CAUSE))));
METAOBJECT.setCPL(METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ SPECIALIZER.setCPL(SPECIALIZER, METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
METHOD.setCPL(METHOD, METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
PACKAGE_ERROR.setCPL(PACKAGE_ERROR, ERROR, SERIOUS_CONDITION, CONDITION,
STANDARD_OBJECT, BuiltInClass.CLASS_T);
@@ -674,7 +677,7 @@
SIMPLE_WARNING.setDirectSuperclasses(list(SIMPLE_CONDITION, WARNING));
SIMPLE_WARNING.setCPL(SIMPLE_WARNING, SIMPLE_CONDITION, WARNING,
CONDITION, STANDARD_OBJECT, BuiltInClass.CLASS_T);
- STANDARD_CLASS.setCPL(STANDARD_CLASS, CLASS,
+ STANDARD_CLASS.setCPL(STANDARD_CLASS, CLASS, SPECIALIZER, METAOBJECT,
STANDARD_OBJECT, BuiltInClass.CLASS_T);
STANDARD_OBJECT.setCPL(STANDARD_OBJECT, BuiltInClass.CLASS_T);
STORAGE_CONDITION.setCPL(STORAGE_CONDITION, SERIOUS_CONDITION, CONDITION,
@@ -684,8 +687,8 @@
STREAM_ERROR.setDirectSlotDefinitions(
list(new SlotDefinition(Symbol.STREAM,
list(PACKAGE_CL.intern("STREAM-ERROR-STREAM")))));
- STRUCTURE_CLASS.setCPL(STRUCTURE_CLASS, CLASS, STANDARD_OBJECT,
- BuiltInClass.CLASS_T);
+ STRUCTURE_CLASS.setCPL(STRUCTURE_CLASS, CLASS, SPECIALIZER, METAOBJECT,
+ STANDARD_OBJECT, BuiltInClass.CLASS_T);
STYLE_WARNING.setCPL(STYLE_WARNING, WARNING, CONDITION, STANDARD_OBJECT,
BuiltInClass.CLASS_T);
TYPE_ERROR.setCPL(TYPE_ERROR, ERROR, SERIOUS_CONDITION, CONDITION,
@@ -729,6 +732,7 @@
FLOATING_POINT_UNDERFLOW.finalizeClass();
JAVA_EXCEPTION.finalizeClass();
METAOBJECT.finalizeClass();
+ SPECIALIZER.finalizeClass();
PACKAGE_ERROR.finalizeClass();
PARSE_ERROR.finalizeClass();
PRINT_NOT_READABLE.finalizeClass();
Modified: trunk/abcl/src/org/armedbear/lisp/Symbol.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/Symbol.java Wed Jan 4 05:44:27 2012 (r13713)
+++ trunk/abcl/src/org/armedbear/lisp/Symbol.java Wed Jan 4 05:44:29 2012 (r13714)
@@ -2969,6 +2969,8 @@
PACKAGE_MOP.addInternalSymbol("CLASS-PRECEDENCE-LIST");
public static final Symbol METAOBJECT =
PACKAGE_MOP.addExternalSymbol("METAOBJECT");
+ public static final Symbol SPECIALIZER =
+ PACKAGE_MOP.addExternalSymbol("SPECIALIZER");
public static final Symbol STANDARD_READER_METHOD =
PACKAGE_MOP.addExternalSymbol("STANDARD-READER-METHOD");
public static final Symbol DIRECT_SLOT_DEFINITION =
From mevenson at common-lisp.net Wed Jan 4 20:34:40 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Wed, 04 Jan 2012 12:34:40 -0800
Subject: [armedbear-cvs] r13715 - trunk/abcl/src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Wed Jan 4 12:34:38 2012
New Revision: 13715
Log:
Convert EQL-SPECIALIZER from a structure into a CLOS class.
>From rudi at constantly.
Backout creation of Specializer.java and Equalizer.java (do it all in
Lisp).
From: Rudi Schlatte
Date: Wed, 4 Jan 2012 17:22:59 +0100
Subject: [PATCH] Convert EQL-SPECIALIZER from a structure into a CLOS class.
... open-code make-instance machinery in intern-eql-specializer to break
circular dependency between it and generic functions working
... also remove unused Java classes for metaobject and
specializer introduced in previous patches (Java-side, they
are just instances of StandardClass).
Added:
trunk/abcl/src/org/armedbear/lisp/EqualSpecializerObject.java
Deleted:
trunk/abcl/src/org/armedbear/lisp/Metaobject.java
trunk/abcl/src/org/armedbear/lisp/Specializer.java
Modified:
trunk/abcl/src/org/armedbear/lisp/Autoload.java
trunk/abcl/src/org/armedbear/lisp/GenericFunction.java
trunk/abcl/src/org/armedbear/lisp/StandardClass.java
trunk/abcl/src/org/armedbear/lisp/Symbol.java
trunk/abcl/src/org/armedbear/lisp/clos.lisp
Modified: trunk/abcl/src/org/armedbear/lisp/Autoload.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/Autoload.java Wed Jan 4 05:44:29 2012 (r13714)
+++ trunk/abcl/src/org/armedbear/lisp/Autoload.java Wed Jan 4 12:34:38 2012 (r13715)
@@ -533,6 +533,7 @@
autoload(PACKAGE_JAVA, "make-classloader", "JavaClassLoader");
autoload(PACKAGE_JAVA, "%add-to-classpath", "JavaClassLoader");
autoload(PACKAGE_JAVA, "dump-classpath", "JavaClassLoader");
+ autoload(PACKAGE_MOP, "eql-specializer-object", "EqualSpecializerObject", true);
autoload(PACKAGE_MOP, "funcallable-instance-function", "StandardGenericFunction", false);
autoload(PACKAGE_MOP, "generic-function-name", "StandardGenericFunction", true);
autoload(PACKAGE_MOP, "method-qualifiers", "StandardMethod", true);
Added: trunk/abcl/src/org/armedbear/lisp/EqualSpecializerObject.java
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/abcl/src/org/armedbear/lisp/EqualSpecializerObject.java Wed Jan 4 12:34:38 2012 (r13715)
@@ -0,0 +1,65 @@
+/*
+ * Java-side object stub of the CLOS equals specializer.
+ *
+ * To be stubbed out into the Lisp-side once we get CLOS booted.
+ *
+ * Copyright (C) 2012 Rudolf Schlatte
+ * $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.*;
+
+/** TODO use @DocString annotations correctly in this situation... */
+// ### eql-specializer-object
+public final class EqualSpecializerObject extends Primitive
+{
+ public EqualSpecializerObject()
+ {
+ super(Symbol.EQL_SPECIALIZER_OBJECT, "eql-specializer");
+ }
+
+ @Override
+ public LispObject execute(LispObject arg)
+ {
+ if (arg instanceof StandardObject
+ && arg.typep(StandardClass.EQL_SPECIALIZER) == T)
+ {
+ return ((StandardObject)arg).getInstanceSlotValue(Symbol.OBJECT);
+ }
+ return error(new TypeError(arg, Symbol.EQL_SPECIALIZER));
+ }
+
+ private static final EqualSpecializerObject EQL_SPECIALIZER_OBJECT
+ = new EqualSpecializerObject();
+}
+
+
+
Modified: trunk/abcl/src/org/armedbear/lisp/GenericFunction.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/GenericFunction.java Wed Jan 4 05:44:29 2012 (r13714)
+++ trunk/abcl/src/org/armedbear/lisp/GenericFunction.java Wed Jan 4 12:34:38 2012 (r13715)
@@ -35,7 +35,7 @@
import static org.armedbear.lisp.Lisp.*;
-public abstract class GenericFunction extends Metaobject
+public abstract class GenericFunction extends StandardObject
{
protected GenericFunction(LispClass cls, int length)
{
Modified: trunk/abcl/src/org/armedbear/lisp/StandardClass.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/StandardClass.java Wed Jan 4 05:44:29 2012 (r13714)
+++ trunk/abcl/src/org/armedbear/lisp/StandardClass.java Wed Jan 4 12:34:38 2012 (r13715)
@@ -389,6 +389,8 @@
addStandardClass(Symbol.METAOBJECT, list(STANDARD_OBJECT));
public static final StandardClass SPECIALIZER =
addStandardClass(Symbol.SPECIALIZER, list(METAOBJECT));
+ public static final StandardClass EQL_SPECIALIZER =
+ addStandardClass(Symbol.EQL_SPECIALIZER, list(SPECIALIZER));
public static final StandardClass SLOT_DEFINITION =
addStandardClass(Symbol.SLOT_DEFINITION, list(METAOBJECT));
@@ -644,6 +646,10 @@
list(new SlotDefinition(Symbol.CAUSE, list(Symbol.JAVA_EXCEPTION_CAUSE))));
METAOBJECT.setCPL(METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
SPECIALIZER.setCPL(SPECIALIZER, METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ EQL_SPECIALIZER.setCPL(EQL_SPECIALIZER, SPECIALIZER, METAOBJECT,
+ STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ EQL_SPECIALIZER.setDirectSlotDefinitions(
+ list(new SlotDefinition(Symbol.OBJECT, list(PACKAGE_MOP.intern("EQL-SPECIALIZER-OBJECT")))));
METHOD.setCPL(METHOD, METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
PACKAGE_ERROR.setCPL(PACKAGE_ERROR, ERROR, SERIOUS_CONDITION, CONDITION,
STANDARD_OBJECT, BuiltInClass.CLASS_T);
@@ -733,6 +739,7 @@
JAVA_EXCEPTION.finalizeClass();
METAOBJECT.finalizeClass();
SPECIALIZER.finalizeClass();
+ EQL_SPECIALIZER.finalizeClass();
PACKAGE_ERROR.finalizeClass();
PARSE_ERROR.finalizeClass();
PRINT_NOT_READABLE.finalizeClass();
Modified: trunk/abcl/src/org/armedbear/lisp/Symbol.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/Symbol.java Wed Jan 4 05:44:29 2012 (r13714)
+++ trunk/abcl/src/org/armedbear/lisp/Symbol.java Wed Jan 4 12:34:38 2012 (r13715)
@@ -2967,6 +2967,10 @@
PACKAGE_MOP.addInternalSymbol("CLASS-LAYOUT");
public static final Symbol CLASS_PRECEDENCE_LIST =
PACKAGE_MOP.addInternalSymbol("CLASS-PRECEDENCE-LIST");
+ public static final Symbol EQL_SPECIALIZER =
+ PACKAGE_MOP.addExternalSymbol("EQL-SPECIALIZER");
+ public static final Symbol EQL_SPECIALIZER_OBJECT =
+ PACKAGE_MOP.addExternalSymbol("EQL-SPECIALIZER-OBJECT");
public static final Symbol METAOBJECT =
PACKAGE_MOP.addExternalSymbol("METAOBJECT");
public static final Symbol SPECIALIZER =
Modified: trunk/abcl/src/org/armedbear/lisp/clos.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/clos.lisp Wed Jan 4 05:44:29 2012 (r13714)
+++ trunk/abcl/src/org/armedbear/lisp/clos.lisp Wed Jan 4 12:34:38 2012 (r13715)
@@ -1178,15 +1178,16 @@
:function ,(coerce-to-function lambda-expression)))
name))
-(defstruct eql-specializer
- object)
-
(defparameter *eql-specializer-table* (make-hash-table :test 'eql))
(defun intern-eql-specializer (object)
(or (gethash object *eql-specializer-table*)
(setf (gethash object *eql-specializer-table*)
- (make-eql-specializer :object object))))
+ ;; we will be called during generic function invocation
+ ;; setup, so have to rely on plain functions here.
+ (let ((instance (std-allocate-instance (find-class 'eql-specializer))))
+ (setf (std-slot-value instance 'sys::object) object)
+ instance))))
;; MOP (p. 216) specifies the following reader generic functions:
;; generic-function-argument-precedence-order
@@ -1443,7 +1444,7 @@
(defun canonicalize-specializer (specializer)
(cond ((classp specializer)
specializer)
- ((eql-specializer-p specializer)
+ ((typep specializer 'eql-specializer)
specializer)
((symbolp specializer)
(find-class specializer))
@@ -1809,7 +1810,7 @@
(specializer (car (%method-specializers method)))
(function (or (%method-fast-function method)
(%method-function method))))
- (if (eql-specializer-p specializer)
+ (if (typep specializer 'eql-specializer)
(let ((specializer-object (eql-specializer-object specializer)))
#'(lambda (arg)
(declare (optimize speed))
@@ -1965,9 +1966,9 @@
(let ((spec1 (nth index specializers-1))
(spec2 (nth index specializers-2)))
(unless (eq spec1 spec2)
- (cond ((eql-specializer-p spec1)
+ (cond ((typep spec1 'eql-specializer)
(return t))
- ((eql-specializer-p spec2)
+ ((typep spec2 'eql-specializer)
(return nil))
(t
(return (sub-specializer-p spec1 spec2
@@ -1979,9 +1980,9 @@
(let ((spec1 (car specializers-1))
(spec2 (car specializers-2)))
(unless (eq spec1 spec2)
- (cond ((eql-specializer-p spec1)
+ (cond ((typep spec1 'eql-specializer)
(return t))
- ((eql-specializer-p spec2)
+ ((typep spec2 'eql-specializer)
(return nil))
(t
(return (sub-specializer-p spec1 spec2 (car classes))))))))))
From mevenson at common-lisp.net Wed Jan 4 21:41:23 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Wed, 04 Jan 2012 13:41:23 -0800
Subject: [armedbear-cvs] r13716 - branches/1.0.x/abcl/src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Wed Jan 4 13:41:22 2012
New Revision: 13716
Log:
Backport r13703: remove uncompilable file from system source.
Deleted:
branches/1.0.x/abcl/src/org/armedbear/lisp/threads-jss.lisp
From mevenson at common-lisp.net Wed Jan 4 21:48:45 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Wed, 04 Jan 2012 13:48:45 -0800
Subject: [armedbear-cvs] r13717 - in branches/1.0.x/abcl: doc/asdf
src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Wed Jan 4 13:48:45 2012
New Revision: 13717
Log:
Backport r13702: update to asdf-2.019 with ABCL patch.
Modified:
branches/1.0.x/abcl/doc/asdf/asdf.texinfo
branches/1.0.x/abcl/src/org/armedbear/lisp/asdf.lisp
Modified: branches/1.0.x/abcl/doc/asdf/asdf.texinfo
==============================================================================
--- branches/1.0.x/abcl/doc/asdf/asdf.texinfo Wed Jan 4 13:41:22 2012 (r13716)
+++ branches/1.0.x/abcl/doc/asdf/asdf.texinfo Wed Jan 4 13:48:45 2012 (r13717)
@@ -895,7 +895,8 @@
@example
system-definition := ( defsystem system-designator @var{system-option}* )
-system-option := :defsystem-depends-on system-list
+system-option := :defsystem-depends-on system-list
+ | :class class-name (see discussion below)
| module-option
| option
@@ -959,6 +960,25 @@
the current package @code{my-system-asd} can be specified as
@code{:my-component-type}, or @code{my-component-type}.
+ at subsection System class names
+
+A system class name will be looked up in the same way as a Component
+type (see above). Typically, one will not need to specify a system
+class name, unless using a non-standard system class defined in some
+ASDF extension, typically loaded through @code{DEFSYSTEM-DEPENDS-ON},
+see below. For such class names in the ASDF package, we recommend that
+the @code{:class} option be specified using a keyword symbol, such as
+
+ at example
+:class :MY-NEW-SYSTEM-SUBCLASS
+ at end example
+
+This practice will ensure that package name conflicts are avoided.
+Otherwise, the symbol @code{MY-NEW-SYSTEM-SUBCLASS} will be read into
+the current package @emph{before} it has been exported from the ASDF
+extension loaded by @code{:defsystem-depends-on}, causing a name
+conflict in the current package.
+
@subsection Defsystem depends on
The @code{:defsystem-depends-on} option to @code{defsystem} allows the
@@ -2830,16 +2850,29 @@
@section Controlling file compilation
When declaring a component (system, module, file),
-you can specify a keyword argument @code{:around-compile some-symbol}.
-If left unspecified, the value will be inherited from the parent component if any,
-or with a default of @code{nil} if no value is specified in any transitive parent.
-
-The argument must be a either fbound symbol or @code{nil}.
+you can specify a keyword argument @code{:around-compile function}.
+If left unspecified,
+the value will be inherited from the parent component if any,
+or with a default of @code{nil}
+if no value is specified in any transitive parent.
+
+The argument must be a either @code{nil}, a fbound symbol,
+a lambda-expression (e.g. @code{(lambda (thunk) ...(funcall thunk) ...)})
+a function object (e.g. using @code{#.#'} but that's discouraged
+because it prevents the introspection done by e.g. asdf-dependency-grovel),
+or a string that when read yields a symbol or a lambda-expression.
@code{nil} means the normal compile-file function will be called.
-A symbol means the function fbound to it will be called with a single argument,
-a thunk that calls the compile-file function;
-the function you specify must then funcall that thunk
-inside whatever wrapping you want.
+A non-nil value designates a function of one argument
+that will be called with a thunk for calling
+the compile-file function with proper arguments.
+
+Note that by using a string, you may reference
+a function, symbol and/or package
+that will only be created later during the build, but
+isn't yet present at the time the defsystem form is evaluated.
+However, if your entire system is using such a hook, you may have to
+explicitly override the hook with @code{nil} for all the modules and files
+that are compiled before the hook is defined.
Using this hook, you may achieve such effects as:
locally renaming packages,
@@ -3649,6 +3682,8 @@
"lis")
@end lisp
+ at comment FIXME: Add a FAQ about how to use a new system class...
+
@node TODO list, Inspiration, FAQ, Top
@comment node-name, next, previous, up
Modified: branches/1.0.x/abcl/src/org/armedbear/lisp/asdf.lisp
==============================================================================
--- branches/1.0.x/abcl/src/org/armedbear/lisp/asdf.lisp Wed Jan 4 13:41:22 2012 (r13716)
+++ branches/1.0.x/abcl/src/org/armedbear/lisp/asdf.lisp Wed Jan 4 13:48:45 2012 (r13717)
@@ -1,5 +1,5 @@
;;; -*- mode: Common-Lisp; Base: 10 ; Syntax: ANSI-Common-Lisp -*-
-;;; This is ASDF 2.017.22: Another System Definition Facility.
+;;; This is ASDF 2.019: Another System Definition Facility.
;;;
;;; Feedback, bug reports, and patches are all welcome:
;;; please mail to .
@@ -56,7 +56,7 @@
(eval-when (:compile-toplevel :load-toplevel :execute)
;;; Implementation-dependent tweaks
- ;; (declaim (optimize (speed 2) (debug 2) (safety 3))) ; NO: rely on the implementation defaults.
+ ;; (declaim (optimize (speed 1) (debug 3) (safety 3))) ; NO: trust implementation defaults.
#+allegro
(setf excl::*autoload-package-name-alist*
(remove "asdf" excl::*autoload-package-name-alist*
@@ -86,6 +86,8 @@
(find-symbol (string s) p))
;; Strip out formatting that is not supported on Genera.
;; Has to be inside the eval-when to make Lispworks happy (!)
+ (defun strcat (&rest strings)
+ (apply 'concatenate 'string strings))
(defmacro compatfmt (format)
#-(or gcl genera) format
#+(or gcl genera)
@@ -97,10 +99,8 @@
("~@:>" . "")
("~:>" . ""))) :do
(loop :for found = (search unsupported format) :while found :do
- (setf format
- (concatenate 'simple-string
- (subseq format 0 found) replacement
- (subseq format (+ found (length unsupported)))))))
+ (setf format (strcat (subseq format 0 found) replacement
+ (subseq format (+ found (length unsupported)))))))
format)
(let* (;; For bug reporting sanity, please always bump this version when you modify this file.
;; Please also modify asdf.asd to reflect this change. The script bin/bump-version
@@ -110,7 +110,7 @@
;; "2.345.6" would be a development version in the official upstream
;; "2.345.0.7" would be your seventh local modification of official release 2.345
;; "2.345.6.7" would be your seventh local modification of development version 2.345.6
- (asdf-version "2.017.22")
+ (asdf-version "2.019")
(existing-asdf (find-class 'component nil))
(existing-version *asdf-version*)
(already-there (equal asdf-version existing-version)))
@@ -188,7 +188,7 @@
(push sym bothly-exported-symbols)
(push sym formerly-exported-symbols)))
(loop :for sym :in export :do
- (unless (member sym bothly-exported-symbols :test 'string-equal)
+ (unless (member sym bothly-exported-symbols :test 'equal)
(push sym newly-exported-symbols)))
(loop :for user :in (package-used-by-list package)
:for shadowing = (package-shadowing-symbols user) :do
@@ -229,23 +229,19 @@
#:compile-file* #:source-file-type)
:unintern
(#:*asdf-revision* #:around #:asdf-method-combination
- #:split #:make-collector
+ #:split #:make-collector #:do-dep #:do-one-dep
+ #:resolve-relative-location-component #:resolve-absolute-location-component
#:output-files-for-system-and-operation) ; obsolete ASDF-BINARY-LOCATION function
:export
- (#:defsystem #:oos #:operate #:find-system #:run-shell-command
+ (#:defsystem #:oos #:operate #:find-system #:locate-system #:run-shell-command
#:system-definition-pathname #:with-system-definitions
- #:search-for-system-definition #:find-component ; miscellaneous
- #:compile-system #:load-system #:test-system #:clear-system
- #:compile-op #:load-op #:load-source-op
- #:test-op
- #:operation ; operations
- #:feature ; sort-of operation
- #:version ; metaphorically sort-of an operation
- #:version-satisfies
+ #:search-for-system-definition #:find-component #:component-find-path
+ #:compile-system #:load-system #:load-systems #:test-system #:clear-system
+ #:operation #:compile-op #:load-op #:load-source-op #:test-op
+ #:feature #:version #:version-satisfies
#:upgrade-asdf
#:implementation-identifier #:implementation-type
-
- #:input-files #:output-files #:output-file #:perform ; operation methods
+ #:input-files #:output-files #:output-file #:perform
#:operation-done-p #:explain
#:component #:source-file
@@ -337,11 +333,19 @@
#:process-source-registry
#:system-registered-p
#:asdf-message
+ #:user-output-translations-pathname
+ #:system-output-translations-pathname
+ #:user-output-translations-directory-pathname
+ #:system-output-translations-directory-pathname
+ #:user-source-registry
+ #:system-source-registry
+ #:user-source-registry-directory
+ #:system-source-registry-directory
;; Utilities
#:absolute-pathname-p
;; #:aif #:it
- ;; #:appendf
+ ;; #:appendf #:orf
#:coerce-name
#:directory-pathname-p
;; #:ends-with
@@ -349,8 +353,7 @@
#:getenv
;; #:length=n-p
;; #:find-symbol*
- #:merge-pathnames*
- #:coerce-pathname
+ #:merge-pathnames* #:coerce-pathname #:subpathname
#:pathname-directory-pathname
#:read-file-forms
;; #:remove-keys
@@ -413,6 +416,7 @@
condition-arguments condition-form
condition-format condition-location
coerce-name)
+ (ftype (function (&optional t) (values)) initialize-source-registry)
#-(or cormanlisp gcl-pre2.7)
(ftype (function (t t) t) (setf module-components-by-name)))
@@ -421,8 +425,8 @@
#+cormanlisp
(progn
(deftype logical-pathname () nil)
- (defun* make-broadcast-stream () *error-output*)
- (defun* file-namestring (p)
+ (defun make-broadcast-stream () *error-output*)
+ (defun file-namestring (p)
(setf p (pathname p))
(format nil "~@[~A~]~@[.~A~]" (pathname-name p) (pathname-type p))))
@@ -522,6 +526,9 @@
:do (pop reldir) (pop defrev)
:finally (return (cons defabs (append (reverse defrev) reldir)))))))))))
+(defun* ununspecific (x)
+ (if (eq x :unspecific) nil x))
+
(defun* merge-pathnames* (specified &optional (defaults *default-pathname-defaults*))
"MERGE-PATHNAMES* is like MERGE-PATHNAMES except that
if the SPECIFIED pathname does not have an absolute directory,
@@ -540,9 +547,7 @@
(name (or (pathname-name specified) (pathname-name defaults)))
(type (or (pathname-type specified) (pathname-type defaults)))
(version (or (pathname-version specified) (pathname-version defaults))))
- (labels ((ununspecific (x)
- (if (eq x :unspecific) nil x))
- (unspecific-handler (p)
+ (labels ((unspecific-handler (p)
(if (typep p 'logical-pathname) #'ununspecific #'identity)))
(multiple-value-bind (host device directory unspecific-handler)
(ecase (first directory)
@@ -893,24 +898,21 @@
(host (pathname-host pathname))
(port (ext:pathname-port pathname))
(directory (pathname-directory pathname)))
- (flet ((not-unspecific (component)
- (and (not (eq component :unspecific)) component)))
- (cond ((or (not-unspecific port)
- (and (not-unspecific host) (plusp (length host)))
- (not-unspecific scheme))
- (let ((prefix ""))
- (when (not-unspecific port)
- (setf prefix (format nil ":~D" port)))
- (when (and (not-unspecific host) (plusp (length host)))
- (setf prefix (concatenate 'string host prefix)))
- (setf prefix (concatenate 'string ":" prefix))
- (when (not-unspecific scheme)
- (setf prefix (concatenate 'string scheme prefix)))
- (assert (and directory (eq (first directory) :absolute)))
- (make-pathname :directory `(:absolute ,prefix ,@(rest directory))
- :defaults pathname)))
- (t
- pathname)))))
+ (if (or (ununspecific port)
+ (and (ununspecific host) (plusp (length host)))
+ (ununspecific scheme))
+ (let ((prefix ""))
+ (when (ununspecific port)
+ (setf prefix (format nil ":~D" port)))
+ (when (and (ununspecific host) (plusp (length host)))
+ (setf prefix (strcat host prefix)))
+ (setf prefix (strcat ":" prefix))
+ (when (ununspecific scheme)
+ (setf prefix (strcat scheme prefix)))
+ (assert (and directory (eq (first directory) :absolute)))
+ (make-pathname :directory `(:absolute ,prefix ,@(rest directory))
+ :defaults pathname)))
+ pathname))
;;;; -------------------------------------------------------------------------
;;;; ASDF Interface, in terms of generic functions.
@@ -1173,45 +1175,6 @@
(properties :accessor component-properties :initarg :properties
:initform nil)))
-;;; I believe that the following could probably be more efficiently done
-;;; by a primary method that invokes SHARED-INITIALIZE in a way that would
-;;; appropriately pass the slots to have their initforms re-applied, but I
-;;; do not know how to write such a method. [2011/09/02:rpg]
-(defmethod reinitialize-instance :after ((obj component) &rest initargs
- &key (version nil version-suppliedp)
- (description nil description-suppliedp)
- (long-description nil
- long-description-suppliedp)
- (load-dependencies nil
- ld-suppliedp)
- in-order-to
- do-first
- inline-methods
- parent
- properties)
- "We reuse component objects from previously-existing systems, so we need to
-make sure we clear them thoroughly."
- (declare (ignore initargs load-dependencies
- long-description description version))
- ;; this is a cache and should be cleared
- (slot-makunbound obj 'absolute-pathname)
- ;; component operation times are no longer valid when the component changes
- (clrhash (component-operation-times obj))
- (unless version-suppliedp (slot-makunbound obj 'version))
- (unless description-suppliedp
- (slot-makunbound obj 'description))
- (unless long-description-suppliedp
- (slot-makunbound obj 'long-description))
- ;; replicate the logic of the initforms...
- (unless ld-suppliedp
- (setf (component-load-dependencies obj) nil))
- (setf (component-in-order-to obj) in-order-to
- (component-do-first obj) do-first
- (component-inline-methods obj) inline-methods
- (slot-value obj 'parent) parent
- (slot-value obj 'properties) properties))
-
-
(defun* component-find-path (component)
(reverse
(loop :for c = component :then (component-parent c)
@@ -1284,21 +1247,6 @@
:initarg :default-component-class
:accessor module-default-component-class)))
-;;; see comment with REINITIALIZE-INSTANCE method on COMPONENT
-;;; [2011/09/02:rpg]
-(defmethod reinitialize-instance :after ((obj module) &rest initargs &key)
- "Clear MODULE's slots so it can be reused."
- (slot-makunbound obj 'components-by-name)
- ;; this may be a more elegant approach than in the
- ;; COMPONENT method [2011/09/02:rpg]
- (loop :for (initarg slot-name default) :in
- `((:components components nil)
- (:if-component-dep-fails if-component-dep-fails :fail)
- (:default-component-class default-component-class
- ,*default-component-class*))
- :unless (member initarg initargs)
- :do (setf (slot-value obj slot-name) default)))
-
(defun* component-parent-pathname (component)
;; No default anymore (in particular, no *default-pathname-defaults*).
;; If you force component to have a NULL pathname, you better arrange
@@ -1332,7 +1280,12 @@
(acons property new-value (slot-value c 'properties)))))
new-value)
-(defclass system (module)
+(defclass proto-system () ; slots to keep when resetting a system
+ ;; To preserve identity for all objects, we'd need keep the components slots
+ ;; but also to modify parse-component-form to reset the recycled objects.
+ ((name) #|(components) (components-by-names)|#))
+
+(defclass system (module proto-system)
(;; description and long-description are now available for all component's,
;; but now also inherited from component, but we add the legacy accessor
(description :accessor system-description :initarg :description)
@@ -1345,24 +1298,6 @@
:writer %set-system-source-file)
(defsystem-depends-on :reader system-defsystem-depends-on :initarg :defsystem-depends-on)))
-;;; see comment with REINITIALIZE-INSTANCE method on COMPONENT
-;;; [2011/09/02:rpg]
-(defmethod reinitialize-instance :after ((obj system) &rest initargs &key)
- "Clear SYSTEM's slots so it can be reused."
- ;; note that SYSTEM-SOURCE-FILE is very specially handled,
- ;; by DO-DEFSYSTEM, so we need to *PRESERVE* its value and
- ;; not squash it. SYSTEM COMPONENTS are handled very specially,
- ;; because they are always, effectively, reused, since the system component
- ;; is made early in DO-DEFSYSTEM, instead of being made later, in
- ;; PARSE-COMPONENT-FORM [2011/09/02:rpg]
- (loop :for (initarg slot-name) :in
- `((:author author)
- (:maintainer maintainer)
- (:licence licence)
- (:defsystem-depends-on defsystem-depends-on))
- :unless (member initarg initargs)
- :do (slot-makunbound obj slot-name)))
-
;;;; -------------------------------------------------------------------------
;;;; version-satisfies
@@ -1450,11 +1385,10 @@
(file-position s (+ start
network-volume-offset
#x14))))
- (concatenate 'string
- (read-null-terminated-string s)
- (progn
- (file-position s (+ start remaining-offset))
- (read-null-terminated-string s))))))
+ (strcat (read-null-terminated-string s)
+ (progn
+ (file-position s (+ start remaining-offset))
+ (read-null-terminated-string s))))))
(defun* parse-windows-shortcut (pathname)
(with-open-file (s pathname :element-type '(unsigned-byte 8))
@@ -1541,15 +1475,25 @@
;;; for the sake of keeping things reasonably neat, we adopt a
;;; convention that functions in this list are prefixed SYSDEF-
-(defparameter *system-definition-search-functions*
- '(sysdef-central-registry-search
- sysdef-source-registry-search
- sysdef-find-asdf))
+(defvar *system-definition-search-functions* '())
+
+(setf *system-definition-search-functions*
+ (append
+ ;; Remove known-incompatible sysdef functions from ancient sbcl asdf.
+ (remove 'contrib-sysdef-search *system-definition-search-functions*)
+ ;; Tuck our defaults at the end of the list if they were absent.
+ ;; This is imperfect, in case they were removed on purpose,
+ ;; but then it will be the responsibility of whoever does that
+ ;; to upgrade asdf before he does such a thing rather than after.
+ (remove-if #'(lambda (x) (member x *system-definition-search-functions*))
+ '(sysdef-central-registry-search
+ sysdef-source-registry-search
+ sysdef-find-asdf))))
(defun* search-for-system-definition (system)
- (let ((system-name (coerce-name system)))
- (some #'(lambda (x) (funcall x system-name))
- (cons 'find-system-if-being-defined *system-definition-search-functions*))))
+ (some (let ((name (coerce-name system))) #'(lambda (x) (funcall x name)))
+ (cons 'find-system-if-being-defined
+ *system-definition-search-functions*)))
(defvar *central-registry* nil
"A list of 'system directory designators' ASDF uses to find systems.
@@ -1599,7 +1543,7 @@
(let ((shortcut
(make-pathname
:defaults defaults :version :newest :case :local
- :name (concatenate 'string name ".asd")
+ :name (strcat name ".asd")
:type "lnk")))
(when (probe-file* shortcut)
(let ((target (parse-windows-shortcut shortcut)))
@@ -1673,6 +1617,7 @@
0)))
(defmethod find-system ((name null) &optional (error-p t))
+ (declare (ignorable name))
(when error-p
(sysdef-error (compatfmt "~@"))))
@@ -1692,7 +1637,7 @@
(let ((*systems-being-defined* (make-hash-table :test 'equal)))
(funcall thunk))))
-(defmacro with-system-definitions (() &body body)
+(defmacro with-system-definitions ((&optional) &body body)
`(call-with-system-definitions #'(lambda () , at body)))
(defun* load-sysdef (name pathname)
@@ -1708,22 +1653,37 @@
(let ((*package* package)
(*default-pathname-defaults*
(pathname-directory-pathname pathname)))
+ ;;; XXX Kludge for ABCL ticket #181
+ #+abcl
+ (when (ext:pathname-jar-p pathname)
+ (setf *default-pathname-defaults*
+ (make-pathname :device nil :defaults *default-pathname-defaults*)))
(asdf-message (compatfmt "~&~@<; ~@;Loading system definition from ~A into ~A~@:>~%")
pathname package)
(load pathname)))
(delete-package package)))))
-(defmethod find-system ((name string) &optional (error-p t))
- (with-system-definitions ()
- (let* ((in-memory (system-registered-p name)) ; load from disk if absent or newer on disk
- (previous (cdr in-memory))
- (previous (and (typep previous 'system) previous))
- (previous-time (car in-memory))
+(defun* locate-system (name)
+ "Given a system NAME designator, try to locate where to load the system from.
+Returns four values: FOUND-SYSTEM PATHNAME PREVIOUS PREVIOUS-TIME
+FOUNDP is true when a new was found, either a new unregistered one or a previously registered one.
+FOUND-SYSTEM when not null is a SYSTEM object that may be REGISTER-SYSTEM'ed as is
+PATHNAME when not null is a path from where to load the system, associated with FOUND-SYSTEM, or with the PREVIOUS system.
+PREVIOUS when not null is a previously loaded SYSTEM object of same name.
+PREVIOUS-TIME when not null is the time at which the PREVIOUS system was loaded."
+ (let* ((name (coerce-name name))
+ (in-memory (system-registered-p name)) ; load from disk if absent or newer on disk
+ (previous (cdr in-memory))
+ (previous (and (typep previous 'system) previous))
+ (previous-time (car in-memory))
(found (search-for-system-definition name))
- (found-system (and (typep found 'system) found))
- (pathname (or (and (typep found '(or pathname string)) (pathname found))
- (and found-system (system-source-file found-system))
- (and previous (system-source-file previous)))))
+ (found-system (and (typep found 'system) found))
+ (pathname (or (and (typep found '(or pathname string)) (pathname found))
+ (and found-system (system-source-file found-system))
+ (and previous (system-source-file previous))))
+ (foundp (and (or found-system pathname previous) t)))
+ (check-type found (or null pathname system))
+ (when foundp
(setf pathname (resolve-symlinks* pathname))
(when (and pathname (not (absolute-pathname-p pathname)))
(setf pathname (ensure-pathname-absolute pathname))
@@ -1733,23 +1693,37 @@
(system-source-file previous) pathname)))
(%set-system-source-file pathname previous)
(setf previous-time nil))
- (when (and found-system (not previous))
- (register-system found-system))
- (when (and pathname
- (or (not previous-time)
- ;; don't reload if it's already been loaded,
- ;; or its filestamp is in the future which means some clock is skewed
- ;; and trying to load might cause an infinite loop.
- (< previous-time (safe-file-write-date pathname) (get-universal-time))))
- (load-sysdef name pathname))
- (let ((in-memory (system-registered-p name))) ; try again after loading from disk
- (cond
- (in-memory
- (when pathname
- (setf (car in-memory) (safe-file-write-date pathname)))
- (cdr in-memory))
- (error-p
- (error 'missing-component :requires name)))))))
+ (values foundp found-system pathname previous previous-time))))
+
+(defmethod find-system ((name string) &optional (error-p t))
+ (with-system-definitions ()
+ (loop
+ (restart-case
+ (multiple-value-bind (foundp found-system pathname previous previous-time)
+ (locate-system name)
+ (declare (ignore foundp))
+ (when (and found-system (not previous))
+ (register-system found-system))
+ (when (and pathname
+ (or (not previous-time)
+ ;; don't reload if it's already been loaded,
+ ;; or its filestamp is in the future which means some clock is skewed
+ ;; and trying to load might cause an infinite loop.
+ (< previous-time (safe-file-write-date pathname) (get-universal-time))))
+ (load-sysdef name pathname))
+ (let ((in-memory (system-registered-p name))) ; try again after loading from disk if needed
+ (return
+ (cond
+ (in-memory
+ (when pathname
+ (setf (car in-memory) (safe-file-write-date pathname)))
+ (cdr in-memory))
+ (error-p
+ (error 'missing-component :requires name))))))
+ (reinitialize-source-registry-and-retry ()
+ :report (lambda (s)
+ (format s "~@" name))
+ (initialize-source-registry))))))
(defun* find-system-fallback (requested fallback &rest keys &key source-file &allow-other-keys)
(setf fallback (coerce-name fallback)
@@ -1871,6 +1845,17 @@
:type (source-file-type component (component-system component))
:defaults (component-parent-pathname component)))
+<<<<<<< .working
+=======
+(defun* subpathname (pathname subpath &key type)
+ (and pathname (merge-pathnames* (coerce-pathname subpath :type type)
+ (pathname-directory-pathname pathname))))
+
+(defun subpathname* (pathname subpath &key type)
+ (and pathname
+ (subpathname (ensure-directory-pathname pathname) subpath :type type)))
+
+>>>>>>> .merge-right.r13702
;;;; -------------------------------------------------------------------------
;;;; Operations
@@ -1973,10 +1958,9 @@
(cdr (assoc (type-of o) (component-in-order-to c))))
(defmethod component-self-dependencies ((o operation) (c component))
- (let ((all-deps (component-depends-on o c)))
- (remove-if-not #'(lambda (x)
- (member (component-name c) (cdr x) :test #'string=))
- all-deps)))
+ (remove-if-not
+ #'(lambda (x) (member (component-name c) (cdr x) :test #'string=))
+ (component-depends-on o c)))
(defmethod input-files ((operation operation) (c component))
(let ((parent (component-parent c))
@@ -2347,10 +2331,18 @@
((component-parent c)
(around-compile-hook (component-parent c)))))
+(defun ensure-function (fun &key (package :asdf))
+ (etypecase fun
+ ((or symbol function) fun)
+ (cons (eval `(function ,fun)))
+ (string (eval `(function ,(with-standard-io-syntax
+ (let ((*package* (find-package package)))
+ (read-from-string fun))))))))
+
(defmethod call-with-around-compile-hook ((c component) thunk)
(let ((hook (around-compile-hook c)))
(if hook
- (funcall hook thunk)
+ (funcall (ensure-function hook) thunk)
(funcall thunk))))
(defvar *compile-op-compile-file-function* 'compile-file*
@@ -2536,31 +2528,38 @@
(defgeneric* operate (operation-class system &key &allow-other-keys))
(defgeneric* perform-plan (plan &key))
+;;;; Separating this into a different function makes it more forward-compatible
+(defun* cleanup-upgraded-asdf (old-version)
+ (let ((new-version (asdf:asdf-version)))
+ (unless (equal old-version new-version)
+ (cond
+ ((version-satisfies new-version old-version)
+ (asdf-message (compatfmt "~&~@<; ~@;Upgraded ASDF from version ~A to version ~A~@:>~%")
+ old-version new-version))
+ ((version-satisfies old-version new-version)
+ (warn (compatfmt "~&~@<; ~@;Downgraded ASDF from version ~A to version ~A~@:>~%")
+ old-version new-version))
+ (t
+ (asdf-message (compatfmt "~&~@<; ~@;Changed ASDF from version ~A to incompatible version ~A~@:>~%")
+ old-version new-version)))
+ (let ((asdf (funcall (find-symbol* 'find-system :asdf) :asdf)))
+ ;; Invalidate all systems but ASDF itself.
+ (setf *defined-systems* (make-defined-systems-table))
+ (register-system asdf)
+ ;; If we're in the middle of something, restart it.
+ (when *systems-being-defined*
+ (let ((l (loop :for name :being :the :hash-keys :of *systems-being-defined* :collect name)))
+ (clrhash *systems-being-defined*)
+ (dolist (s l) (find-system s nil))))
+ t))))
+
;;;; Try to upgrade of ASDF. If a different version was used, return T.
;;;; We need do that before we operate on anything that depends on ASDF.
(defun* upgrade-asdf ()
(let ((version (asdf:asdf-version)))
(handler-bind (((or style-warning warning) #'muffle-warning))
(operate 'load-op :asdf :verbose nil))
- (let ((new-version (asdf:asdf-version)))
- (block nil
- (cond
- ((equal version new-version)
- (return nil))
- ((version-satisfies new-version version)
- (asdf-message (compatfmt "~&~@<; ~@;Upgraded ASDF from version ~A to version ~A~@:>~%")
- version new-version))
- ((version-satisfies version new-version)
- (warn (compatfmt "~&~@~%")
- version new-version))
- (t
- (asdf-message (compatfmt "~&~@<; ~@;Changed ASDF from version ~A to incompatible version ~A~@:>~%")
- version new-version)))
- (let ((asdf (funcall (find-symbol* 'find-system :asdf) :asdf)))
- ;; invalidate all systems but ASDF itself
- (setf *defined-systems* (make-defined-systems-table))
- (register-system asdf)
- t)))))
+ (cleanup-upgraded-asdf version)))
(defmethod perform-plan ((steps list) &key)
(let ((*package* *package*)
@@ -2624,7 +2623,7 @@
"))
(setf (documentation 'oos 'function)
(format nil
- "Short for _operate on system_ and an alias for the OPERATE function. ~&~&~a"
+ "Short for _operate on system_ and an alias for the OPERATE function.~%~%~a"
operate-docstring))
(setf (documentation 'operate 'function)
operate-docstring))
@@ -2636,6 +2635,9 @@
(apply 'operate 'load-op system args)
t)
+(defun* load-systems (&rest systems)
+ (map () 'load-system systems))
+
(defun* compile-system (system &rest args &key force verbose version
&allow-other-keys)
"Shorthand for `(operate 'asdf:compile-op system)`. See OPERATE
@@ -2694,7 +2696,7 @@
(if first-op-tree
(progn
(aif (assoc op2 (cdr first-op-tree))
- (if (find c (cdr it))
+ (if (find c (cdr it) :test #'equal)
nil
(setf (cdr it) (cons c (cdr it))))
(setf (cdr first-op-tree)
@@ -2716,8 +2718,7 @@
(defvar *serial-depends-on* nil)
(defun* sysdef-error-component (msg type name value)
- (sysdef-error (concatenate 'string msg
- (compatfmt "~&~@"))
+ (sysdef-error (strcat msg (compatfmt "~&~@"))
type name value))
(defun* check-component-input (type name weakly-depends-on
@@ -2794,29 +2795,22 @@
(warn (compatfmt "~@")
version name parent)))
- (let* ((other-args (remove-keys
- '(components pathname default-component-class
- perform explain output-files operation-done-p
- weakly-depends-on
- depends-on serial in-order-to)
- rest))
+ (let* ((args (list* :name (coerce-name name)
+ :pathname pathname
+ :parent parent
+ (remove-keys
+ '(components pathname default-component-class
+ perform explain output-files operation-done-p
+ weakly-depends-on depends-on serial in-order-to)
+ rest)))
(ret (find-component parent name)))
(when weakly-depends-on
(appendf depends-on (remove-if (complement #'find-system) weakly-depends-on)))
(when *serial-depends-on*
(push *serial-depends-on* depends-on))
- (if ret
- (apply 'reinitialize-instance ret
- :name (coerce-name name)
- :pathname pathname
- :parent parent
- other-args)
- (setf ret
- (apply 'make-instance (class-for-type parent type)
- :name (coerce-name name)
- :pathname pathname
- :parent parent
- other-args)))
+ (if ret ; preserve identity
+ (apply 'reinitialize-instance ret args)
+ (setf ret (apply 'make-instance (class-for-type parent type) args)))
(component-pathname ret) ; eagerly compute the absolute pathname
(when (typep ret 'module)
(setf (module-default-component-class ret)
@@ -2848,6 +2842,10 @@
(%refresh-component-inline-methods ret rest)
ret)))
+(defun* reset-system (system &rest keys &key &allow-other-keys)
+ (change-class (change-class system 'proto-system) 'system)
+ (apply 'reinitialize-instance system keys))
+
(defun* do-defsystem (name &rest options
&key (pathname nil pathname-arg-p) (class 'system)
defsystem-depends-on &allow-other-keys)
@@ -2860,14 +2858,14 @@
(with-system-definitions ()
(let* ((name (coerce-name name))
(registered (system-registered-p name))
- (system (cdr (or registered
- (register-system (make-instance 'system :name name)))))
+ (registered! (if registered
+ (rplaca registered (get-universal-time))
+ (register-system (make-instance 'system :name name))))
+ (system (reset-system (cdr registered!)
+ :name name :source-file (load-pathname)))
(component-options (remove-keys '(:class) options)))
- (%set-system-source-file (load-pathname) system)
(setf (gethash name *systems-being-defined*) system)
- (when registered
- (setf (car registered) (get-universal-time)))
- (map () 'load-system defsystem-depends-on)
+ (apply 'load-systems defsystem-depends-on)
;; We change-class (when necessary) AFTER we load the defsystem-dep's
;; since the class might not be defined as part of those.
(let ((class (class-for-type nil class)))
@@ -2952,7 +2950,7 @@
(ccl:run-program
(cond
((os-unix-p) "/bin/sh")
- ((os-windows-p) (format nil "CMD /C ~A" command)) ; BEWARE!
+ ((os-windows-p) (strcat "CMD /C " command)) ; BEWARE!
(t (error "Unsupported OS")))
(if (os-unix-p) (list "-c" command) '())
:input nil :output *verbose-out* :wait t)))
@@ -2964,6 +2962,9 @@
(list "-c" command)
:input nil :output *verbose-out*))
+ #+cormanlisp
+ (win32:system command)
+
#+ecl ;; courtesy of Juan Jose Garcia Ripoll
(ext:system command)
@@ -3159,41 +3160,46 @@
(and ts (values sp ts))))
(defun* user-configuration-directories ()
(let ((dirs
- (flet ((try (x sub) (try-directory-subpath x sub)))
- `(,(try (getenv "XDG_CONFIG_HOME") "common-lisp/")
- ,@(loop :with dirs = (getenv "XDG_CONFIG_DIRS")
- :for dir :in (split-string dirs :separator ":")
- :collect (try dir "common-lisp/"))
- ,@(when (os-windows-p)
- `(,(try (or #+lispworks (sys:get-folder-path :local-appdata)
- (getenv "LOCALAPPDATA"))
- "common-lisp/config/")
- ;; read-windows-registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\AppData
- ,(try (or #+lispworks (sys:get-folder-path :appdata)
- (getenv "APPDATA"))
- "common-lisp/config/")))
- ,(try (user-homedir) ".config/common-lisp/")))))
- (remove-duplicates (remove-if #'null dirs) :from-end t :test 'equal)))
+ `(,@(when (os-unix-p)
+ (cons
+ (subpathname* (getenv "XDG_CONFIG_HOME") "common-lisp/")
+ (loop :with dirs = (getenv "XDG_CONFIG_DIRS")
+ :for dir :in (split-string dirs :separator ":")
+ :collect (subpathname* dir "common-lisp/"))))
+ ,@(when (os-windows-p)
+ `(,(subpathname* (or #+lispworks (sys:get-folder-path :local-appdata)
+ (getenv "LOCALAPPDATA"))
+ "common-lisp/config/")
+ ;; read-windows-registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\AppData
+ ,(subpathname* (or #+lispworks (sys:get-folder-path :appdata)
+ (getenv "APPDATA"))
+ "common-lisp/config/")))
+ ,(subpathname (user-homedir) ".config/common-lisp/"))))
+ (remove-duplicates (remove-if-not #'absolute-pathname-p dirs)
+ :from-end t :test 'equal)))
(defun* system-configuration-directories ()
(cond
((os-unix-p) '(#p"/etc/common-lisp/"))
((os-windows-p)
(aif
- (flet ((try (x sub) (try-directory-subpath x sub)))
- ;; read-windows-registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common AppData
- (try (or #+lispworks (sys:get-folder-path :common-appdata)
- (getenv "ALLUSERSAPPDATA")
- (try (getenv "ALLUSERSPROFILE") "Application Data/"))
- "common-lisp/config/"))
+ ;; read-windows-registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common AppData
+ (subpathname* (or #+lispworks (sys:get-folder-path :common-appdata)
+ (getenv "ALLUSERSAPPDATA")
+ (subpathname* (getenv "ALLUSERSPROFILE") "Application Data/"))
+ "common-lisp/config/")
(list it)))))
-(defun* in-first-directory (dirs x)
- (loop :for dir :in dirs
- :thereis (and dir (probe-file* (merge-pathnames* x (ensure-directory-pathname dir))))))
-(defun* in-user-configuration-directory (x)
- (in-first-directory (user-configuration-directories) x))
-(defun* in-system-configuration-directory (x)
- (in-first-directory (system-configuration-directories) x))
+(defun* in-first-directory (dirs x &key (direction :input))
+ (loop :with fun = (ecase direction
+ ((nil :input :probe) 'probe-file*)
+ ((:output :io) 'identity))
+ :for dir :in dirs
+ :thereis (and dir (funcall fun (merge-pathnames* x (ensure-directory-pathname dir))))))
+
+(defun* in-user-configuration-directory (x &key (direction :input))
+ (in-first-directory (user-configuration-directories) x :direction direction))
+(defun* in-system-configuration-directory (x &key (direction :input))
+ (in-first-directory (system-configuration-directories) x :direction direction))
(defun* configuration-inheritance-directive-p (x)
(let ((kw '(:inherit-configuration :ignore-inherited-configuration)))
@@ -3547,14 +3553,14 @@
(defparameter *output-translations-file* (coerce-pathname "asdf-output-translations.conf"))
(defparameter *output-translations-directory* (coerce-pathname "asdf-output-translations.conf.d/"))
-(defun* user-output-translations-pathname ()
- (in-user-configuration-directory *output-translations-file*))
-(defun* system-output-translations-pathname ()
- (in-system-configuration-directory *output-translations-file*))
-(defun* user-output-translations-directory-pathname ()
- (in-user-configuration-directory *output-translations-directory*))
-(defun* system-output-translations-directory-pathname ()
- (in-system-configuration-directory *output-translations-directory*))
+(defun* user-output-translations-pathname (&key (direction :input))
+ (in-user-configuration-directory *output-translations-file* :direction direction))
+(defun* system-output-translations-pathname (&key (direction :input))
+ (in-system-configuration-directory *output-translations-file* :direction direction))
+(defun* user-output-translations-directory-pathname (&key (direction :input))
+ (in-user-configuration-directory *output-translations-directory* :direction direction))
+(defun* system-output-translations-directory-pathname (&key (direction :input))
+ (in-system-configuration-directory *output-translations-directory* :direction direction))
(defun* environment-output-translations ()
(getenv "ASDF_OUTPUT_TRANSLATIONS"))
@@ -3677,8 +3683,8 @@
(translate-pathname path absolute-source destination))))
(defun* apply-output-translations (path)
+ #+cormanlisp (truenamize path) #-cormanlisp
(etypecase path
- #+cormanlisp (t (truenamize path))
(logical-pathname
path)
((or pathname string)
@@ -3719,7 +3725,7 @@
(defun* tmpize-pathname (x)
(make-pathname
- :name (format nil "ASDF-TMP-~A" (pathname-name x))
+ :name (strcat "ASDF-TMP-" (pathname-name x))
:defaults x))
(defun* delete-file-if-exists (x)
@@ -3852,6 +3858,7 @@
(loop :for f :in entries
:for p = (or (and (typep f 'logical-pathname) f)
(let* ((u (ignore-errors (funcall merger f))))
+ ;; The first u avoids a cumbersome (truename u) error
(and u (equal (ignore-errors (truename u)) f) u)))
:when p :collect p)
entries))
@@ -3865,8 +3872,9 @@
(filter-logical-directory-results
directory entries
#'(lambda (f)
- (make-pathname :defaults directory :version (pathname-version f)
- :name (pathname-name f) :type (pathname-type f))))))
+ (make-pathname :defaults directory
+ :name (pathname-name f) :type (ununspecific (pathname-type f))
+ :version (ununspecific (pathname-version f)))))))
(defun* directory-asd-files (directory)
(directory-files directory *wild-asd*))
@@ -3875,9 +3883,9 @@
(let* ((directory (ensure-directory-pathname directory))
#-(or abcl cormanlisp genera xcl)
(wild (merge-pathnames*
- #-(or abcl allegro cmu lispworks scl xcl)
+ #-(or abcl allegro cmu lispworks sbcl scl xcl)
*wild-directory*
- #+(or abcl allegro cmu lispworks scl xcl) "*.*"
+ #+(or abcl allegro cmu lispworks sbcl scl xcl) "*.*"
directory))
(dirs
#-(or abcl cormanlisp genera xcl)
@@ -3887,16 +3895,16 @@
#+(or abcl xcl) (system:list-directory directory)
#+cormanlisp (cl::directory-subdirs directory)
#+genera (fs:directory-list directory))
- #+(or abcl allegro cmu genera lispworks scl xcl)
+ #+(or abcl allegro cmu genera lispworks sbcl scl xcl)
(dirs (loop :for x :in dirs
:for d = #+(or abcl xcl) (extensions:probe-directory x)
#+allegro (excl:probe-directory x)
- #+(or cmu scl) (directory-pathname-p x)
+ #+(or cmu sbcl scl) (directory-pathname-p x)
#+genera (getf (cdr x) :directory)
#+lispworks (lw:file-directory-p x)
:when d :collect #+(or abcl allegro xcl) d
#+genera (ensure-directory-pathname (first x))
- #+(or cmu lispworks scl) x)))
+ #+(or cmu lispworks sbcl scl) x)))
(filter-logical-directory-results
directory dirs
(let ((prefix (normalize-pathname-directory-component
@@ -4019,14 +4027,13 @@
:inherit-configuration
#+cmu (:tree #p"modules:")))
(defun* default-source-registry ()
- (flet ((try (x sub) (try-directory-subpath x sub)))
- `(:source-registry
- #+sbcl (:directory ,(try (user-homedir) ".sbcl/systems/"))
- (:directory ,(default-directory))
+ `(:source-registry
+ #+sbcl (:directory ,(subpathname (user-homedir) ".sbcl/systems/"))
+ (:directory ,(default-directory))
,@(loop :for dir :in
`(,@(when (os-unix-p)
`(,(or (getenv "XDG_DATA_HOME")
- (try (user-homedir) ".local/share/"))
+ (subpathname (user-homedir) ".local/share/"))
,@(split-string (or (getenv "XDG_DATA_DIRS")
"/usr/local/share:/usr/share")
:separator ":")))
@@ -4037,18 +4044,18 @@
(getenv "APPDATA"))
,(or #+lispworks (sys:get-folder-path :common-appdata)
(getenv "ALLUSERSAPPDATA")
- (try (getenv "ALLUSERSPROFILE") "Application Data/")))))
- :collect `(:directory ,(try dir "common-lisp/systems/"))
- :collect `(:tree ,(try dir "common-lisp/source/")))
- :inherit-configuration)))
-(defun* user-source-registry ()
- (in-user-configuration-directory *source-registry-file*))
-(defun* system-source-registry ()
- (in-system-configuration-directory *source-registry-file*))
-(defun* user-source-registry-directory ()
- (in-user-configuration-directory *source-registry-directory*))
-(defun* system-source-registry-directory ()
- (in-system-configuration-directory *source-registry-directory*))
+ (subpathname* (getenv "ALLUSERSPROFILE") "Application Data/")))))
+ :collect `(:directory ,(subpathname* dir "common-lisp/systems/"))
+ :collect `(:tree ,(subpathname* dir "common-lisp/source/")))
+ :inherit-configuration))
+(defun* user-source-registry (&key (direction :input))
+ (in-user-configuration-directory *source-registry-file* :direction direction))
+(defun* system-source-registry (&key (direction :input))
+ (in-system-configuration-directory *source-registry-file* :direction direction))
+(defun* user-source-registry-directory (&key (direction :input))
+ (in-user-configuration-directory *source-registry-directory* :direction direction))
+(defun* system-source-registry-directory (&key (direction :input))
+ (in-system-configuration-directory *source-registry-directory* :direction direction))
(defun* environment-source-registry ()
(getenv "CL_SOURCE_REGISTRY"))
@@ -4126,8 +4133,7 @@
(collect (list directory :recurse recurse :exclude exclude)))))
:test 'equal :from-end t)))
-;; Will read the configuration and initialize all internal variables,
-;; and return the new configuration.
+;; Will read the configuration and initialize all internal variables.
(defun* compute-source-registry (&optional parameter (registry *source-registry*))
(dolist (entry (flatten-source-registry parameter))
(destructuring-bind (directory &key recurse exclude) entry
From mevenson at common-lisp.net Wed Jan 4 21:51:16 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Wed, 04 Jan 2012 13:51:16 -0800
Subject: [armedbear-cvs] r13718 - in branches/1.0.x/abcl:
src/org/armedbear/lisp test/lisp/abcl
Message-ID:
Author: mevenson
Date: Wed Jan 4 13:51:15 2012
New Revision: 13718
Log:
backport r13704: Fix problems loading ABCL-CONTRIB.
Modified:
branches/1.0.x/abcl/src/org/armedbear/lisp/Pathname.java
branches/1.0.x/abcl/src/org/armedbear/lisp/asdf.lisp
branches/1.0.x/abcl/test/lisp/abcl/jar-pathname.lisp
Modified: branches/1.0.x/abcl/src/org/armedbear/lisp/Pathname.java
==============================================================================
--- branches/1.0.x/abcl/src/org/armedbear/lisp/Pathname.java Wed Jan 4 13:48:45 2012 (r13717)
+++ branches/1.0.x/abcl/src/org/armedbear/lisp/Pathname.java Wed Jan 4 13:51:15 2012 (r13718)
@@ -2169,9 +2169,18 @@
// Possibly canonicalize jar file directory
Cons jars = (Cons) pathname.device;
LispObject o = jars.car();
- if (o instanceof Pathname && ! (((Pathname)o).isURL())) {
+ if (o instanceof Pathname
+ && !(((Pathname)o).isURL())
+ // XXX Silently fail to call truename() if the default
+ // pathname defaults exist within a jar, as that will
+ // (probably) not succeed. The better solution would
+ // probably be to parametize the value of
+ // *DEFAULT-PATHNAME-DEFAULTS* on invocations of
+ // truename().
+ && !coerceToPathname(Symbol.DEFAULT_PATHNAME_DEFAULTS.symbolValue()).isJar())
+ {
LispObject truename = Pathname.truename((Pathname)o, errorIfDoesNotExist);
- if (truename != null
+ if (truename != null && truename != NIL
&& truename instanceof Pathname) {
Pathname truePathname = (Pathname)truename;
// A jar that is a directory makes no sense, so exit
Modified: branches/1.0.x/abcl/src/org/armedbear/lisp/asdf.lisp
==============================================================================
--- branches/1.0.x/abcl/src/org/armedbear/lisp/asdf.lisp Wed Jan 4 13:48:45 2012 (r13717)
+++ branches/1.0.x/abcl/src/org/armedbear/lisp/asdf.lisp Wed Jan 4 13:51:15 2012 (r13718)
@@ -1653,11 +1653,6 @@
(let ((*package* package)
(*default-pathname-defaults*
(pathname-directory-pathname pathname)))
- ;;; XXX Kludge for ABCL ticket #181
- #+abcl
- (when (ext:pathname-jar-p pathname)
- (setf *default-pathname-defaults*
- (make-pathname :device nil :defaults *default-pathname-defaults*)))
(asdf-message (compatfmt "~&~@<; ~@;Loading system definition from ~A into ~A~@:>~%")
pathname package)
(load pathname)))
Modified: branches/1.0.x/abcl/test/lisp/abcl/jar-pathname.lisp
==============================================================================
--- branches/1.0.x/abcl/test/lisp/abcl/jar-pathname.lisp Wed Jan 4 13:48:45 2012 (r13717)
+++ branches/1.0.x/abcl/test/lisp/abcl/jar-pathname.lisp Wed Jan 4 13:51:15 2012 (r13718)
@@ -481,8 +481,17 @@
"/foo/**/*.*")
#p"/foo/d/e/f.lisp")
-
-
-
-
-
+;;; ticket #181
+;;; TODO Make reasons for failure more clear
+(deftest jar-pathname.truename.1
+ (let* ((abcl
+ (slot-value (asdf:find-system 'abcl) 'asdf::absolute-pathname))
+ (jar-entry
+ (pathname (format nil "jar:file:~A/dist/abcl-contrib.jar!/jss/jss.asd" (namestring abcl))))
+ (jar-entry-dir
+ (make-pathname :defaults jar-entry :name nil :type nil))
+ (defaults
+ *default-pathname-defaults*))
+ (let ((*default-pathname-defaults* jar-entry-dir))
+ (not (probe-file (merge-pathnames jar-entry)))))
+ nil)
From mevenson at common-lisp.net Thu Jan 5 05:42:07 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Wed, 04 Jan 2012 21:42:07 -0800
Subject: [armedbear-cvs] r13719 - trunk/abcl/doc/manual
Message-ID:
Author: mevenson
Date: Wed Jan 4 21:42:04 2012
New Revision: 13719
Log:
abcl-1.0.0: update manual with light refresh.
(Unfinished) use spell checker; start to fix broken references with an
RDF vocabulary.
Modified:
trunk/abcl/doc/manual/abcl.tex
Modified: trunk/abcl/doc/manual/abcl.tex
==============================================================================
--- trunk/abcl/doc/manual/abcl.tex Wed Jan 4 13:51:15 2012 (r13718)
+++ trunk/abcl/doc/manual/abcl.tex Wed Jan 4 21:42:04 2012 (r13719)
@@ -5,7 +5,7 @@
\begin{document}
\title{A Manual for Armed Bear Common Lisp}
-\date{November 24, 2011}
+\date{January 5, 2012}
\author{Mark~Evenson, Erik~H\"{u}lsmann, Alessio~Stalla, Ville~Voutilainen}
\maketitle
@@ -21,7 +21,7 @@
implementation for users of the system.
\subsection{Version}
-This manual corresponds to abcl-1.0.0, released on October 22, 2011.
+This manual corresponds to abcl-1.0.1.
\subsection{License}
@@ -133,7 +133,7 @@
\end{itemize}
Somewhat confusingly, this statement of non-conformance in the
-accompanying user documentation fullfills the requirements that
+accompanying user documentation fulfills the requirements that
\textsc{ABCL} is a conforming ANSI Common Lisp implementation
according to the CLHS \footnote{Common Lisp Hyperspec language
reference document.}. Clarifications to this point are solicited.
@@ -148,7 +148,7 @@
\subsection{Deficiencies}
The following known problems detract from \textsc{ABCL} being a proper
-contemporary Comon Lisp.
+contemporary Common Lisp.
\begin{itemize}
\item An incomplete implementation of interactive debugging
@@ -816,11 +816,18 @@
ABCL has created specializations of the ANSI Pathname object to
enable to use of URIs to address dynamically loaded resources for the
-JVM. A URL-PATHNAME has a corresponding URL whose cannoical
+JVM. A URL-PATHNAME has a corresponding URL whose canonical
representation is defined to be the NAMESTRING of the Pathname.
+%
\begin{verbatim}
- JAR-PATHNAME isa URL-PATHNAME isa PATHNAME
+
+# RDF description of type hierarchy
+% TODO Render via some LaTeX mode for graphviz?
+
+ a .
+ a .
+ a .
\end{verbatim}
Both URL-PATHNAME and JAR-PATHNAME may be used anywhere a PATHNAME is
@@ -848,7 +855,7 @@
will load and execute the Quicklisp setup code.
-\ref{XACH2011}
+See \ref{_:XACH2011} on page \pageref{_:XACH2011}.
\subsubsection{Implementation}
@@ -1051,7 +1058,7 @@
\label{section:jss}
To one used to a syntax that can construct macros the Java syntax
-may be said to suck, so we introduce the \#" macro.
+may be said to suck, so we introduce the \code{SHARPSIGN-DOUBLE-QUOTE} \#" macro.
\subsection{JSS usage}
@@ -1101,10 +1108,12 @@
\begin{thebibliography}{9}
+\label{_:1}
\bibitem{Java2000}
``A New Era for Java Protocol Handlers.''
\url{http://java.sun.com/developer/onlineTraining/protocolhandlers/}
+\label{_:XACH2011}
\bibitem{Xach2011}
Zach Beene
``Quicklisp: A system for quickly constructing Common Lisp''
From ehuelsmann at common-lisp.net Thu Jan 5 21:56:45 2012
From: ehuelsmann at common-lisp.net (ehuelsmann at common-lisp.net)
Date: Thu, 05 Jan 2012 13:56:45 -0800
Subject: [armedbear-cvs] r13720 - trunk/abcl/src/org/armedbear/lisp
Message-ID:
Author: ehuelsmann
Date: Thu Jan 5 13:56:44 2012
New Revision: 13720
Log:
String hash randomization.
Modified:
trunk/abcl/src/org/armedbear/lisp/ComplexString.java
trunk/abcl/src/org/armedbear/lisp/Lisp.java
trunk/abcl/src/org/armedbear/lisp/SimpleString.java
Modified: trunk/abcl/src/org/armedbear/lisp/ComplexString.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/ComplexString.java Wed Jan 4 21:42:04 2012 (r13719)
+++ trunk/abcl/src/org/armedbear/lisp/ComplexString.java Thu Jan 5 13:56:44 2012 (r13720)
@@ -517,7 +517,7 @@
@Override
public int sxhash()
{
- int hashCode = 0;
+ int hashCode = randomStringHashBase;
final int limit = length();
for (int i = 0; i < limit; i++)
{
@@ -535,7 +535,7 @@
@Override
public int psxhash()
{
- int hashCode = 0;
+ int hashCode = randomStringHashBase;
final int limit = length();
for (int i = 0; i < limit; i++)
{
Modified: trunk/abcl/src/org/armedbear/lisp/Lisp.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/Lisp.java Wed Jan 4 21:42:04 2012 (r13719)
+++ trunk/abcl/src/org/armedbear/lisp/Lisp.java Thu Jan 5 13:56:44 2012 (r13720)
@@ -141,6 +141,13 @@
// End-of-file marker.
public static final LispObject EOF = new LispObject();
+ // String hash randomization base
+ // Sets a base offset hashing value per JVM session, as an antidote to
+ // http://www.nruns.com/_downloads/advisory28122011.pdf
+ // (Denial of Service through hash table multi-collisions)
+ public static final int randomStringHashBase =
+ (int)(new java.util.Date().getTime());
+
public static boolean profiling;
public static boolean sampling;
Modified: trunk/abcl/src/org/armedbear/lisp/SimpleString.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/SimpleString.java Wed Jan 4 21:42:04 2012 (r13719)
+++ trunk/abcl/src/org/armedbear/lisp/SimpleString.java Thu Jan 5 13:56:44 2012 (r13720)
@@ -416,7 +416,7 @@
@Override
public int sxhash()
{
- int hashCode = 0;
+ int hashCode = randomStringHashBase;
for (int i = 0; i < capacity; i++) {
hashCode += chars[i];
hashCode += (hashCode << 10);
@@ -426,13 +426,13 @@
hashCode ^= (hashCode >> 11);
hashCode += (hashCode << 15);
return (hashCode & 0x7fffffff);
- }
+ }
// For EQUALP hash tables.
@Override
public int psxhash()
{
- int hashCode = 0;
+ int hashCode = randomStringHashBase;
for (int i = 0; i < capacity; i++) {
hashCode += Character.toUpperCase(chars[i]);
hashCode += (hashCode << 10);
From mevenson at common-lisp.net Fri Jan 6 14:29:57 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Fri, 06 Jan 2012 06:29:57 -0800
Subject: [armedbear-cvs] r13721 - branches/1.0.x/abcl/src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Fri Jan 6 06:29:51 2012
New Revision: 13721
Log:
backport r13720: randomize string hash computation to guard against exploits.
Modified:
branches/1.0.x/abcl/src/org/armedbear/lisp/ComplexString.java
branches/1.0.x/abcl/src/org/armedbear/lisp/Lisp.java
branches/1.0.x/abcl/src/org/armedbear/lisp/SimpleString.java
Modified: branches/1.0.x/abcl/src/org/armedbear/lisp/ComplexString.java
==============================================================================
--- branches/1.0.x/abcl/src/org/armedbear/lisp/ComplexString.java Thu Jan 5 13:56:44 2012 (r13720)
+++ branches/1.0.x/abcl/src/org/armedbear/lisp/ComplexString.java Fri Jan 6 06:29:51 2012 (r13721)
@@ -517,7 +517,7 @@
@Override
public int sxhash()
{
- int hashCode = 0;
+ int hashCode = randomStringHashBase;
final int limit = length();
for (int i = 0; i < limit; i++)
{
@@ -535,7 +535,7 @@
@Override
public int psxhash()
{
- int hashCode = 0;
+ int hashCode = randomStringHashBase;
final int limit = length();
for (int i = 0; i < limit; i++)
{
Modified: branches/1.0.x/abcl/src/org/armedbear/lisp/Lisp.java
==============================================================================
--- branches/1.0.x/abcl/src/org/armedbear/lisp/Lisp.java Thu Jan 5 13:56:44 2012 (r13720)
+++ branches/1.0.x/abcl/src/org/armedbear/lisp/Lisp.java Fri Jan 6 06:29:51 2012 (r13721)
@@ -141,6 +141,13 @@
// End-of-file marker.
public static final LispObject EOF = new LispObject();
+ // String hash randomization base
+ // Sets a base offset hashing value per JVM session, as an antidote to
+ // http://www.nruns.com/_downloads/advisory28122011.pdf
+ // (Denial of Service through hash table multi-collisions)
+ public static final int randomStringHashBase =
+ (int)(new java.util.Date().getTime());
+
public static boolean profiling;
public static boolean sampling;
Modified: branches/1.0.x/abcl/src/org/armedbear/lisp/SimpleString.java
==============================================================================
--- branches/1.0.x/abcl/src/org/armedbear/lisp/SimpleString.java Thu Jan 5 13:56:44 2012 (r13720)
+++ branches/1.0.x/abcl/src/org/armedbear/lisp/SimpleString.java Fri Jan 6 06:29:51 2012 (r13721)
@@ -416,7 +416,7 @@
@Override
public int sxhash()
{
- int hashCode = 0;
+ int hashCode = randomStringHashBase;
for (int i = 0; i < capacity; i++) {
hashCode += chars[i];
hashCode += (hashCode << 10);
@@ -426,13 +426,13 @@
hashCode ^= (hashCode >> 11);
hashCode += (hashCode << 15);
return (hashCode & 0x7fffffff);
- }
+ }
// For EQUALP hash tables.
@Override
public int psxhash()
{
- int hashCode = 0;
+ int hashCode = randomStringHashBase;
for (int i = 0; i < capacity; i++) {
hashCode += Character.toUpperCase(chars[i]);
hashCode += (hashCode << 10);
From mevenson at common-lisp.net Fri Jan 6 14:32:49 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Fri, 06 Jan 2012 06:32:49 -0800
Subject: [armedbear-cvs] r13722 - branches/1.0.x/abcl
Message-ID:
Author: mevenson
Date: Fri Jan 6 06:32:48 2012
New Revision: 13722
Log:
backport r13709: spellcheck README.
Modified:
branches/1.0.x/abcl/README
Modified: branches/1.0.x/abcl/README
==============================================================================
--- branches/1.0.x/abcl/README Fri Jan 6 06:29:51 2012 (r13721)
+++ branches/1.0.x/abcl/README Fri Jan 6 06:32:48 2012 (r13722)
@@ -64,7 +64,7 @@
* Use the Ant build tool for Java environments.
-* Use the Netbeans 6.x IDE to open ABCL as a project.
+* Use the NetBeans 6.x IDE to open ABCL as a project.
* Bootstrap ABCL using a Common Lisp implementation. Supported
implementations for this process: SBCL, CMUCL, OpenMCL, Allegro
@@ -105,7 +105,7 @@
Using NetBeans
--------------
-Obtain and install the [Netbeans IDE][2]. One should be able to open
+Obtain and install the [NetBeans IDE][2]. One should be able to open
the ABCL directory as a project in the Netbeans 6.x application,
whereupon the usual build, run, and debug targets as invoked in the
GUI are available.
@@ -127,7 +127,7 @@
situation, paying attention to the comments in the file. The critical
step is to have Lisp special variable '*JDK*' point to the root of the
Java Development Kit. Underneath the directory referenced by the
-value of '*JDK*' there should be an exectuable Java compiler in
+value of '*JDK*' there should be an executable Java compiler in
'bin/javac' ('bin/java.exe' under Windows).
Then, one may either use the 'build-from-lisp.sh' shell script or load
@@ -176,8 +176,8 @@
ABCL is a conforming ANSI Common Lisp implementation. Any other
behavior should be reported as a bug.
-ABCL now has a manual stating its confomance to the ANSI standard,
-providing a compliant and practicalCommon Lisp implementation.
+ABCL now has a manual stating its conformance to the ANSI standard,
+providing a compliant and practical Common Lisp implementation.
Because of this,
@@ -188,7 +188,7 @@
Maxima's test suite runs without failures.
-### Deficencies
+### Deficiencies
The MOP implementation is incomplete.
From mevenson at common-lisp.net Fri Jan 6 14:34:39 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Fri, 06 Jan 2012 06:34:39 -0800
Subject: [armedbear-cvs] r13723 - branches/1.0.x/abcl/src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Fri Jan 6 06:34:39 2012
New Revision: 13723
Log:
backport r13705: internal Java API for looking up internal vs. external symbols.
Modified:
branches/1.0.x/abcl/src/org/armedbear/lisp/Package.java
Modified: branches/1.0.x/abcl/src/org/armedbear/lisp/Package.java
==============================================================================
--- branches/1.0.x/abcl/src/org/armedbear/lisp/Package.java Fri Jan 6 06:32:48 2012 (r13722)
+++ branches/1.0.x/abcl/src/org/armedbear/lisp/Package.java Fri Jan 6 06:34:39 2012 (r13723)
@@ -209,11 +209,21 @@
return internalSymbols.get(name.toString());
}
+ public Symbol findInternalSymbol(String name)
+ {
+ return internalSymbols.get(name);
+ }
+
public Symbol findExternalSymbol(SimpleString name)
{
return externalSymbols.get(name.toString());
}
+ public Symbol findExternalSymbol(String name)
+ {
+ return externalSymbols.get(name);
+ }
+
public Symbol findExternalSymbol(SimpleString name, int hash)
{
return externalSymbols.get(name.toString());
From mevenson at common-lisp.net Fri Jan 6 14:35:40 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Fri, 06 Jan 2012 06:35:40 -0800
Subject: [armedbear-cvs] r13724 - branches/1.0.x/abcl/src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Fri Jan 6 06:35:39 2012
New Revision: 13724
Log:
backport r13706: use new API to fix Stream.readToken() bug reported by Blake McBride.
Modified:
branches/1.0.x/abcl/src/org/armedbear/lisp/Stream.java
Modified: branches/1.0.x/abcl/src/org/armedbear/lisp/Stream.java
==============================================================================
--- branches/1.0.x/abcl/src/org/armedbear/lisp/Stream.java Fri Jan 6 06:34:39 2012 (r13723)
+++ branches/1.0.x/abcl/src/org/armedbear/lisp/Stream.java Fri Jan 6 06:35:39 2012 (r13724)
@@ -1030,11 +1030,8 @@
if (Symbol.READ_SUPPRESS.symbolValue(thread) != NIL)
return NIL;
final LispObject readtableCase = rt.getReadtableCase();
- final String token;
- if (readtableCase == Keyword.INVERT)
- token = invert(sb.toString(), flags);
- else
- token = sb.toString();
+ final String token = sb.toString();
+ final boolean invert = readtableCase == Keyword.INVERT;
final int length = token.length();
if (length > 0) {
final char firstChar = token.charAt(0);
@@ -1073,33 +1070,62 @@
return number;
}
}
- if (firstChar == ':')
- if (flags == null || !flags.get(0))
- return PACKAGE_KEYWORD.intern(token.substring(1));
- int index = findUnescapedDoubleColon(token, flags);
- if (index > 0) {
- String packageName = token.substring(0, index);
- String symbolName = token.substring(index + 2);
- Package pkg = Packages.findPackage(packageName);
- if (pkg == null)
- return error(new LispError("Package \"" + packageName +
- "\" not found."));
- return pkg.intern(symbolName);
+
+ String symbolName;
+ String packageName = null;
+ BitSet symbolFlags;
+ BitSet packageFlags = null;
+ Package pkg = null;
+ boolean internSymbol = true;
+ if (firstChar == ':' && (flags == null || !flags.get(0))) {
+ symbolName = token.substring(1);
+ pkg = PACKAGE_KEYWORD;
+ if (flags != null)
+ symbolFlags = flags.get(1, flags.size());
+ else
+ symbolFlags = null;
+ } else {
+ int index = findUnescapedDoubleColon(token, flags);
+ if (index > 0) {
+ packageName = token.substring(0, index);
+ packageFlags = (flags != null) ? flags.get(0, index) : null;
+ symbolName = token.substring(index + 2);
+ symbolFlags = (flags != null) ? flags.get(index+2, flags.size()) : null;
+ } else {
+ index = findUnescapedSingleColon(token, flags);
+ if (index > 0) {
+ packageName = token.substring(0, index);
+ packageFlags = (flags != null) ? flags.get(0, index) : null;
+ symbolName = token.substring(index + 1);
+ symbolFlags = (flags != null) ? flags.get(index+2, flags.size()) : null;
+ internSymbol = false;
+ } else {
+ pkg = (Package)Symbol._PACKAGE_.symbolValue(thread);
+ symbolName = token;
+ symbolFlags = flags;
+ }
+ }
}
- index = findUnescapedSingleColon(token, flags);
- if (index > 0) {
- final String packageName = token.substring(0, index);
- Package pkg = Packages.findPackage(packageName);
+ if (pkg == null) {
+ if (invert)
+ packageName = invert(packageName, packageFlags);
+
+ pkg = Packages.findPackage(packageName);
if (pkg == null)
- return error(new PackageError("Package \"" + packageName +
- "\" not found."));
- final String symbolName = token.substring(index + 1);
- final SimpleString s = new SimpleString(symbolName);
- Symbol symbol = pkg.findExternalSymbol(s);
+ return error(new ReaderError("The package \"" + packageName + "\" can't be found.", this));
+ }
+ if (invert)
+ symbolName = invert(symbolName, symbolFlags);
+
+ if (internSymbol) {
+ return pkg.intern(symbolName);
+ } else {
+ Symbol symbol = pkg.findExternalSymbol(symbolName);
if (symbol != null)
return symbol;
+
// Error!
- if (pkg.findInternalSymbol(s) != null)
+ if (pkg.findInternalSymbol(symbolName) != null)
return error(new ReaderError("The symbol \"" + symbolName +
"\" is not external in package " +
packageName + '.',
@@ -1111,8 +1137,7 @@
this));
}
}
- // Intern token in current package.
- return ((Package)Symbol._PACKAGE_.symbolValue(thread)).intern(new SimpleString(token));
+ return error(new ReaderError("Can't intern zero-length symbol.", this));
}
private final BitSet _readToken(StringBuilder sb, Readtable rt)
From ehuelsmann at common-lisp.net Fri Jan 6 22:14:09 2012
From: ehuelsmann at common-lisp.net (ehuelsmann at common-lisp.net)
Date: Fri, 06 Jan 2012 14:14:09 -0800
Subject: [armedbear-cvs] r13725 - trunk/abcl/src/org/armedbear/lisp
Message-ID:
Author: ehuelsmann
Date: Fri Jan 6 14:14:08 2012
New Revision: 13725
Log:
Patch by Rudi Schlatte: Move EqualSpecializerObject to clos.lisp.
Deleted:
trunk/abcl/src/org/armedbear/lisp/EqualSpecializerObject.java
Modified:
trunk/abcl/src/org/armedbear/lisp/clos.lisp
Modified: trunk/abcl/src/org/armedbear/lisp/clos.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/clos.lisp Fri Jan 6 06:35:39 2012 (r13724)
+++ trunk/abcl/src/org/armedbear/lisp/clos.lisp Fri Jan 6 14:14:08 2012 (r13725)
@@ -1189,6 +1189,10 @@
(setf (std-slot-value instance 'sys::object) object)
instance))))
+(defun eql-specializer-object (eql-specializer)
+ (check-type eql-specializer eql-specializer)
+ (std-slot-value eql-specializer 'sys::object))
+
;; MOP (p. 216) specifies the following reader generic functions:
;; generic-function-argument-precedence-order
;; generic-function-declarations
From ehuelsmann at common-lisp.net Fri Jan 6 22:45:49 2012
From: ehuelsmann at common-lisp.net (ehuelsmann at common-lisp.net)
Date: Fri, 06 Jan 2012 14:45:49 -0800
Subject: [armedbear-cvs] r13726 - trunk/abcl/src/org/armedbear/lisp
Message-ID:
Author: ehuelsmann
Date: Fri Jan 6 14:45:48 2012
New Revision: 13726
Log:
Patch by Rudi Schlatte: Make method combinations real classes.
Modified:
trunk/abcl/src/org/armedbear/lisp/StandardClass.java
trunk/abcl/src/org/armedbear/lisp/Symbol.java
trunk/abcl/src/org/armedbear/lisp/clos.lisp
Modified: trunk/abcl/src/org/armedbear/lisp/StandardClass.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/StandardClass.java Fri Jan 6 14:14:08 2012 (r13725)
+++ trunk/abcl/src/org/armedbear/lisp/StandardClass.java Fri Jan 6 14:45:48 2012 (r13726)
@@ -425,6 +425,15 @@
addStandardClass(Symbol.GENERIC_FUNCTION, list(METAOBJECT,
BuiltInClass.FUNCTION));
+ public static final StandardClass METHOD_COMBINATION =
+ addStandardClass(Symbol.METHOD_COMBINATION, list(METAOBJECT));
+
+ public static final StandardClass SHORT_METHOD_COMBINATION =
+ addStandardClass(Symbol.SHORT_METHOD_COMBINATION, list(METHOD_COMBINATION));
+
+ public static final StandardClass LONG_METHOD_COMBINATION =
+ addStandardClass(Symbol.LONG_METHOD_COMBINATION, list(METHOD_COMBINATION));
+
public static final StandardClass CLASS =
addStandardClass(Symbol.CLASS, list(SPECIALIZER));
@@ -651,6 +660,42 @@
EQL_SPECIALIZER.setDirectSlotDefinitions(
list(new SlotDefinition(Symbol.OBJECT, list(PACKAGE_MOP.intern("EQL-SPECIALIZER-OBJECT")))));
METHOD.setCPL(METHOD, METAOBJECT, STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ METHOD_COMBINATION.setCPL(METHOD_COMBINATION, METAOBJECT, STANDARD_OBJECT,
+ BuiltInClass.CLASS_T);
+ METHOD_COMBINATION.setDirectSlotDefinitions(
+ list(new SlotDefinition(Symbol.NAME,
+ list(Symbol.METHOD_COMBINATION_NAME)),
+ new SlotDefinition(Symbol.DOCUMENTATION,
+ list(Symbol.METHOD_COMBINATION_DOCUMENTATION))));
+ SHORT_METHOD_COMBINATION.setCPL(SHORT_METHOD_COMBINATION,
+ METHOD_COMBINATION, METAOBJECT,
+ STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ SHORT_METHOD_COMBINATION.setDirectSlotDefinitions(
+ list(new SlotDefinition(Symbol.OPERATOR,
+ list(Symbol.SHORT_METHOD_COMBINATION_OPERATOR)),
+ new SlotDefinition(Symbol.IDENTITY_WITH_ONE_ARGUMENT,
+ list(Symbol.SHORT_METHOD_COMBINATION_IDENTITY_WITH_ONE_ARGUMENT))));
+ LONG_METHOD_COMBINATION.setCPL(LONG_METHOD_COMBINATION,
+ METHOD_COMBINATION, METAOBJECT,
+ STANDARD_OBJECT, BuiltInClass.CLASS_T);
+ LONG_METHOD_COMBINATION.setDirectSlotDefinitions(
+ list(new SlotDefinition(Symbol.LAMBDA_LIST,
+ list(Symbol.LONG_METHOD_COMBINATION_LAMBDA_LIST)),
+ new SlotDefinition(Symbol.METHOD_GROUP_SPECS,
+ list(Symbol.LONG_METHOD_COMBINATION_METHOD_GROUP_SPECS)),
+ new SlotDefinition(Symbol.ARGS_LAMBDA_LIST,
+ list(Symbol.LONG_METHOD_COMBINATION_ARGS_LAMBDA_LIST)),
+ new SlotDefinition(Symbol.GENERIC_FUNCTION_SYMBOL,
+ list(Symbol.LONG_METHOD_COMBINATION_GENERIC_FUNCTION_SYMBOL)),
+ new SlotDefinition(Symbol.FUNCTION,
+ list(Symbol.LONG_METHOD_COMBINATION_FUNCTION)),
+ new SlotDefinition(Symbol.ARGUMENTS,
+ list(Symbol.LONG_METHOD_COMBINATION_ARGUMENTS)),
+ new SlotDefinition(Symbol.DECLARATIONS,
+ list(Symbol.LONG_METHOD_COMBINATION_DECLARATIONS)),
+ new SlotDefinition(Symbol.FORMS,
+ list(Symbol.LONG_METHOD_COMBINATION_FORMS))));
+
PACKAGE_ERROR.setCPL(PACKAGE_ERROR, ERROR, SERIOUS_CONDITION, CONDITION,
STANDARD_OBJECT, BuiltInClass.CLASS_T);
PACKAGE_ERROR.setDirectSlotDefinitions(
@@ -740,6 +785,9 @@
METAOBJECT.finalizeClass();
SPECIALIZER.finalizeClass();
EQL_SPECIALIZER.finalizeClass();
+ METHOD_COMBINATION.finalizeClass();
+ SHORT_METHOD_COMBINATION.finalizeClass();
+ LONG_METHOD_COMBINATION.finalizeClass();
PACKAGE_ERROR.finalizeClass();
PARSE_ERROR.finalizeClass();
PRINT_NOT_READABLE.finalizeClass();
Modified: trunk/abcl/src/org/armedbear/lisp/Symbol.java
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/Symbol.java Fri Jan 6 14:14:08 2012 (r13725)
+++ trunk/abcl/src/org/armedbear/lisp/Symbol.java Fri Jan 6 14:45:48 2012 (r13726)
@@ -2971,6 +2971,10 @@
PACKAGE_MOP.addExternalSymbol("EQL-SPECIALIZER");
public static final Symbol EQL_SPECIALIZER_OBJECT =
PACKAGE_MOP.addExternalSymbol("EQL-SPECIALIZER-OBJECT");
+ public static final Symbol SHORT_METHOD_COMBINATION =
+ PACKAGE_MOP.addInternalSymbol("SHORT-METHOD-COMBINATION");
+ public static final Symbol LONG_METHOD_COMBINATION =
+ PACKAGE_MOP.addInternalSymbol("LONG-METHOD-COMBINATION");
public static final Symbol METAOBJECT =
PACKAGE_MOP.addExternalSymbol("METAOBJECT");
public static final Symbol SPECIALIZER =
@@ -2987,6 +2991,48 @@
PACKAGE_MOP.addExternalSymbol("STANDARD-DIRECT-SLOT-DEFINITION");
public static final Symbol STANDARD_EFFECTIVE_SLOT_DEFINITION =
PACKAGE_MOP.addExternalSymbol("STANDARD-EFFECTIVE-SLOT-DEFINITION");
+ // MOP method combination readers.
+ public static final Symbol METHOD_COMBINATION_NAME =
+ PACKAGE_MOP.addInternalSymbol("METHOD-COMBINATION-NAME");
+ public static final Symbol METHOD_COMBINATION_DOCUMENTATION =
+ PACKAGE_MOP.addInternalSymbol("METHOD-COMBINATION-DOCUMENTATION");
+ public static final Symbol SHORT_METHOD_COMBINATION_OPERATOR =
+ PACKAGE_MOP.addInternalSymbol("SHORT-METHOD-COMBINATION-OPERATOR");
+ public static final Symbol SHORT_METHOD_COMBINATION_IDENTITY_WITH_ONE_ARGUMENT =
+ PACKAGE_MOP.addInternalSymbol("SHORT-METHOD-COMBINATION-IDENTITY-WITH-ONE-ARGUMENT");
+ public static final Symbol LONG_METHOD_COMBINATION_LAMBDA_LIST =
+ PACKAGE_MOP.addInternalSymbol("LONG-METHOD-COMBINATION-LAMBDA-LIST");
+ public static final Symbol LONG_METHOD_COMBINATION_METHOD_GROUP_SPECS =
+ PACKAGE_MOP.addInternalSymbol("LONG-METHOD-COMBINATION-METHOD-GROUP-SPECS");
+ public static final Symbol LONG_METHOD_COMBINATION_ARGS_LAMBDA_LIST =
+ PACKAGE_MOP.addInternalSymbol("LONG-METHOD-COMBINATION-ARGS-LAMBDA-LIST");
+ public static final Symbol LONG_METHOD_COMBINATION_GENERIC_FUNCTION_SYMBOL =
+ PACKAGE_MOP.addInternalSymbol("LONG-METHOD-COMBINATION-GENERIC-FUNCTION-SYMBOL");
+ public static final Symbol LONG_METHOD_COMBINATION_FUNCTION =
+ PACKAGE_MOP.addInternalSymbol("LONG-METHOD-COMBINATION-FUNCTION");
+ public static final Symbol LONG_METHOD_COMBINATION_ARGUMENTS =
+ PACKAGE_MOP.addInternalSymbol("LONG-METHOD-COMBINATION-ARGUMENTS");
+ public static final Symbol LONG_METHOD_COMBINATION_DECLARATIONS =
+ PACKAGE_MOP.addInternalSymbol("LONG-METHOD-COMBINATION-DECLARATIONS");
+ public static final Symbol LONG_METHOD_COMBINATION_FORMS =
+ PACKAGE_MOP.addInternalSymbol("LONG-METHOD-COMBINATION-FORMS");
+ public static final Symbol OPERATOR =
+ PACKAGE_MOP.addInternalSymbol("OPERATOR");
+ public static final Symbol IDENTITY_WITH_ONE_ARGUMENT =
+ PACKAGE_MOP.addInternalSymbol("IDENTITY-WITH-ONE-ARGUMENT");
+ public static final Symbol METHOD_GROUP_SPECS =
+ PACKAGE_MOP.addInternalSymbol("METHOD-GROUP-SPECS");
+ public static final Symbol ARGS_LAMBDA_LIST =
+ PACKAGE_MOP.addInternalSymbol("ARGS-LAMBDA-LIST");
+ public static final Symbol GENERIC_FUNCTION_SYMBOL =
+ PACKAGE_MOP.addInternalSymbol("GENERIC-FUNCTION-SYMBOL");
+ public static final Symbol ARGUMENTS =
+ PACKAGE_MOP.addInternalSymbol("ARGUMENTS");
+ public static final Symbol DECLARATIONS =
+ PACKAGE_MOP.addInternalSymbol("DECLARATIONS");
+ public static final Symbol FORMS =
+ PACKAGE_MOP.addInternalSymbol("FORMS");
+
// Java interface.
public static final Symbol JAVA_EXCEPTION =
@@ -3138,6 +3184,8 @@
PACKAGE_SYS.addInternalSymbol("LISP-STACK-FRAME");
public static final Symbol JAVA_STACK_FRAME =
PACKAGE_SYS.addInternalSymbol("JAVA-STACK-FRAME");
+ public static final Symbol LAMBDA_LIST =
+ PACKAGE_SYS.addInternalSymbol("LAMBDA-LIST");
// CDR6
public static final Symbol _INSPECTOR_HOOK_ =
Modified: trunk/abcl/src/org/armedbear/lisp/clos.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/clos.lisp Fri Jan 6 14:14:08 2012 (r13725)
+++ trunk/abcl/src/org/armedbear/lisp/clos.lisp Fri Jan 6 14:45:48 2012 (r13726)
@@ -826,26 +826,6 @@
,(canonicalize-direct-slots direct-slots)
,@(canonicalize-defclass-options options)))
-(defstruct method-combination
- name
- documentation)
-
-(defstruct (short-method-combination
- (:include method-combination))
- operator
- identity-with-one-argument)
-
-(defstruct (long-method-combination
- (:include method-combination))
- lambda-list
- method-group-specs
- args-lambda-list
- generic-function-symbol
- function
- arguments
- declarations
- forms)
-
(defun expand-long-defcombin (name args)
(destructuring-bind (lambda-list method-groups &rest body) args
`(apply #'define-long-form-method-combination
@@ -854,6 +834,96 @@
(list ,@(mapcar #'canonicalize-method-group-spec method-groups))
',body)))
+;;; The class method-combination and its subclasses are defined in
+;;; StandardClass.java, but we cannot use make-instance and slot-value
+;;; yet.
+(defun make-short-method-combination (&key name documentation operator identity-with-one-argument)
+ (let ((instance (std-allocate-instance (find-class 'short-method-combination))))
+ (when name (setf (std-slot-value instance 'sys::name) name))
+ (when documentation
+ (setf (std-slot-value instance 'documentation) documentation))
+ (when operator (setf (std-slot-value instance 'operator) operator))
+ (when identity-with-one-argument
+ (setf (std-slot-value instance 'identity-with-one-argument)
+ identity-with-one-argument))
+ instance))
+
+(defun make-long-method-combination (&key name documentation lambda-list
+ method-group-specs args-lambda-list
+ generic-function-symbol function
+ arguments declarations forms)
+ (let ((instance (std-allocate-instance (find-class 'long-method-combination))))
+ (when name (setf (std-slot-value instance 'sys::name) name))
+ (when documentation
+ (setf (std-slot-value instance 'documentation) documentation))
+ (when lambda-list
+ (setf (std-slot-value instance 'sys::lambda-list) lambda-list))
+ (when method-group-specs
+ (setf (std-slot-value instance 'method-group-specs) method-group-specs))
+ (when args-lambda-list
+ (setf (std-slot-value instance 'args-lambda-list) args-lambda-list))
+ (when generic-function-symbol
+ (setf (std-slot-value instance 'generic-function-symbol)
+ generic-function-symbol))
+ (when function
+ (setf (std-slot-value instance 'function) function))
+ (when arguments
+ (setf (std-slot-value instance 'arguments) arguments))
+ (when declarations
+ (setf (std-slot-value instance 'declarations) declarations))
+ (when forms
+ (setf (std-slot-value instance 'forms) forms))
+ instance))
+
+(defun method-combination-name (method-combination)
+ (check-type method-combination method-combination)
+ (std-slot-value method-combination 'sys::name))
+
+(defun method-combination-documentation (method-combination)
+ (check-type method-combination method-combination)
+ (std-slot-value method-combination 'documentation))
+
+(defun short-method-combination-operator (method-combination)
+ (check-type method-combination short-method-combination)
+ (std-slot-value method-combination 'operator))
+
+(defun short-method-combination-identity-with-one-argument (method-combination)
+ (check-type method-combination short-method-combination)
+ (std-slot-value method-combination 'identity-with-one-argument))
+
+(defun long-method-combination-lambda-list (method-combination)
+ (check-type method-combination long-method-combination)
+ (std-slot-value method-combination 'sys::lambda-list))
+
+(defun long-method-combination-method-group-specs (method-combination)
+ (check-type method-combination long-method-combination)
+ (std-slot-value method-combination 'method-group-specs))
+
+(defun long-method-combination-args-lambda-list (method-combination)
+ (check-type method-combination long-method-combination)
+ (std-slot-value method-combination 'args-lambda-list))
+
+(defun long-method-combination-generic-function-symbol (method-combination)
+ (check-type method-combination long-method-combination)
+ (std-slot-value method-combination 'generic-function-symbol))
+
+(defun long-method-combination-function (method-combination)
+ (check-type method-combination long-method-combination)
+ (std-slot-value method-combination 'function))
+
+(defun long-method-combination-arguments (method-combination)
+ (check-type method-combination long-method-combination)
+ (std-slot-value method-combination 'arguments))
+
+(defun long-method-combination-declarations (method-combination)
+ (check-type method-combination long-method-combination)
+ (std-slot-value method-combination 'declarations))
+
+(defun long-method-combination-forms (method-combination)
+ (check-type method-combination long-method-combination)
+ (std-slot-value method-combination 'forms))
+
+
(defun expand-short-defcombin (whole)
(let* ((name (cadr whole))
(documentation
From astalla at common-lisp.net Sat Jan 7 23:09:32 2012
From: astalla at common-lisp.net (astalla at common-lisp.net)
Date: Sat, 07 Jan 2012 15:09:32 -0800
Subject: [armedbear-cvs] r13727 - trunk/abcl/src/org/armedbear/lisp
Message-ID:
Author: astalla
Date: Sat Jan 7 15:09:30 2012
New Revision: 13727
Log:
Class writer: basic support for annotations (only without parameters)
Runtime-class: annotations on methods only, with no syntax sugar yet
Modified:
trunk/abcl/src/org/armedbear/lisp/jvm-class-file.lisp
trunk/abcl/src/org/armedbear/lisp/runtime-class.lisp
Modified: trunk/abcl/src/org/armedbear/lisp/jvm-class-file.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/jvm-class-file.lisp Fri Jan 6 14:45:48 2012 (r13726)
+++ trunk/abcl/src/org/armedbear/lisp/jvm-class-file.lisp Sat Jan 7 15:09:30 2012 (r13727)
@@ -1321,6 +1321,92 @@
(write-u2 (local-descriptor local-variable) stream)
(write-u2 (local-index local-variable) stream)))
+;;Annotations
+
+(defstruct (annotations-attribute
+ (:conc-name annotations-)
+ (:include attribute
+ ;;Name is to be provided by subtypes
+ (finalizer #'finalize-annotations)
+ (writer #'write-annotations)))
+ "An attribute of a class, method or field, containing a list of annotations.
+This structure serves as the abstract supertype of concrete annotations types."
+ list ;; a list of annotation structures, in reverse order
+ )
+
+(defstruct annotation
+ "Each value of the annotations table represents a single runtime-visible annotation on a program element.
+ The annotation structure has the following format:
+ annotation {
+ u2 type_index;
+ u2 num_element_value_pairs;
+ {
+ u2 element_name_index;
+ element_value value;
+ } element_value_pairs[num_element_value_pairs]
+ }"
+ type
+ elements)
+
+(defstruct annotation-element name value)
+
+(defstruct annotation-element-value tag finalizer writer)
+
+(defstruct (primitive-or-string-annotation-element-value
+ (:conc-name primitive-or-string-annotation-element-)
+ (:include annotation-element-value
+ (finalizer (lambda (self class)
+ (let ((value (primitive-or-string-annotation-element-value self)))
+ (etypecase value
+ (boolean
+ (setf (annotation-element-value-tag self)
+ (char-code #\B)
+ (primitive-or-string-annotation-element-value self)
+ (pool-add-int (class-file-constants class) (if value 1 0))))))))
+ (writer (lambda (self stream)
+ (write-u1 (annotation-element-value-tag self) stream)
+ (write-u2 (primitive-or-string-annotation-element-value self) stream)))))
+ value)
+
+(defstruct (runtime-visible-annotations-attribute
+ (:include annotations-attribute
+ (name "RuntimeVisibleAnnotations")
+ (finalizer #'finalize-annotations)
+ (writer #'write-annotations)))
+ "4.8.15 The RuntimeVisibleAnnotations attribute
+The RuntimeVisibleAnnotations attribute is a variable length attribute in the
+attributes table of the ClassFile, field_info, and method_info structures. The
+RuntimeVisibleAnnotations attribute records runtime-visible Java program-
+ming language annotations on the corresponding class, method, or field. Each
+ClassFile, field_info, and method_info structure may contain at most one
+RuntimeVisibleAnnotations attribute, which records all the runtime-visible
+Java programming language annotations on the corresponding program element.
+The JVM must make these annotations available so they can be returned by the
+appropriate reflective APIs.")
+
+(defun finalize-annotations (annotations code class)
+ (declare (ignore code))
+ (dolist (ann (annotations-list annotations))
+ (setf (annotation-type ann)
+ (pool-add-class (class-file-constants class)
+ (if (jvm-class-name-p (annotation-type ann))
+ (annotation-type ann)
+ (make-jvm-class-name (annotation-type ann)))))
+ (dolist (elem (annotation-elements ann))
+ (setf (annotation-element-name elem)
+ (pool-add-utf8 (class-file-constants class)
+ (annotation-element-name elem)))
+ (funcall (annotation-element-value-finalizer (annotation-element-value elem))
+ (annotation-element-value elem) class))))
+
+(defun write-annotations (annotations stream)
+ (write-u2 (length (annotations-list annotations)) stream)
+ (dolist (annotation (reverse (annotations-list annotations)))
+ (write-u2 (annotation-type annotation) stream)
+ (write-u2 (length (annotation-elements annotation)) stream)
+ (dolist (elem (reverse (annotation-elements annotation)))
+ (funcall (annotation-element-value-writer elem) elem stream))))
+
#|
;; this is the minimal sequence we need to support:
Modified: trunk/abcl/src/org/armedbear/lisp/runtime-class.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/runtime-class.lisp Fri Jan 6 14:45:48 2012 (r13726)
+++ trunk/abcl/src/org/armedbear/lisp/runtime-class.lisp Sat Jan 7 15:09:30 2012 (r13727)
@@ -1,4 +1,5 @@
(require "COMPILER-PASS2")
+(require "JVM-CLASS-FILE")
(in-package :jvm)
@@ -25,10 +26,10 @@
be called with the second and first arguments.
Method definitions are lists of the form
- (method-name return-type argument-types function modifier*)
+ (method-name return-type argument-types function &key modifiers annotations)
where method-name is a string, return-type and argument-types are strings or keywords for
primitive types (:void, :int, etc.), and function is a Lisp function of minimum arity
- (1+ (length argument-types)); the instance (`this') is passed in as the last argument.
+ (1+ (length argument-types)); the instance (`this') is passed in as the first argument.
Field definitions are lists of the form
(field-name type modifier*)
@@ -44,66 +45,69 @@
(setf (class-file-interfaces class-file)
(mapcar #'make-jvm-class-name interfaces))
(dolist (m methods)
- (destructuring-bind (name return-type argument-types function &rest flags) m
- (let* ((argument-types (mapcar #'make-jvm-class-name argument-types))
- (argc (length argument-types))
- (return-type (if (keywordp return-type)
- return-type
- (make-jvm-class-name return-type)))
- (jmethod (make-jvm-method name return-type argument-types :flags (or flags '(:public))))
- (field-name (string (gensym name))))
- (class-add-method class-file jmethod)
- (let ((field (make-field field-name +lisp-object+ :flags '(:public :static))))
- (class-add-field class-file field)
- (push (cons field-name function) method-implementation-fields))
- (with-code-to-method (class-file jmethod)
- ;;Allocate registers (2 * argc to load and store arguments + 2 to box "this")
- (dotimes (i (* 2 (1+ argc)))
- (allocate-register nil))
- ;;Box "this" (to be passed as the first argument to the Lisp function)
- (aload 0)
- (emit 'iconst_1) ;;true
- (emit-invokestatic +abcl-java-object+ "getInstance"
- (list +java-object+ :boolean) +lisp-object+)
- (astore (1+ argc))
- ;;Box each argument
- (loop
- :for arg-type :in argument-types
- :for i :from 1
- :do (progn
- (cond
- ((keywordp arg-type)
- (error "Unsupported arg-type: ~A" arg-type))
- ((eq arg-type :int) :todo)
- (t (aload i)
- (emit 'iconst_1) ;;true
- (emit-invokestatic +abcl-java-object+ "getInstance"
- (list +java-object+ :boolean) +lisp-object+)))
- (astore (+ i (1+ argc)))))
- ;;Load the Lisp function from its static field
- (emit-getstatic jvm-class-name field-name +lisp-object+)
- (if (<= (1+ argc) call-registers-limit)
- (progn
- ;;Load the boxed this
- (aload (1+ argc))
- ;;Load each boxed argument
- (dotimes (i argc)
- (aload (+ argc 2 i))))
- (error "execute(LispObject[]) is currently not supported"))
- (emit-call-execute (1+ (length argument-types)))
- (cond
- ((eq return-type :void)
- (emit 'pop)
- (emit 'return))
- ((eq return-type :int)
- (emit-invokevirtual +lisp-object+ "intValue" nil :int)
- (emit 'ireturn))
- ((keywordp return-type)
- (error "Unsupported return type: ~A" return-type))
- (t
- (emit-invokevirtual +lisp-object+ "javaInstance" nil +java-object+)
- (emit-checkcast return-type)
- (emit 'areturn)))))))
+ (destructuring-bind (name return-type argument-types function &key (modifiers '(:public)) annotations) m
+ (let* ((argument-types (mapcar #'make-jvm-class-name argument-types))
+ (argc (length argument-types))
+ (return-type (if (keywordp return-type)
+ return-type
+ (make-jvm-class-name return-type)))
+ (jmethod (make-jvm-method name return-type argument-types :flags modifiers))
+ (field-name (string (gensym name))))
+ (class-add-method class-file jmethod)
+ (let ((field (make-field field-name +lisp-object+ :flags '(:public :static))))
+ (class-add-field class-file field)
+ (push (cons field-name function) method-implementation-fields))
+ (when annotations
+ (method-add-attribute jmethod (make-runtime-visible-annotations-attribute
+ :list (mapcar #'parse-annotation annotations))))
+ (with-code-to-method (class-file jmethod)
+ ;;Allocate registers (2 * argc to load and store arguments + 2 to box "this")
+ (dotimes (i (* 2 (1+ argc)))
+ (allocate-register nil))
+ ;;Box "this" (to be passed as the first argument to the Lisp function)
+ (aload 0)
+ (emit 'iconst_1) ;;true
+ (emit-invokestatic +abcl-java-object+ "getInstance"
+ (list +java-object+ :boolean) +lisp-object+)
+ (astore (1+ argc))
+ ;;Box each argument
+ (loop
+ :for arg-type :in argument-types
+ :for i :from 1
+ :do (progn
+ (cond
+ ((keywordp arg-type)
+ (error "Unsupported arg-type: ~A" arg-type))
+ ((eq arg-type :int) :todo)
+ (t (aload i)
+ (emit 'iconst_1) ;;true
+ (emit-invokestatic +abcl-java-object+ "getInstance"
+ (list +java-object+ :boolean) +lisp-object+)))
+ (astore (+ i (1+ argc)))))
+ ;;Load the Lisp function from its static field
+ (emit-getstatic jvm-class-name field-name +lisp-object+)
+ (if (<= (1+ argc) call-registers-limit)
+ (progn
+ ;;Load the boxed this
+ (aload (1+ argc))
+ ;;Load each boxed argument
+ (dotimes (i argc)
+ (aload (+ argc 2 i))))
+ (error "execute(LispObject[]) is currently not supported"))
+ (emit-call-execute (1+ (length argument-types)))
+ (cond
+ ((eq return-type :void)
+ (emit 'pop)
+ (emit 'return))
+ ((eq return-type :int)
+ (emit-invokevirtual +lisp-object+ "intValue" nil :int)
+ (emit 'ireturn))
+ ((jvm-class-name-p return-type)
+ (emit-invokevirtual +lisp-object+ "javaInstance" nil +java-object+)
+ (emit-checkcast return-type)
+ (emit 'areturn))
+ (t
+ (error "Unsupported return type: ~A" return-type)))))))
(when (null constructors)
(let ((ctor (make-jvm-method :constructor :void nil :flags '(:public))))
(class-add-method class-file ctor)
@@ -124,13 +128,17 @@
(setf (java:jfield jclass (car method)) (cdr method)))
jclass)))
+(defun parse-annotation (annotation)
+ annotation) ;;TODO
+
#+example
(java:jnew-runtime-class
"Foo"
:interfaces (list "java.lang.Comparable")
:methods (list
(list "foo" :void '("java.lang.Object")
- (lambda (this that) (print (list this that))))
+ (lambda (this that) (print (list this that)))
+ :annotations (list (make-annotation :type "java.lang.Deprecated")))
(list "bar" :int '("java.lang.Object")
(lambda (this that) (print (list this that)) 23))))
From mevenson at common-lisp.net Mon Jan 9 08:38:54 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 00:38:54 -0800
Subject: [armedbear-cvs] r13728 - branches/1.0.x/abcl/doc/manual
Message-ID:
Author: mevenson
Date: Mon Jan 9 00:38:52 2012
New Revision: 13728
Log:
Backport changes to manual en masse.
Added:
branches/1.0.x/abcl/doc/manual/README.markdown
- copied unchanged from r13727, trunk/abcl/doc/manual/README.markdown
branches/1.0.x/abcl/doc/manual/grovel.lisp
- copied unchanged from r13727, trunk/abcl/doc/manual/grovel.lisp
Modified:
branches/1.0.x/abcl/doc/manual/abcl.sty
branches/1.0.x/abcl/doc/manual/abcl.tex
branches/1.0.x/abcl/doc/manual/extensions.tex
branches/1.0.x/abcl/doc/manual/java.tex
branches/1.0.x/abcl/doc/manual/threads.tex
Copied: branches/1.0.x/abcl/doc/manual/README.markdown (from r13727, trunk/abcl/doc/manual/README.markdown)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/1.0.x/abcl/doc/manual/README.markdown Mon Jan 9 00:38:52 2012 (r13728, copy of r13727, trunk/abcl/doc/manual/README.markdown)
@@ -0,0 +1,6 @@
+ABCL User Manual
+================
+
+With a suitable TexLive installed, to build simply issue:
+
+ cmd$ pdflatex abcl.tex && makeindex abcl && pdflatex abcl.tex
Modified: branches/1.0.x/abcl/doc/manual/abcl.sty
==============================================================================
--- branches/1.0.x/abcl/doc/manual/abcl.sty Sat Jan 7 15:09:30 2012 (r13727)
+++ branches/1.0.x/abcl/doc/manual/abcl.sty Mon Jan 9 00:38:52 2012 (r13728)
@@ -34,4 +34,12 @@
\usepackage{verbatim}
+%% For setting margins in docstrings
+\usepackage{changepage}
+
+\usepackage{makeidx}
+
+\makeindex
+
\ProvidesPackage{abcl}
+
Modified: branches/1.0.x/abcl/doc/manual/abcl.tex
==============================================================================
--- branches/1.0.x/abcl/doc/manual/abcl.tex Sat Jan 7 15:09:30 2012 (r13727)
+++ branches/1.0.x/abcl/doc/manual/abcl.tex Mon Jan 9 00:38:52 2012 (r13728)
@@ -5,8 +5,8 @@
\begin{document}
\title{A Manual for Armed Bear Common Lisp}
-\date{October 21, 2011}
-\author{Mark~Evenson, Erik~Huelsmann, Alessio~Stalla, Ville~Voutilainen}
+\date{January 5, 2012}
+\author{Mark~Evenson, Erik~H\"{u}lsmann, Alessio~Stalla, Ville~Voutilainen}
\maketitle
@@ -14,12 +14,14 @@
\chapter{Introduction}
-Armed Bear is a (mostly) conforming implementation of the ANSI Common
-Lisp standard. This manual documents the Armed Bear Common Lisp
+Armed Bear is a conforming implementation of the ANSI Common Lisp
+standard (see \ref{chapter:conformance} on page
+\pageref{chapter:conformance} which states the details of the
+conformance level. This manual documents the Armed Bear Common Lisp
implementation for users of the system.
\subsection{Version}
-This manual corresponds to abcl-1.0.0, released on October 22, 2011.
+This manual corresponds to abcl-1.0.1.
\subsection{License}
@@ -52,21 +54,22 @@
\textsc{ABCL} is packaged as a single jar file usually named either
``abcl.jar'' or possibly``abcl-1.0.0.jar'' if one is using a versioned
package from your system vendor. This byte archive can be executed
-under the control of a suitable JVM by using the ``-jar'' option to
-parse the manifest, and select the named class
-(\code{org.armedbear.lisp.Main}) for execution, viz:
+under the control of a suitable JVM \footnote {Java Virtual Machine}
+by using the ``-jar'' option to parse the manifest, and select the
+class named therein ``\code{org.armedbear.lisp.Main}'' for execution,
+viz:
\begin{listing-shell}
cmd$ java -jar abcl.jar
\end{listing-shell}
-N.b. for the proceeding command to work, the ``java'' executable needs
+\emph{N.b.} for the proceeding command to work, the ``java'' executable needs
to be in your path.
To make it easier to facilitate the use of ABCL in tool chains (such
as SLIME \footnote{SLIME is the Superior Lisp Mode for Interaction
under Emacs}) the invocation is wrapped in a Bourne shell script
-under UNIX or a DOS command script under Windows so that ABCL may be
+under \textsc{UNIX} or a \textsc{DOS} command script under Windows so that ABCL may be
executed simply as:
\begin{listing-shell}
@@ -106,7 +109,7 @@
\section{Initialization}
-If the ABCL process is started without the ``--noinit'' flag, it
+If the \textsc{ABCL} process is started without the ``--noinit'' flag, it
attempts to load a file named ``.abclrc'' located in the user's home
directory and then interpret its contents.
@@ -116,6 +119,7 @@
JVM implementation that \textsc{ABCL} finds itself hosted upon.
\chapter{Conformance}
+\label{chapter:conformance}
\section{ANSI Common Lisp}
\textsc{ABCL} is currently a (non)-conforming ANSI Common Lisp
@@ -129,7 +133,7 @@
\end{itemize}
Somewhat confusingly, this statement of non-conformance in the
-accompanying user documentation fullfills the requirements that
+accompanying user documentation fulfills the requirements that
\textsc{ABCL} is a conforming ANSI Common Lisp implementation
according to the CLHS \footnote{Common Lisp Hyperspec language
reference document.}. Clarifications to this point are solicited.
@@ -144,10 +148,18 @@
\subsection{Deficiencies}
The following known problems detract from \textsc{ABCL} being a proper
-contemporary Comon Lisp.
+contemporary Common Lisp.
\begin{itemize}
+
+ \item An incomplete implementation of interactive debugging
+ mechanisms namely a no-op version of
+ \code{STEP} \footnote{Somewhat surprisingly allowed by
+ \textsc{ANSI}}, the inability to inspect local variables in a
+ given call frame, and the inability to resume a halted computation
+ at an arbitrarily selected call frame.
+
\item An incomplete implementation of a properly named metaobject
- protocol (viz. (A)MOP \footnote{Another Metaobject Protocol} )
+ protocol (viz. (A)MOP \footnote{The Art of the Metaobject Protocol} )
% N.b.
% TODO go through AMOP with symbols, starting by looking for
@@ -161,7 +173,7 @@
byte-level manipulations.
\item Incomplete documentation (missing docstrings from exported
- symbols.
+ symbols and the draft status of the User Manual).
\end{itemize}
@@ -200,11 +212,12 @@
\subsection{Low-level Java API}
-We define a higher level Java API in the \ref{topic:Higher level Java
- API: JSS}(JSS package) which is available in the \code{contrib/} \ref{topic:contrib}
-directory. This package is described later in this document. This
-section covers the lower level API directly available after evaluating
-\code{(require 'JAVA)}.
+We define a higher level Java API in the topic:Higher level Java JSS
+package developed by Alan Ruttenberg which is available in the
+\code{contrib/} directory, see the . This package is
+described later in this document, see \ref{section:jss} on page
+\pageref{section:jss}. This section covers the lower level API
+directly available after evaluating \code{(require 'JAVA)}.
\subsubsection{Calling Java Object Methods}
@@ -747,12 +760,10 @@
CL-USER> (add-to-classpath "/path/to/some.jar")
\end{listing-lisp}
-N.b \code{add-to-classpath} only affects the classloader used by ABCL
+N.b \code{ADD-TO-CLASSPATH} only affects the classloader used by ABCL
(the value of the special variable \code{JAVA:*CLASSLOADER*}. It has
no effect on Java code outside ABCL.
-\subsection{API}
-
% include autogen docs for the JAVA package.
\include{java}
@@ -763,8 +774,6 @@
excellent \code{java.util.concurrent} packages may be manipulated
directly via the JSS contrib to great effect.
-\subsection{API}
-
% include autogen docs for the THREADS package.
\include{threads}
@@ -776,10 +785,8 @@
running external programs, registering object finalizers, constructing
reference weakly held by the garbage collector and others.
-See \ref{Extensible Sequences} for a generic function interface to
-the native JVM contract for \code{java.util.List}.
-
-\subsection{API}
+See \ref{Rhodes2007} for a generic function interface to the native
+JVM contract for \code{java.util.List}.
% include autogen docs for the EXTENSIONS package.
\include{extensions}
@@ -804,15 +811,23 @@
JVM ``understands''. Support is built-in to the ``http'' and
``https'' implementations but additional protocol handlers may be
installed at runtime by having JVM symbols present in the
-sun.net.protocol.dynmamic pacakge. See [JAVA2006] for more details.
+sun.net.protocol.dynmamic pacakge. See Java2007 \cite{Java2007} for more
+details.
ABCL has created specializations of the ANSI Pathname object to
enable to use of URIs to address dynamically loaded resources for the
-JVM. A URL-PATHNAME has a corresponding URL whose cannoical
+JVM. A URL-PATHNAME has a corresponding URL whose canonical
representation is defined to be the NAMESTRING of the Pathname.
+%
\begin{verbatim}
- JAR-PATHNAME isa URL-PATHNAME isa PATHNAME
+
+# RDF description of type hierarchy
+% TODO Render via some LaTeX mode for graphviz?
+
+ a .
+ a .
+ a .
\end{verbatim}
Both URL-PATHNAME and JAR-PATHNAME may be used anywhere a PATHNAME is
@@ -832,7 +847,7 @@
\end{itemize}
The implementation of URL-PATHNAME allows the ABCL user to laod dynamically
-code from the network. For example, for Quicklisp.
+code from the network. For example, for Quicklisp (\cite{Xach2011}):
\begin{listing-lisp}
CL-USER> (load "http://beta.quicklisp.org/quicklisp.lisp")
@@ -840,16 +855,16 @@
will load and execute the Quicklisp setup code.
-\ref{XACH2011}
+See \ref{_:XACH2011} on page \pageref{_:XACH2011}.
\subsubsection{Implementation}
-\textsc{DEVICE} either a string denoting a drive letter under DOS or a cons
-specifying a \textsc{URL-PATHNAME}.
+\code{DEVICE} either a string denoting a drive letter under DOS or a cons
+specifying a \code{URL-PATHNAME}.
\section{Extensible Sequences}
-See \ref{RHODES2007} RHODES2007 for the design.
+See Rhodes2007 \cite{RHODES2007} for the design.
The SEQUENCE package fully implements Christopher Rhodes' proposal for
extensible sequences. These user extensible sequences are used
@@ -931,14 +946,18 @@
\subsection{JSS optionally extends the Reader}
The JSS contrib consitutes an additional, optional extension to the
-reader in the definition of the \#\" reader macro.
+reader in the definition of the \#\" reader macro. See
+\ref{section:jss} on page \pageref{section:jss} for more information.
\section{ASDF}
asdf-2.017.22 is packaged as core component of ABCL, but not
-intialized by default, as it relies on the CLOS subsystem which can
-take a bit of time to initialize. It may be initialized by the ANSI
-\textsc{REQUIRE} mechanism as follows:
+initialized by default, as it relies on the CLOS subsystem which can
+take a bit of time to start \footnote{While this time is ``merely'' on
+ the order of seconds for contemporary 2011 machines, for
+ applications that need to initialize quickly, for example a web
+ server, this time might be unnecessarily long}. ASDF may be loaded
+by the \textsc{ANSI} \code{REQUIRE} mechanism as follows:
\begin{listing-lisp}
CL-USER> (require 'asdf)
@@ -946,23 +965,39 @@
\chapter{Contrib}
+The ABCL contrib is packaged as a separate jar archive usually named
+\code{abcl-contrib.jar} or possibly something like
+\code{abcl-contrib-1.0.0.jar}. The contrib jar is not loaded by the
+implementation by default, and must be first intialized by the
+\code{REQUIRE} mechanism before using any specific contrib:
+
+\begin{listing-lisp}
+CL-USER> (require 'abcl-contrib)
+\end{listing-lisp}
+
\section{abcl-asdf}
-This contrib to ABCL enables an additional syntax for ASDF system
-definition which dynamically loads JVM artifacts such as jar archives
-via a Maven encapsulation. The Maven Aether can also be directly
-manipulated by the function associated with the RESOLVE-DEPENDENCIES symbol.
+This contrib enables an additional syntax for \textsc{ASDF} system
+definition which dynamically loads \textsc{JVM} artifacts such as jar
+archives via encapsulation of the Maven build tool. The Maven Aether
+component can also be directly manipulated by the function associated
+with the \code{ABCL-ASDF:RESOLVE-DEPENDENCIES} symbol.
-%ABCL specific contributions to ASDF system definition mainly concerned
-%with finding JVM artifacts such as jar archives to be dynamically loaded.
+%ABCL specific contributions to ASDF system definition mainly
+%concerned with finding JVM artifacts such as jar archives to be
+%dynamically loaded.
-The following ASDF components are added: \textsc{JAR-FILE}, \textsc{JAR-DIRECTORY},
-\textsc{CLASS-FILE-DIRECTORY} and \textsc{MVN}.
+The following \textsc{ASDF} components are added: \code{JAR-FILE},
+\code{JAR-DIRECTORY}, \code{CLASS-FILE-DIRECTORY} and \code{MVN}.
+\subsection{Referencing Maven Artifacts via ASDF}
-\subsection{ABCL-ASDF Examples}
+Maven artifacts may be referenced within \textsc{ASDF} system
+definitions, as the following example references the
+\code{log4j-1.4.9.jar} JVM artifact which provides a widely-used
+abstraction for handling logging systems:
\begin{listing-lisp}
;;;; -*- Mode: LISP -*-
@@ -973,75 +1008,85 @@
:version "1.4.9")))
\end{listing-lisp}
-\subsection{abcl-asdf API}
+\subsection{API}
-We define an API as consisting of the following ASDF classes:
+We define an API for \textsc{ABCL-ASDF} as consisting of the following
+ASDF classes:
-\textsc{JAR-DIRECTORY}, \textsc{JAR-FILE}, and
-\textsc{CLASS-FILE-DIRECTORY} for JVM artifacts that have a currently
-valid pathname representation
+\code{JAR-DIRECTORY}, \code{JAR-FILE}, and
+\code{CLASS-FILE-DIRECTORY} for JVM artifacts that have a currently
+valid pathname representation.
-And the MVN and IRI classes descend from ASDF-COMPONENT, but do not
+Both the MVN and IRI classes descend from ASDF-COMPONENT, but do not
directly have a filesystem location.
-For use outside of ASDF, we currently define one method,
-\textsc{RESOLVE-DEPENDENCIES} which locates, downloads, caches, and then loads
-into the currently executing JVM process all recursive dependencies
-annotated in the Maven pom.xml graph.
+For use outside of ASDF system definitions, we currently define one
+method, \code{ABCL-ASDF:RESOLVE-DEPENDENCIES} which locates,
+downloads, caches, and then loads into the currently executing JVM
+process all recursive dependencies annotated in the Maven pom.xml
+graph.
-\subsection{ABCL-ASDF Example 2}
+\subsection{Directly Instructing Maven to Download JVM Artifacts}
-Bypassing ASDF, one can directly issue requests for the Maven
+Bypassing \textsc{ASDF}, one can directly issue requests for the Maven
artifacts to be downloaded
\begin{listing-lisp}
- CL-USER> (abcl-asdf:resolve-dependencies "com.google.gwt" "gwt-user")
- WARNING: Using LATEST for unspecified version.
- "/Users/evenson/.m2/repository/com/google/gwt/gwt-user/2.4.0-rc1/gwt-user-2.4.0-rc1.jar:/Users/evenson/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar:/Users/evenson/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-sources.jar"
+CL-USER> (abcl-asdf:resolve-dependencies "com.google.gwt" "gwt-user")
+WARNING: Using LATEST for unspecified version.
+"/Users/evenson/.m2/repository/com/google/gwt/gwt-user/2.4.0-rc1/gwt-user-2.4.0-rc1.jar:/Users/evenson/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar:/Users/evenson/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-sources.jar"
\end{listing-lisp}
-To actually load the dependency, use the JAVA:ADD-TO-CLASSPATH generic
+To actually load the dependency, use the \code{JAVA:ADD-TO-CLASSPATH} generic
function:
\begin{listing-lisp}
- CL-USER> (java:add-to-classpath (abcl-asdf:resolve-dependencies "com.google.gwt" "gwt-user"))
+CL-USER> (java:add-to-classpath (abcl-asdf:resolve-dependencies "com.google.gwt" "gwt-user"))
\end{listing-lisp}
Notice that all recursive dependencies have been located and installed
locally from the network as well.
-
\section{asdf-jar}
-ASDF-JAR provides a system for packaging ASDF systems into jar
-archives for ABCL. Given a running ABCL image with loadable ASDF
+The asdf-jar contrib provides a system for packaging ASDF systems into
+jar archives for ABCL. Given a running ABCL image with loadable ASDF
systems the code in this package will recursively package all the
required source and fasls in a jar archive.
\section{jss}
+\label{section:jss}
-To one used to a syntax that can construct macros, the Java syntax
-sucks, so we introduce the \#" macro.
+To one used to a syntax that can construct macros the Java syntax
+may be said to suck, so we introduce the \code{SHARPSIGN-DOUBLE-QUOTE} \#" macro.
\subsection{JSS usage}
Example:
\begin{listing-lisp}
- CL-USER> (require 'jss)
+CL-USER> (require 'jss)
- CL-USER) (#"getProperties" 'java.lang.System)
+CL-USER) (#"getProperties" 'java.lang.System)
- CL-USER) (#"propertyNames" (#"getProperties" 'java.lang.System))
+CL-USER) (#"propertyNames" (#"getProperties" 'java.lang.System))
\end{listing-lisp}
\section{asdf-install}
-An implementation of ASDF-INSTALL. Superseded by Quicklisp (qv.)
+The asdf-install contrib provides an implementation of ASDF-INSTALL.
+Superseded by Quicklisp (see Xach2011 \cite{Xach2011}).
+
+The \code{require} of the \code{asdf-install} symbol has the side
+effect of pushing the directory ``~/.asdf-install-dir/systems/'' into
+the value of the \textsc{ASDF} central registry in
+\code{asdf:*central-registry*}, providing a convenient mechanism for
+stashing \textsc{ABCL} specific system definitions for convenient
+access.
\chapter{History}
-ABCL was originally the extension language for the J editor, which was
+\textsc{ABCL} was originally the extension language for the J editor, which was
started in 1998 by Peter Graves. Sometime in 2003, a whole lot of
code that had previously not been released publically was suddenly
committed that enabled ABCL to be plausibly termed an emergent ANSI
@@ -1049,29 +1094,41 @@
From 2006 to 2008, Peter manned the development lists, incorporating
patches as made sense. After a suitable search, Peter nominated Erik
-Huelsmann to take over the project.
+H\"{u}lsmann to take over the project.
In 2008, the implementation was transferred to the current
maintainers, who have strived to improve its usability as a
contemporary Common Lisp implementation.
On October 22, 2011, with the publication of this Manual explicitly
-stating the conformance of Armed Bear Common Lisp to ANSI, we released
+stating the conformance of Armed Bear Common Lisp to \textsc{ANSI}, we released
abcl-1.0.0.
+\begin{thebibliography}{9}
-\section{References}
-
-[Java2000]: A New Era for Java Protocol Handlers.
-\url{http://java.sun.com/developer/onlineTraining/protocolhandlers/}
-
-[Xach2011]: Quicklisp: A system for quickly constructing Common Lisp
-libraries. \url{http://www.quicklisp.org/}
+\label{_:1}
+\bibitem{Java2000}
+ ``A New Era for Java Protocol Handlers.''
+ \url{http://java.sun.com/developer/onlineTraining/protocolhandlers/}
+
+\label{_:XACH2011}
+\bibitem{Xach2011}
+ Zach Beene
+ ``Quicklisp: A system for quickly constructing Common Lisp''
+ \url{http://www.quicklisp.org/}
+
+\bibitem{Rhodes2007}
+Christopher Rhodes
+``User-extensible Sequences in Common Lisp''
+ILC '07 Proceedings of the 2007 International Lisp Conference
+% An early draft. XXX where is the real one?
+\url{http://jcsu.jesus.cam.ac.uk/~csr21/spec.pdf}
-[RHODES2007]: Christopher Rhodes
+\end{thebibliography}
+\printindex
\end{document}
Modified: branches/1.0.x/abcl/doc/manual/extensions.tex
==============================================================================
--- branches/1.0.x/abcl/doc/manual/extensions.tex Sat Jan 7 15:09:30 2012 (r13727)
+++ branches/1.0.x/abcl/doc/manual/extensions.tex Mon Jan 9 00:38:52 2012 (r13728)
@@ -1,250 +1,1118 @@
-\begin{verbatim}
-%CADDR
- Macro: (not documented)
-%CADR
- Macro: (not documented)
-%CAR
- Macro: (not documented)
-%CDR
- Macro: (not documented)
-*AUTOLOAD-VERBOSE*
- Variable: (not documented)
-*BATCH-MODE*
- Variable: (not documented)
-*COMMAND-LINE-ARGUMENT-LIST*
- Variable: (not documented)
-*DEBUG-CONDITION*
- Variable: (not documented)
-*DEBUG-LEVEL*
- Variable: (not documented)
-*DISASSEMBLER*
- Variable: (not documented)
-*ED-FUNCTIONS*
- Variable: (not documented)
-*ENABLE-INLINE-EXPANSION*
- Variable: (not documented)
-*INSPECTOR-HOOK*
- Variable: (not documented)
-*LISP-HOME*
- Variable: (not documented)
-*LOAD-TRUENAME-FASL*
- Variable: (not documented)
-*PRINT-STRUCTURE*
- Variable: (not documented)
-*REQUIRE-STACK-FRAME*
- Variable: (not documented)
-*SAVED-BACKTRACE*
- Variable: (not documented)
-*SUPPRESS-COMPILER-WARNINGS*
- Variable: (not documented)
-*WARN-ON-REDEFINITION*
- Variable: (not documented)
-ADJOIN-EQL
- Function: (not documented)
-ARGLIST
- Function: (not documented)
-ASSQ
- Function: (not documented)
-ASSQL
- Function: (not documented)
-AUTOLOAD
- Function: (not documented)
-AUTOLOAD-MACRO
- Function: (not documented)
-AUTOLOADP
- Function: (not documented)
-AVER
- Macro: (not documented)
-CANCEL-FINALIZATION
- Function: (not documented)
-CHAR-TO-UTF8
- Function: (not documented)
-CHARPOS
- Function: (not documented)
-CLASSP
- Function: (not documented)
-COLLECT
- Macro: (not documented)
-COMPILE-FILE-IF-NEEDED
- Function: (not documented)
-COMPILE-SYSTEM
- Function: (not documented)
-COMPILER-ERROR
- Function: (not documented)
- Class: (not documented)
-COMPILER-UNSUPPORTED-FEATURE-ERROR
- Class: (not documented)
-DESCRIBE-COMPILER-POLICY
- Function: (not documented)
-DOUBLE-FLOAT-NEGATIVE-INFINITY
- Variable: (not documented)
-DOUBLE-FLOAT-POSITIVE-INFINITY
- Variable: (not documented)
-DUMP-JAVA-STACK
- Function: (not documented)
-EXIT
- Function: (not documented)
-FEATUREP
- Function: (not documented)
-FILE-DIRECTORY-P
- Function: (not documented)
-FINALIZE
- Function: (not documented)
-FIXNUMP
- Function: (not documented)
-GC
- Function: (not documented)
-GET-FLOATING-POINT-MODES
- Function: (not documented)
-GET-SOCKET-STREAM
- Function: :ELEMENT-TYPE must be CHARACTER or (UNSIGNED-BYTE 8); the default is CHARACTER.
-GETENV
- Function: Return the value of the environment VARIABLE if it exists, otherwise return NIL.
-GROVEL-JAVA-DEFINITIONS
- Function: (not documented)
-INIT-GUI
- Function: (not documented)
-INTERNAL-COMPILER-ERROR
- Function: (not documented)
- Class: (not documented)
-INTERRUPT-LISP
- Function: (not documented)
-JAR-PATHNAME
- Class: (not documented)
-MACROEXPAND-ALL
- Function: (not documented)
-MAILBOX
- Class: (not documented)
-MAKE-DIALOG-PROMPT-STREAM
- Function: (not documented)
-MAKE-SERVER-SOCKET
- Function: (not documented)
-MAKE-SLIME-INPUT-STREAM
- Function: (not documented)
-MAKE-SLIME-OUTPUT-STREAM
- Function: (not documented)
-MAKE-SOCKET
- Function: (not documented)
-MAKE-TEMP-FILE
- Function: (not documented)
-MAKE-WEAK-REFERENCE
- Function: (not documented)
-MEMQ
- Function: (not documented)
-MEMQL
- Function: (not documented)
-MOST-NEGATIVE-JAVA-LONG
- Variable: (not documented)
-MOST-POSITIVE-JAVA-LONG
- Variable: (not documented)
-MUTEX
- Class: (not documented)
-NEQ
- Function: (not documented)
-NIL-VECTOR
- Class: (not documented)
-PATHNAME-JAR-P
- Function: (not documented)
-PATHNAME-URL-P
- Function: Predicate for whether PATHNAME references a URL.
-PRECOMPILE
- Function: (not documented)
-PROBE-DIRECTORY
- Function: (not documented)
-PROCESS
- Function: (not documented)
-PROCESS-ALIVE-P
- Function: (not documented)
-PROCESS-ERROR
- Function: (not documented)
-PROCESS-EXIT-CODE
- Function: (not documented)
-PROCESS-INPUT
- Function: (not documented)
-PROCESS-KILL
- Function: (not documented)
-PROCESS-OUTPUT
- Function: (not documented)
-PROCESS-P
- Function: (not documented)
-PROCESS-WAIT
- Function: (not documented)
-QUIT
- Function: (not documented)
-RESOLVE
- Function: (not documented)
-RUN-PROGRAM
- Function: (not documented)
-RUN-SHELL-COMMAND
- Function: (not documented)
-SERVER-SOCKET-CLOSE
- Function: (not documented)
-SET-FLOATING-POINT-MODES
- Function: (not documented)
-SHOW-RESTARTS
- Function: (not documented)
-SIMPLE-SEARCH
- Function: (not documented)
-SIMPLE-STRING-FILL
- Function: (not documented)
-SIMPLE-STRING-SEARCH
- Function: (not documented)
-SINGLE-FLOAT-NEGATIVE-INFINITY
- Variable: (not documented)
-SINGLE-FLOAT-POSITIVE-INFINITY
- Variable: (not documented)
-SLIME-INPUT-STREAM
- Class: (not documented)
-SLIME-OUTPUT-STREAM
- Class: (not documented)
-SOCKET-ACCEPT
- Function: (not documented)
-SOCKET-CLOSE
- Function: (not documented)
-SOCKET-LOCAL-ADDRESS
- Function: Returns the local address of the given socket as a dotted quad string.
-SOCKET-LOCAL-PORT
- Function: Returns the local port number of the given socket.
-SOCKET-PEER-ADDRESS
- Function: Returns the peer address of the given socket as a dotted quad string.
-SOCKET-PEER-PORT
- Function: Returns the peer port number of the given socket.
-SOURCE
- Function: (not documented)
-SOURCE-FILE-POSITION
- Function: (not documented)
-SOURCE-PATHNAME
- Function: (not documented)
-SPECIAL-VARIABLE-P
- Function: (not documented)
-STRING-FIND
- Function: (not documented)
-STRING-INPUT-STREAM-CURRENT
- Function: (not documented)
-STRING-POSITION
- Function: (not documented)
-STYLE-WARN
- Function: (not documented)
-TRULY-THE
- Special Operator: (not documented)
-UPTIME
- Function: (not documented)
-URI-DECODE
- Function: (not documented)
-URI-ENCODE
- Function: (not documented)
-URL-PATHNAME
- Class: (not documented)
-URL-PATHNAME-AUTHORITY
- Function: (not documented)
-URL-PATHNAME-FRAGMENT
- Function: (not documented)
-URL-PATHNAME-QUERY
- Function: (not documented)
-URL-PATHNAME-SCHEME
- Function: (not documented)
-WEAK-REFERENCE
- Class: (not documented)
-WEAK-REFERENCE-VALUE
- Function: (not documented)
-\end{verbatim}
+\subsection{Exported Symbols from the EXTENSIONS package}
+
+\paragraph{}
+\label{EXTENSIONS:COMPILE-FILE-IF-NEEDED}
+\index{COMPILE-FILE-IF-NEEDED}
+--- Function: \textbf{compile-file-if-needed} [\textbf{extensions}] \textit{input-file \&rest allargs \&key force-compile \&allow-other-keys}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MOST-POSITIVE-JAVA-LONG}
+\index{MOST-POSITIVE-JAVA-LONG}
+--- Variable: \textbf{most-positive-java-long} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:DUMP-JAVA-STACK}
+\index{DUMP-JAVA-STACK}
+--- Function: \textbf{dump-java-stack} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MEMQL}
+\index{MEMQL}
+--- Function: \textbf{memql} [\textbf{extensions}] \textit{item list}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:DOUBLE-FLOAT-NEGATIVE-INFINITY}
+\index{DOUBLE-FLOAT-NEGATIVE-INFINITY}
+--- Variable: \textbf{double-float-negative-infinity} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:GROVEL-JAVA-DEFINITIONS}
+\index{GROVEL-JAVA-DEFINITIONS}
+--- Function: \textbf{grovel-java-definitions} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*AUTOLOAD-VERBOSE*}
+\index{*AUTOLOAD-VERBOSE*}
+--- Variable: \textbf{*autoload-verbose*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MAKE-SLIME-INPUT-STREAM}
+\index{MAKE-SLIME-INPUT-STREAM}
+--- Function: \textbf{make-slime-input-stream} [\textbf{extensions}] \textit{function output-stream}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:URL-PATHNAME-FRAGMENT}
+\index{URL-PATHNAME-FRAGMENT}
+--- Function: \textbf{url-pathname-fragment} [\textbf{extensions}] \textit{p}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PROCESS-KILL}
+\index{PROCESS-KILL}
+--- Function: \textbf{process-kill} [\textbf{extensions}] \textit{process}
+
+\begin{adjustwidth}{5em}{5em}
+Kills the process.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:NIL-VECTOR}
+\index{NIL-VECTOR}
+--- Class: \textbf{nil-vector} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SOURCE-PATHNAME}
+\index{SOURCE-PATHNAME}
+--- Function: \textbf{source-pathname} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:URI-DECODE}
+\index{URI-DECODE}
+--- Function: \textbf{uri-decode} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SIMPLE-STRING-FILL}
+\index{SIMPLE-STRING-FILL}
+--- Function: \textbf{simple-string-fill} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MEMQ}
+\index{MEMQ}
+--- Function: \textbf{memq} [\textbf{extensions}] \textit{item list}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:URL-PATHNAME-SCHEME}
+\index{URL-PATHNAME-SCHEME}
+--- Function: \textbf{url-pathname-scheme} [\textbf{extensions}] \textit{p}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:TRULY-THE}
+\index{TRULY-THE}
+--- Special Operator: \textbf{truly-the} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SLIME-INPUT-STREAM}
+\index{SLIME-INPUT-STREAM}
+--- Class: \textbf{slime-input-stream} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MAKE-SOCKET}
+\index{MAKE-SOCKET}
+--- Function: \textbf{make-socket} [\textbf{extensions}] \textit{host port}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*ENABLE-INLINE-EXPANSION*}
+\index{*ENABLE-INLINE-EXPANSION*}
+--- Variable: \textbf{*enable-inline-expansion*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PROCESS-INPUT}
+\index{PROCESS-INPUT}
+--- Function: \textbf{process-input} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MAILBOX}
+\index{MAILBOX}
+--- Class: \textbf{mailbox} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:STRING-POSITION}
+\index{STRING-POSITION}
+--- Function: \textbf{string-position} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PRECOMPILE}
+\index{PRECOMPILE}
+--- Function: \textbf{precompile} [\textbf{extensions}] \textit{name \&optional definition}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*SUPPRESS-COMPILER-WARNINGS*}
+\index{*SUPPRESS-COMPILER-WARNINGS*}
+--- Variable: \textbf{*suppress-compiler-warnings*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PROCESS}
+\index{PROCESS}
+--- Class: \textbf{process} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SIMPLE-SEARCH}
+\index{SIMPLE-SEARCH}
+--- Function: \textbf{simple-search} [\textbf{extensions}] \textit{sequence1 sequence2}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*LISP-HOME*}
+\index{*LISP-HOME*}
+--- Variable: \textbf{*lisp-home*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*COMMAND-LINE-ARGUMENT-LIST*}
+\index{*COMMAND-LINE-ARGUMENT-LIST*}
+--- Variable: \textbf{*command-line-argument-list*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:FILE-DIRECTORY-P}
+\index{FILE-DIRECTORY-P}
+--- Function: \textbf{file-directory-p} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MAKE-DIALOG-PROMPT-STREAM}
+\index{MAKE-DIALOG-PROMPT-STREAM}
+--- Function: \textbf{make-dialog-prompt-stream} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:CLASSP}
+\index{CLASSP}
+--- Function: \textbf{classp} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*DISASSEMBLER*}
+\index{*DISASSEMBLER*}
+--- Variable: \textbf{*disassembler*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SET-FLOATING-POINT-MODES}
+\index{SET-FLOATING-POINT-MODES}
+--- Function: \textbf{set-floating-point-modes} [\textbf{extensions}] \textit{\&key traps}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*DEBUG-CONDITION*}
+\index{*DEBUG-CONDITION*}
+--- Variable: \textbf{*debug-condition*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:EXIT}
+\index{EXIT}
+--- Function: \textbf{exit} [\textbf{extensions}] \textit{\&key status}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PROCESS-ERROR}
+\index{PROCESS-ERROR}
+--- Function: \textbf{process-error} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SOCKET-LOCAL-PORT}
+\index{SOCKET-LOCAL-PORT}
+--- Function: \textbf{socket-local-port} [\textbf{extensions}] \textit{socket}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the local port number of the given socket.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PROCESS-ALIVE-P}
+\index{PROCESS-ALIVE-P}
+--- Function: \textbf{process-alive-p} [\textbf{extensions}] \textit{process}
+
+\begin{adjustwidth}{5em}{5em}
+Return t if process is still alive, nil otherwise.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*INSPECTOR-HOOK*}
+\index{*INSPECTOR-HOOK*}
+--- Variable: \textbf{*inspector-hook*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*REQUIRE-STACK-FRAME*}
+\index{*REQUIRE-STACK-FRAME*}
+--- Variable: \textbf{*require-stack-frame*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PROBE-DIRECTORY}
+\index{PROBE-DIRECTORY}
+--- Function: \textbf{probe-directory} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:CHAR-TO-UTF8}
+\index{CHAR-TO-UTF8}
+--- Function: \textbf{char-to-utf8} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:AUTOLOAD}
+\index{AUTOLOAD}
+--- Function: \textbf{autoload} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MUTEX}
+\index{MUTEX}
+--- Class: \textbf{mutex} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:URI-ENCODE}
+\index{URI-ENCODE}
+--- Function: \textbf{uri-encode} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:AUTOLOAD-MACRO}
+\index{AUTOLOAD-MACRO}
+--- Function: \textbf{autoload-macro} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SOCKET-CLOSE}
+\index{SOCKET-CLOSE}
+--- Function: \textbf{socket-close} [\textbf{extensions}] \textit{socket}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:UPTIME}
+\index{UPTIME}
+--- Function: \textbf{uptime} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*ED-FUNCTIONS*}
+\index{*ED-FUNCTIONS*}
+--- Variable: \textbf{*ed-functions*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:COMPILE-SYSTEM}
+\index{COMPILE-SYSTEM}
+--- Function: \textbf{compile-system} [\textbf{extensions}] \textit{\&key quit (zip t) output-path}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*LOAD-TRUENAME-FASL*}
+\index{*LOAD-TRUENAME-FASL*}
+--- Variable: \textbf{*load-truename-fasl*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SPECIAL-VARIABLE-P}
+\index{SPECIAL-VARIABLE-P}
+--- Function: \textbf{special-variable-p} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SOCKET-ACCEPT}
+\index{SOCKET-ACCEPT}
+--- Function: \textbf{socket-accept} [\textbf{extensions}] \textit{socket}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*WARN-ON-REDEFINITION*}
+\index{*WARN-ON-REDEFINITION*}
+--- Variable: \textbf{*warn-on-redefinition*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:URL-PATHNAME-AUTHORITY}
+\index{URL-PATHNAME-AUTHORITY}
+--- Function: \textbf{url-pathname-authority} [\textbf{extensions}] \textit{p}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:AUTOLOADP}
+\index{AUTOLOADP}
+--- Function: \textbf{autoloadp} [\textbf{extensions}] \textit{symbol}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MAKE-WEAK-REFERENCE}
+\index{MAKE-WEAK-REFERENCE}
+--- Function: \textbf{make-weak-reference} [\textbf{extensions}] \textit{obj}
+
+\begin{adjustwidth}{5em}{5em}
+Creates a weak reference to 'obj'.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:RESOLVE}
+\index{RESOLVE}
+--- Function: \textbf{resolve} [\textbf{extensions}] \textit{symbol}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:CANCEL-FINALIZATION}
+\index{CANCEL-FINALIZATION}
+--- Function: \textbf{cancel-finalization} [\textbf{extensions}] \textit{object}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MAKE-SLIME-OUTPUT-STREAM}
+\index{MAKE-SLIME-OUTPUT-STREAM}
+--- Function: \textbf{make-slime-output-stream} [\textbf{extensions}] \textit{function}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:RUN-PROGRAM}
+\index{RUN-PROGRAM}
+--- Function: \textbf{run-program} [\textbf{extensions}] \textit{program args \&key environment (wait t)}
+
+\begin{adjustwidth}{5em}{5em}
+Creates a new process running the the PROGRAM.
+ARGS are a list of strings to be passed to the program as arguments.
+
+For no arguments, use nil which means that just the name of the
+program is passed as arg 0.
+
+Returns a process structure containing the JAVA-OBJECT wrapped Process
+object, and the PROCESS-INPUT, PROCESS-OUTPUT, and PROCESS-ERROR streams.
+
+c.f. http://download.oracle.com/javase/6/docs/api/java/lang/Process.html
+
+Notes about Unix environments (as in the :environment):
+
+ * The ABCL implementation of run-program, like SBCL, Perl and many
+ other programs, copies the Unix environment by default.
+
+ * Running Unix programs from a setuid process, or in any other
+ situation where the Unix environment is under the control of
+ someone else, is a mother lode of security problems. If you are
+ contemplating doing this, read about it first. (The Perl
+ community has a lot of good documentation about this and other
+ security issues in script-like programs.)
+
+The \&key arguments have the following meanings:
+
+:environment
+ An alist of STRINGs (name . value) describing the new
+ environment. The default is to copy the environment of the current
+ process.
+
+:wait
+ If non-NIL, which is the default, wait until the created process
+ finishes. If NIL, continue running Lisp until the program
+ finishes.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:FIXNUMP}
+\index{FIXNUMP}
+--- Function: \textbf{fixnump} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SINGLE-FLOAT-NEGATIVE-INFINITY}
+\index{SINGLE-FLOAT-NEGATIVE-INFINITY}
+--- Variable: \textbf{single-float-negative-infinity} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:QUIT}
+\index{QUIT}
+--- Function: \textbf{quit} [\textbf{extensions}] \textit{\&key status}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:INTERNAL-COMPILER-ERROR}
+\index{INTERNAL-COMPILER-ERROR}
+--- Function: \textbf{internal-compiler-error} [\textbf{extensions}] \textit{format-control \&rest format-arguments}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:JAR-PATHNAME}
+\index{JAR-PATHNAME}
+--- Class: \textbf{jar-pathname} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+NIL
+
+\paragraph{}
+\label{EXTENSIONS:SIMPLE-STRING-SEARCH}
+\index{SIMPLE-STRING-SEARCH}
+--- Function: \textbf{simple-string-search} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:ASSQL}
+\index{ASSQL}
+--- Function: \textbf{assql} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:FINALIZE}
+\index{FINALIZE}
+--- Function: \textbf{finalize} [\textbf{extensions}] \textit{object function}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:RUN-SHELL-COMMAND}
+\index{RUN-SHELL-COMMAND}
+--- Function: \textbf{run-shell-command} [\textbf{extensions}] \textit{command \&key directory (output *standard-output*)}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*SAVED-BACKTRACE*}
+\index{*SAVED-BACKTRACE*}
+--- Variable: \textbf{*saved-backtrace*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:COLLECT}
+\index{COLLECT}
+--- Macro: \textbf{collect} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:ARGLIST}
+\index{ARGLIST}
+--- Function: \textbf{arglist} [\textbf{extensions}] \textit{extended-function-designator}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:ADJOIN-EQL}
+\index{ADJOIN-EQL}
+--- Function: \textbf{adjoin-eql} [\textbf{extensions}] \textit{item list}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:CHARPOS}
+\index{CHARPOS}
+--- Function: \textbf{charpos} [\textbf{extensions}] \textit{stream}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MAKE-TEMP-FILE}
+\index{MAKE-TEMP-FILE}
+--- Function: \textbf{make-temp-file} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:DESCRIBE-COMPILER-POLICY}
+\index{DESCRIBE-COMPILER-POLICY}
+--- Function: \textbf{describe-compiler-policy} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*PRINT-STRUCTURE*}
+\index{*PRINT-STRUCTURE*}
+--- Variable: \textbf{*print-structure*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SOCKET-PEER-ADDRESS}
+\index{SOCKET-PEER-ADDRESS}
+--- Function: \textbf{socket-peer-address} [\textbf{extensions}] \textit{socket}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the peer address of the given socket as a dotted quad string.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:GC}
+\index{GC}
+--- Function: \textbf{gc} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:GETENV}
+\index{GETENV}
+--- Function: \textbf{getenv} [\textbf{extensions}] \textit{variable}
+
+\begin{adjustwidth}{5em}{5em}
+Return the value of the environment VARIABLE if it exists, otherwise return NIL.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SERVER-SOCKET-CLOSE}
+\index{SERVER-SOCKET-CLOSE}
+--- Function: \textbf{server-socket-close} [\textbf{extensions}] \textit{socket}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:WEAK-REFERENCE}
+\index{WEAK-REFERENCE}
+--- Class: \textbf{weak-reference} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:GET-FLOATING-POINT-MODES}
+\index{GET-FLOATING-POINT-MODES}
+--- Function: \textbf{get-floating-point-modes} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:WEAK-REFERENCE-VALUE}
+\index{WEAK-REFERENCE-VALUE}
+--- Function: \textbf{weak-reference-value} [\textbf{extensions}] \textit{obj}
+
+\begin{adjustwidth}{5em}{5em}
+Returns two values, the first being the value of the weak ref,the second T if the reference is valid, or NIL if it hasbeen cleared.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SINGLE-FLOAT-POSITIVE-INFINITY}
+\index{SINGLE-FLOAT-POSITIVE-INFINITY}
+--- Variable: \textbf{single-float-positive-infinity} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:FEATUREP}
+\index{FEATUREP}
+--- Function: \textbf{featurep} [\textbf{extensions}] \textit{form}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PATHNAME-URL-P}
+\index{PATHNAME-URL-P}
+--- Function: \textbf{pathname-url-p} [\textbf{extensions}] \textit{pathname}
+
+\begin{adjustwidth}{5em}{5em}
+Predicate for whether PATHNAME references a URL.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:STRING-INPUT-STREAM-CURRENT}
+\index{STRING-INPUT-STREAM-CURRENT}
+--- Function: \textbf{string-input-stream-current} [\textbf{extensions}] \textit{stream}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MAKE-SERVER-SOCKET}
+\index{MAKE-SERVER-SOCKET}
+--- Function: \textbf{make-server-socket} [\textbf{extensions}] \textit{port}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:INTERRUPT-LISP}
+\index{INTERRUPT-LISP}
+--- Function: \textbf{interrupt-lisp} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:AVER}
+\index{AVER}
+--- Macro: \textbf{aver} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:INIT-GUI}
+\index{INIT-GUI}
+--- Function: \textbf{init-gui} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+Dummy function used to autoload this file
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:URL-PATHNAME-QUERY}
+\index{URL-PATHNAME-QUERY}
+--- Function: \textbf{url-pathname-query} [\textbf{extensions}] \textit{p}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PROCESS-EXIT-CODE}
+\index{PROCESS-EXIT-CODE}
+--- Function: \textbf{process-exit-code} [\textbf{extensions}] \textit{instance}
+
+\begin{adjustwidth}{5em}{5em}
+The exit code of a process.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SOURCE-FILE-POSITION}
+\index{SOURCE-FILE-POSITION}
+--- Function: \textbf{source-file-position} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SOCKET-PEER-PORT}
+\index{SOCKET-PEER-PORT}
+--- Function: \textbf{socket-peer-port} [\textbf{extensions}] \textit{socket}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the peer port number of the given socket.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:ASSQ}
+\index{ASSQ}
+--- Function: \textbf{assq} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SOURCE}
+\index{SOURCE}
+--- Function: \textbf{source} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SOCKET-LOCAL-ADDRESS}
+\index{SOCKET-LOCAL-ADDRESS}
+--- Function: \textbf{socket-local-address} [\textbf{extensions}] \textit{socket}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the local address of the given socket as a dotted quad string.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:NEQ}
+\index{NEQ}
+--- Function: \textbf{neq} [\textbf{extensions}] \textit{obj1 obj2}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:STRING-FIND}
+\index{STRING-FIND}
+--- Function: \textbf{string-find} [\textbf{extensions}] \textit{char string}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PATHNAME-JAR-P}
+\index{PATHNAME-JAR-P}
+--- Function: \textbf{pathname-jar-p} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PROCESS-WAIT}
+\index{PROCESS-WAIT}
+--- Function: \textbf{process-wait} [\textbf{extensions}] \textit{process}
+
+\begin{adjustwidth}{5em}{5em}
+Wait for process to quit running for some reason.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SHOW-RESTARTS}
+\index{SHOW-RESTARTS}
+--- Function: \textbf{show-restarts} [\textbf{extensions}] \textit{restarts stream}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*BATCH-MODE*}
+\index{*BATCH-MODE*}
+--- Variable: \textbf{*batch-mode*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PROCESS-P}
+\index{PROCESS-P}
+--- Function: \textbf{process-p} [\textbf{extensions}] \textit{object}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*GUI-BACKEND*}
+\index{*GUI-BACKEND*}
+--- Variable: \textbf{*gui-backend*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:DOUBLE-FLOAT-POSITIVE-INFINITY}
+\index{DOUBLE-FLOAT-POSITIVE-INFINITY}
+--- Variable: \textbf{double-float-positive-infinity} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:STYLE-WARN}
+\index{STYLE-WARN}
+--- Function: \textbf{style-warn} [\textbf{extensions}] \textit{format-control \&rest format-arguments}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MOST-NEGATIVE-JAVA-LONG}
+\index{MOST-NEGATIVE-JAVA-LONG}
+--- Variable: \textbf{most-negative-java-long} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:SLIME-OUTPUT-STREAM}
+\index{SLIME-OUTPUT-STREAM}
+--- Class: \textbf{slime-output-stream} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:GET-SOCKET-STREAM}
+\index{GET-SOCKET-STREAM}
+--- Function: \textbf{get-socket-stream} [\textbf{extensions}] \textit{socket \&key (element-type (quote character)) (external-format default)}
+
+\begin{adjustwidth}{5em}{5em}
+:ELEMENT-TYPE must be CHARACTER or (UNSIGNED-BYTE 8); the default is CHARACTER.
+EXTERNAL-FORMAT must be of the same format as specified for OPEN.
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:PROCESS-OUTPUT}
+\index{PROCESS-OUTPUT}
+--- Function: \textbf{process-output} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:URL-PATHNAME}
+\index{URL-PATHNAME}
+--- Class: \textbf{url-pathname} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:COMPILER-UNSUPPORTED-FEATURE-ERROR}
+\index{COMPILER-UNSUPPORTED-FEATURE-ERROR}
+--- Class: \textbf{compiler-unsupported-feature-error} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:*DEBUG-LEVEL*}
+\index{*DEBUG-LEVEL*}
+--- Variable: \textbf{*debug-level*} [\textbf{extensions}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:COMPILER-ERROR}
+\index{COMPILER-ERROR}
+--- Function: \textbf{compiler-error} [\textbf{extensions}] \textit{format-control \&rest format-arguments}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{EXTENSIONS:MACROEXPAND-ALL}
+\index{MACROEXPAND-ALL}
+--- Function: \textbf{macroexpand-all} [\textbf{extensions}] \textit{form \&optional env}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
Copied: branches/1.0.x/abcl/doc/manual/grovel.lisp (from r13727, trunk/abcl/doc/manual/grovel.lisp)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/1.0.x/abcl/doc/manual/grovel.lisp Mon Jan 9 00:38:52 2012 (r13728, copy of r13727, trunk/abcl/doc/manual/grovel.lisp)
@@ -0,0 +1,92 @@
+#-abcl We're only grovelling ABCL docstrings here.
+(defun grovel-docstrings-as-tex (&optional (package (find-package :java)))
+ (let ((output-file (format nil "~A.tex" (string-downcase (package-name package)))))
+ (with-open-file (stream output-file :direction :output)
+ (format t "Writing output to ~A.~%" output-file)
+ (loop :for symbol :being :each :external-symbol :of package
+ :doing (format stream "~&~A~%~%" (symbol-as-tex symbol))))))
+
+(asdf:load-system 'swank) ;; XXX Does this load the SWANK-BACKEND package as well
+
+(defun arglist-as-tex (symbol)
+ (handler-case
+ (loop :for arg :in (arglist symbol)
+ :collecting
+ (format nil
+ ;;; XXX should really check the entire input for TeX escapes
+ (if (and (symbolp arg)
+ (or (string= (subseq (symbol-name arg) 0 1) #\&)
+ (string= (subseq (symbol-name arg) 0 1) #\%)))
+ "\\~A"
+ "~A")
+ (if (symbolp arg)
+ (string-downcase (symbol-name arg))
+ (format nil "~(~A~)" arg))))
+ (t (e)
+ (progn (warn "Failed to form arglist for ~A: ~A" symbol e)
+ (list "")))))
+
+
+(defvar *type-alist*
+ '((:function
+ . "Function")
+ (:macro
+ . "Macro")
+ (:variable
+ . "Variable")
+ (:class
+ . "Class")
+ (:special-operator
+ . "Special Operator")
+ (:generic-function
+ . "Generic Function")))
+
+(defun symbol-as-tex (symbol)
+ "Return the TeX representation of a SYMBOL as Tex."
+ (let (type documentation arglist doc symbol-name package-name)
+ (when (setf doc (swank-backend:describe-symbol-for-emacs symbol))
+ (cond
+ ((find :function doc)
+ (setf type :function
+ documentation (second doc)
+ arglist (format nil "~{~A~^ ~}" (arglist-as-tex symbol))))
+ ((find :variable doc)
+ (setf type :variable
+ documentation (second doc)))
+ ((find :macro doc)
+ (setf type :macro
+ documentation (second doc)))
+ ((find :generic-function doc)
+ (setf type :generic-function
+ documentation (second doc)))
+ ((find :class doc)
+ (setf type :class
+ documentation (second doc)))
+ ((find :special-operator doc)
+ (setf type :special-operator
+ documentation (second doc)))
+ (t
+ (warn "Unknown type of documentation for symbol ~A: ~A"
+ symbol doc)))
+ (setf symbol-name (string-downcase
+ symbol)
+ package-name (string-downcase
+ (package-name (find-package (symbol-package symbol)))))
+ (format nil "~&\\paragraph{}~&\\label{~A:~A}~&\\index{~A}~&--- ~A: \\textbf{~A} [\\textbf{~A}] \\textit{~A}~%~%\\begin{adjustwidth}{5em}{5em}~&~A~&\\end{adjustwidth}"
+ (package-name (find-package (symbol-package symbol)))
+ (symbol-name symbol)
+ (symbol-name symbol)
+ (cdr (assoc type *type-alist*))
+ symbol-name
+ package-name
+ (if arglist arglist "")
+ (if documentation documentation "")))))
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Modified: branches/1.0.x/abcl/doc/manual/java.tex
==============================================================================
--- branches/1.0.x/abcl/doc/manual/java.tex Sat Jan 7 15:09:30 2012 (r13727)
+++ branches/1.0.x/abcl/doc/manual/java.tex Mon Jan 9 00:38:52 2012 (r13728)
@@ -1,182 +1,768 @@
-\begin{verbatim}
-%JGET-PROPERTY-VALUE
- Function: Gets a JavaBeans property on JAVA-OBJECT.
-%JSET-PROPERTY-VALUE
- Function: Sets a JavaBean property on JAVA-OBJECT.
-*JAVA-OBJECT-TO-STRING-LENGTH*
- Variable: Length to truncate toString() PRINT-OBJECT output for an
- otherwise unspecialized JAVA-OBJECT. Can be set to NIL to indicate
- no limit.
-+FALSE+
- Variable: The JVM primitive value for boolean false.
-+NULL+
- Variable: The JVM null object reference.
-+TRUE+
- Variable: The JVM primitive value for boolean true.
-ADD-TO-CLASSPATH
- Generic Function: (not documented)
-CHAIN
- Macro: (not documented)
-DESCRIBE-JAVA-OBJECT
- Function: (not documented)
-DUMP-CLASSPATH
- Function: (not documented)
-ENSURE-JAVA-CLASS
- Function: (not documented)
-ENSURE-JAVA-OBJECT
- Function: Ensures OBJ is wrapped in a JAVA-OBJECT, wrapping it if necessary.
-GET-CURRENT-CLASSLOADER
- Function: (not documented)
-GET-DEFAULT-CLASSLOADER
- Function: (not documented)
-JARRAY-COMPONENT-TYPE
- Function: Returns the component type of the array type ATYPE
-JARRAY-LENGTH
- Function: (not documented)
-JARRAY-REF
- Function: Dereferences the Java array JAVA-ARRAY using the given
- INDICIES, coercing the result into a Lisp object, if possible.
-JARRAY-REF-RAW
- Function: Dereference the Java array JAVA-ARRAY using the given
- INDICIES. Does not attempt to coerce the result into a Lisp object.
-JARRAY-SET
- Function: Stores NEW-VALUE at the given index in JAVA-ARRAY.
-JAVA-CLASS
- Class: (not documented)
-JAVA-EXCEPTION
- Class: (not documented)
-JAVA-EXCEPTION-CAUSE
- Function: (not documented)
-JAVA-OBJECT
- Class: (not documented)
-JAVA-OBJECT-P
- Function: Returns T if OBJECT is a JAVA-OBJECT.
-JCALL
- Function: Invokes the Java method METHOD-REF on INSTANCE with
- arguments ARGS, coercing the result into a Lisp object, if possible.
-JCALL-RAW
- Function: Invokes the Java method METHOD-REF on INSTANCE with
- arguments ARGS. Does not attempt to coerce the result into a Lisp
- object.
-JCLASS
- Function: Returns a reference to the Java class designated by
- NAME-OR-CLASS-REF. If the CLASS-LOADER parameter is passed, the class
- is resolved with respect to the given ClassLoader.
-JCLASS-ARRAY-P
- Function: Returns T if CLASS is an array class
-JCLASS-CONSTRUCTORS
- Function: Returns a vector of constructors for CLASS
-JCLASS-FIELD
- Function: Returns the field named FIELD-NAME of CLASS
-JCLASS-FIELDS
- Function: Returns a vector of all (or just the declared/public, if
- DECLARED/PUBLIC is true) fields of CLASS
-JCLASS-INTERFACE-P
- Function: Returns T if CLASS is an interface
-JCLASS-INTERFACES
- Function: Returns the vector of interfaces of CLASS
-JCLASS-METHODS
- Function: Return a vector of all (or just the declared/public, if
- DECLARED/PUBLIC is true) methods of CLASS
-JCLASS-NAME
- Function: (not documented)
-JCLASS-OF
- Function: (not documented)
-JCLASS-SUPERCLASS
- Function: Returns the superclass of CLASS, or NIL if it hasn't got one
-JCLASS-SUPERCLASS-P
- Function: Returns T if CLASS-1 is a superclass or interface of CLASS-2
-JCOERCE
- Function: Attempts to coerce OBJECT into a JavaObject of class
- INTENDED-CLASS. Raises a TYPE-ERROR if no conversion is possible.
-JCONSTRUCTOR
- Function: Returns a reference to the Java constructor of CLASS-REF
- with the given PARAMETER-CLASS-REFS.
-JCONSTRUCTOR-PARAMS
- Function: Returns a vector of parameter types (Java classes) for CONSTRUCTOR
-JEQUAL
- Function: Compares obj1 with obj2 using java.lang.Object.equals()
-JFIELD
- Function: Retrieves or modifies a field in a Java class or instance.
-JFIELD-NAME
- Function: Returns the name of FIELD as a Lisp string
-JFIELD-RAW
- Function: Retrieves or modifies a field in a Java class or instance. Does not
-JFIELD-TYPE
- Function: Returns the type (Java class) of FIELD
-JINSTANCE-OF-P
- Function: OBJ is an instance of CLASS (or one of its subclasses)
-JINTERFACE-IMPLEMENTATION
- Function: Creates and returns an implementation of a Java interface with
-JMAKE-INVOCATION-HANDLER
- Function: (not documented)
-JMAKE-PROXY
- Generic Function: (not documented)
-JMEMBER-PROTECTED-P
- Function: MEMBER is a protected member of its declaring class
-JMEMBER-PUBLIC-P
- Function: MEMBER is a public member of its declaring class
-JMEMBER-STATIC-P
- Function: MEMBER is a static member of its declaring class
-JMETHOD
- Function: Returns a reference to the Java method METHOD-NAME of
- CLASS-REF with the given PARAMETER-CLASS-REFS.
-JMETHOD-LET
- Macro: (not documented)
-JMETHOD-NAME
- Function: Returns the name of METHOD as a Lisp string
-JMETHOD-PARAMS
- Function: Returns a vector of parameter types (Java classes) for METHOD
-JMETHOD-RETURN-TYPE
- Function: Returns the result type (Java class) of the METHOD
-JNEW
- Function: Invokes the Java constructor CONSTRUCTOR with the arguments ARGS.
-JNEW-ARRAY
- Function: Creates a new Java array of type ELEMENT-TYPE, with the given DIMENSIONS.
-JNEW-ARRAY-FROM-ARRAY
- Function: Returns a new Java array with base type ELEMENT-TYPE (a string or a class-ref)
-JNEW-ARRAY-FROM-LIST
- Function: (not documented)
-JNEW-RUNTIME-CLASS
- Function: (not documented)
-JNULL-REF-P
- Function: Returns a non-NIL value when the JAVA-OBJECT `object` is `null`,
-JOBJECT-CLASS
- Function: Returns the Java class that OBJ belongs to
-JOBJECT-LISP-VALUE
- Function: Attempts to coerce JAVA-OBJECT into a Lisp object.
-JPROPERTY-VALUE
- Function: (not documented)
-JREDEFINE-METHOD
- Function: (not documented)
-JREGISTER-HANDLER
- Function: (not documented)
-JRESOLVE-METHOD
- Function: Finds the most specific Java method METHOD-NAME on
- INSTANCE applicable to arguments ARGS. Returns NIL if no suitable
- method is found. The algorithm used for resolution is the same used
- by JCALL when it is called with a string as the first parameter
- (METHOD-REF).
-JRUN-EXCEPTION-PROTECTED
- Function: Invokes the function CLOSURE and returns the result.
- Signals an error if stack or heap exhaustion occurs.
-JRUNTIME-CLASS-EXISTS-P
- Function: (not documented)
-JSTATIC
- Function: Invokes the static method METHOD on class CLASS with ARGS.
-JSTATIC-RAW
- Function: Invokes the static method METHOD on class CLASS with
- ARGS. Does not attempt to coerce the arguments or result into a Lisp
- object.
-MAKE-CLASSLOADER
- Function: (not documented)
-MAKE-IMMEDIATE-OBJECT
- Function: Attempts to coerce a given Lisp object into a java-object of the
-REGISTER-JAVA-EXCEPTION
- Function: Registers the Java Throwable named by the symbol
- EXCEPTION-NAME as the condition designated by CONDITION-SYMBOL.
- Returns T if successful, NIL if not.
-UNREGISTER-JAVA-EXCEPTION
- Function: Unregisters the Java Throwable EXCEPTION-NAME previously
- registered by REGISTER-JAVA-EXCEPTION.
-\end{verbatim}
+\subsection{Exported Symbols from the JAVA package}
+\paragraph{}
+\label{JAVA:JAVA-EXCEPTION-CAUSE}
+\index{JAVA-EXCEPTION-CAUSE}
+--- Function: \textbf{java-exception-cause} [\textbf{java}] \textit{java-exception}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the cause of JAVA-EXCEPTION. (The cause is the Java Throwable
+ object that caused JAVA-EXCEPTION to be signalled.)
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-SUPERCLASS-P}
+\index{JCLASS-SUPERCLASS-P}
+--- Function: \textbf{jclass-superclass-p} [\textbf{java}] \textit{class-1 class-2}
+
+\begin{adjustwidth}{5em}{5em}
+Returns T if CLASS-1 is a superclass or interface of CLASS-2
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JINTERFACE-IMPLEMENTATION}
+\index{JINTERFACE-IMPLEMENTATION}
+--- Function: \textbf{jinterface-implementation} [\textbf{java}] \textit{interface \&rest method-names-and-defs}
+
+\begin{adjustwidth}{5em}{5em}
+Creates and returns an implementation of a Java interface with
+ methods calling Lisp closures as given in METHOD-NAMES-AND-DEFS.
+
+ INTERFACE is either a Java interface or a string naming one.
+
+ METHOD-NAMES-AND-DEFS is an alternating list of method names
+ (strings) and method definitions (closures).
+
+ For missing methods, a dummy implementation is provided that
+ returns nothing or null depending on whether the return type is
+ void or not. This is for convenience only, and a warning is issued
+ for each undefined method.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:DUMP-CLASSPATH}
+\index{DUMP-CLASSPATH}
+--- Function: \textbf{dump-classpath} [\textbf{java}] \textit{\&optional classloader}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:ENSURE-JAVA-OBJECT}
+\index{ENSURE-JAVA-OBJECT}
+--- Function: \textbf{ensure-java-object} [\textbf{java}] \textit{obj}
+
+\begin{adjustwidth}{5em}{5em}
+Ensures OBJ is wrapped in a JAVA-OBJECT, wrapping it if necessary.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JMETHOD-RETURN-TYPE}
+\index{JMETHOD-RETURN-TYPE}
+--- Function: \textbf{jmethod-return-type} [\textbf{java}] \textit{method}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the result type (Java class) of the METHOD
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JFIELD-NAME}
+\index{JFIELD-NAME}
+--- Function: \textbf{jfield-name} [\textbf{java}] \textit{field}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the name of FIELD as a Lisp string
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:*JAVA-OBJECT-TO-STRING-LENGTH*}
+\index{*JAVA-OBJECT-TO-STRING-LENGTH*}
+--- Variable: \textbf{*java-object-to-string-length*} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+Length to truncate toString() PRINT-OBJECT output for an otherwise unspecialized JAVA-OBJECT. Can be set to NIL to indicate no limit.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JRUN-EXCEPTION-PROTECTED}
+\index{JRUN-EXCEPTION-PROTECTED}
+--- Function: \textbf{jrun-exception-protected} [\textbf{java}] \textit{closure}
+
+\begin{adjustwidth}{5em}{5em}
+Invokes the function CLOSURE and returns the result. Signals an error if stack or heap exhaustion occurs.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JINSTANCE-OF-P}
+\index{JINSTANCE-OF-P}
+--- Function: \textbf{jinstance-of-p} [\textbf{java}] \textit{obj class}
+
+\begin{adjustwidth}{5em}{5em}
+OBJ is an instance of CLASS (or one of its subclasses)
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JMETHOD-NAME}
+\index{JMETHOD-NAME}
+--- Function: \textbf{jmethod-name} [\textbf{java}] \textit{method}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the name of METHOD as a Lisp string
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JSTATIC-RAW}
+\index{JSTATIC-RAW}
+--- Function: \textbf{jstatic-raw} [\textbf{java}] \textit{method class \&rest args}
+
+\begin{adjustwidth}{5em}{5em}
+Invokes the static method METHOD on class CLASS with ARGS. Does not attempt to coerce the arguments or result into a Lisp object.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-OF}
+\index{JCLASS-OF}
+--- Function: \textbf{jclass-of} [\textbf{java}] \textit{object \&optional name}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the name of the Java class of OBJECT. If the NAME argument is
+ supplied, verifies that OBJECT is an instance of the named class. The name
+ of the class or nil is always returned as a second value.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:GET-CURRENT-CLASSLOADER}
+\index{GET-CURRENT-CLASSLOADER}
+--- Function: \textbf{get-current-classloader} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+
+\paragraph{}
+\label{JAVA:JNEW-ARRAY-FROM-LIST}
+\index{JNEW-ARRAY-FROM-LIST}
+--- Function: \textbf{jnew-array-from-list} [\textbf{java}] \textit{element-type list}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JMETHOD}
+\index{JMETHOD}
+--- Function: \textbf{jmethod} [\textbf{java}] \textit{class-ref method-name \&rest parameter-class-refs}
+
+\begin{adjustwidth}{5em}{5em}
+Returns a reference to the Java method METHOD-NAME of CLASS-REF with the given PARAMETER-CLASS-REFS.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:GET-DEFAULT-CLASSLOADER}
+\index{GET-DEFAULT-CLASSLOADER}
+--- Function: \textbf{get-default-classloader} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-METHODS}
+\index{JCLASS-METHODS}
+--- Function: \textbf{jclass-methods} [\textbf{java}] \textit{class \&key declared public}
+
+\begin{adjustwidth}{5em}{5em}
+Return a vector of all (or just the declared/public, if DECLARED/PUBLIC is true) methods of CLASS
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:REGISTER-JAVA-EXCEPTION}
+\index{REGISTER-JAVA-EXCEPTION}
+--- Function: \textbf{register-java-exception} [\textbf{java}] \textit{exception-name condition-symbol}
+
+\begin{adjustwidth}{5em}{5em}
+Registers the Java Throwable named by the symbol EXCEPTION-NAME as the condition designated by CONDITION-SYMBOL. Returns T if successful, NIL if not.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS}
+\index{JCLASS}
+--- Function: \textbf{jclass} [\textbf{java}] \textit{name-or-class-ref \&optional class-loader}
+
+\begin{adjustwidth}{5em}{5em}
+Returns a reference to the Java class designated by NAME-OR-CLASS-REF. If the CLASS-LOADER parameter is passed, the class is resolved with respect to the given ClassLoader.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JPROPERTY-VALUE}
+\index{JPROPERTY-VALUE}
+--- Function: \textbf{jproperty-value} [\textbf{java}] \textit{obj prop}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JFIELD-TYPE}
+\index{JFIELD-TYPE}
+--- Function: \textbf{jfield-type} [\textbf{java}] \textit{field}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the type (Java class) of FIELD
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JNEW-RUNTIME-CLASS}
+\index{JNEW-RUNTIME-CLASS}
+--- Function: \textbf{jnew-runtime-class} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-CONSTRUCTORS}
+\index{JCLASS-CONSTRUCTORS}
+--- Function: \textbf{jclass-constructors} [\textbf{java}] \textit{class}
+
+\begin{adjustwidth}{5em}{5em}
+Returns a vector of constructors for CLASS
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JSTATIC}
+\index{JSTATIC}
+--- Function: \textbf{jstatic} [\textbf{java}] \textit{method class \&rest args}
+
+\begin{adjustwidth}{5em}{5em}
+Invokes the static method METHOD on class CLASS with ARGS.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JMETHOD-PARAMS}
+\index{JMETHOD-PARAMS}
+--- Function: \textbf{jmethod-params} [\textbf{java}] \textit{method}
+
+\begin{adjustwidth}{5em}{5em}
+Returns a vector of parameter types (Java classes) for METHOD
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JREGISTER-HANDLER}
+\index{JREGISTER-HANDLER}
+--- Function: \textbf{jregister-handler} [\textbf{java}] \textit{object event handler \&key data count}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-SUPERCLASS}
+\index{JCLASS-SUPERCLASS}
+--- Function: \textbf{jclass-superclass} [\textbf{java}] \textit{class}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the superclass of CLASS, or NIL if it hasn't got one
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JAVA-OBJECT-P}
+\index{JAVA-OBJECT-P}
+--- Function: \textbf{java-object-p} [\textbf{java}] \textit{object}
+
+\begin{adjustwidth}{5em}{5em}
+Returns T if OBJECT is a JAVA-OBJECT.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:UNREGISTER-JAVA-EXCEPTION}
+\index{UNREGISTER-JAVA-EXCEPTION}
+--- Function: \textbf{unregister-java-exception} [\textbf{java}] \textit{exception-name}
+
+\begin{adjustwidth}{5em}{5em}
+Unregisters the Java Throwable EXCEPTION-NAME previously registered by REGISTER-JAVA-EXCEPTION.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JNEW}
+\index{JNEW}
+--- Function: \textbf{jnew} [\textbf{java}] \textit{constructor \&rest args}
+
+\begin{adjustwidth}{5em}{5em}
+Invokes the Java constructor CONSTRUCTOR with the arguments ARGS.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JRUNTIME-CLASS-EXISTS-P}
+\index{JRUNTIME-CLASS-EXISTS-P}
+--- Function: \textbf{jruntime-class-exists-p} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JARRAY-COMPONENT-TYPE}
+\index{JARRAY-COMPONENT-TYPE}
+--- Function: \textbf{jarray-component-type} [\textbf{java}] \textit{atype}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the component type of the array type ATYPE
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:ADD-TO-CLASSPATH}
+\index{ADD-TO-CLASSPATH}
+--- Generic Function: \textbf{add-to-classpath} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JOBJECT-LISP-VALUE}
+\index{JOBJECT-LISP-VALUE}
+--- Function: \textbf{jobject-lisp-value} [\textbf{java}] \textit{java-object}
+
+\begin{adjustwidth}{5em}{5em}
+Attempts to coerce JAVA-OBJECT into a Lisp object.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-NAME}
+\index{JCLASS-NAME}
+--- Function: \textbf{jclass-name} [\textbf{java}] \textit{class-ref \&optional name}
+
+\begin{adjustwidth}{5em}{5em}
+When called with one argument, returns the name of the Java class
+ designated by CLASS-REF. When called with two arguments, tests
+ whether CLASS-REF matches NAME.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JMEMBER-PUBLIC-P}
+\index{JMEMBER-PUBLIC-P}
+--- Function: \textbf{jmember-public-p} [\textbf{java}] \textit{member}
+
+\begin{adjustwidth}{5em}{5em}
+MEMBER is a public member of its declaring class
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:+NULL+}
+\index{+NULL+}
+--- Variable: \textbf{+null+} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+The JVM null object reference.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:ENSURE-JAVA-CLASS}
+\index{ENSURE-JAVA-CLASS}
+--- Function: \textbf{ensure-java-class} [\textbf{java}] \textit{jclass}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JAVA-CLASS}
+\index{JAVA-CLASS}
+--- Class: \textbf{java-class} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JMETHOD-LET}
+\index{JMETHOD-LET}
+--- Macro: \textbf{jmethod-let} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-ARRAY-P}
+\index{JCLASS-ARRAY-P}
+--- Function: \textbf{jclass-array-p} [\textbf{java}] \textit{class}
+
+\begin{adjustwidth}{5em}{5em}
+Returns T if CLASS is an array class
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCALL}
+\index{JCALL}
+--- Function: \textbf{jcall} [\textbf{java}] \textit{method-ref instance \&rest args}
+
+\begin{adjustwidth}{5em}{5em}
+Invokes the Java method METHOD-REF on INSTANCE with arguments ARGS, coercing the result into a Lisp object, if possible.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JARRAY-REF-RAW}
+\index{JARRAY-REF-RAW}
+--- Function: \textbf{jarray-ref-raw} [\textbf{java}] \textit{java-array \&rest indices}
+
+\begin{adjustwidth}{5em}{5em}
+Dereference the Java array JAVA-ARRAY using the given INDICIES. Does not attempt to coerce the result into a Lisp object.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JEQUAL}
+\index{JEQUAL}
+--- Function: \textbf{jequal} [\textbf{java}] \textit{obj1 obj2}
+
+\begin{adjustwidth}{5em}{5em}
+Compares obj1 with obj2 using java.lang.Object.equals()
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JNULL-REF-P}
+\index{JNULL-REF-P}
+--- Function: \textbf{jnull-ref-p} [\textbf{java}] \textit{object}
+
+\begin{adjustwidth}{5em}{5em}
+Returns a non-NIL value when the JAVA-OBJECT `object` is `null`,
+or signals a TYPE-ERROR condition if the object isn't of
+the right type.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JNEW-ARRAY}
+\index{JNEW-ARRAY}
+--- Function: \textbf{jnew-array} [\textbf{java}] \textit{element-type \&rest dimensions}
+
+\begin{adjustwidth}{5em}{5em}
+Creates a new Java array of type ELEMENT-TYPE, with the given DIMENSIONS.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:CHAIN}
+\index{CHAIN}
+--- Macro: \textbf{chain} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JFIELD}
+\index{JFIELD}
+--- Function: \textbf{jfield} [\textbf{java}] \textit{class-ref-or-field field-or-instance \&optional instance value}
+
+\begin{adjustwidth}{5em}{5em}
+Retrieves or modifies a field in a Java class or instance.
+
+Supported argument patterns:
+
+ Case 1: class-ref field-name:
+ Retrieves the value of a static field.
+
+ Case 2: class-ref field-name instance-ref:
+ Retrieves the value of a class field of the instance.
+
+ Case 3: class-ref field-name primitive-value:
+ Stores a primitive-value in a static field.
+
+ Case 4: class-ref field-name instance-ref value:
+ Stores value in a class field of the instance.
+
+ Case 5: class-ref field-name nil value:
+ Stores value in a static field (when value may be
+ confused with an instance-ref).
+
+ Case 6: field-name instance:
+ Retrieves the value of a field of the instance. The
+ class is derived from the instance.
+
+ Case 7: field-name instance value:
+ Stores value in a field of the instance. The class is
+ derived from the instance.
+
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JAVA-OBJECT}
+\index{JAVA-OBJECT}
+--- Class: \textbf{java-object} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-INTERFACES}
+\index{JCLASS-INTERFACES}
+--- Function: \textbf{jclass-interfaces} [\textbf{java}] \textit{class}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the vector of interfaces of CLASS
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:+TRUE+}
+\index{+TRUE+}
+--- Variable: \textbf{+true+} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+The JVM primitive value for boolean true.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JMAKE-INVOCATION-HANDLER}
+\index{JMAKE-INVOCATION-HANDLER}
+--- Function: \textbf{jmake-invocation-handler} [\textbf{java}] \textit{function}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JRESOLVE-METHOD}
+\index{JRESOLVE-METHOD}
+--- Function: \textbf{jresolve-method} [\textbf{java}] \textit{method-name instance \&rest args}
+
+\begin{adjustwidth}{5em}{5em}
+Finds the most specific Java method METHOD-NAME on INSTANCE applicable to arguments ARGS. Returns NIL if no suitable method is found. The algorithm used for resolution is the same used by JCALL when it is called with a string as the first parameter (METHOD-REF).
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:MAKE-CLASSLOADER}
+\index{MAKE-CLASSLOADER}
+--- Function: \textbf{make-classloader} [\textbf{java}] \textit{\&optional parent}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JMEMBER-PROTECTED-P}
+\index{JMEMBER-PROTECTED-P}
+--- Function: \textbf{jmember-protected-p} [\textbf{java}] \textit{member}
+
+\begin{adjustwidth}{5em}{5em}
+MEMBER is a protected member of its declaring class
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:MAKE-IMMEDIATE-OBJECT}
+\index{MAKE-IMMEDIATE-OBJECT}
+--- Function: \textbf{make-immediate-object} [\textbf{java}] \textit{object \&optional type}
+
+\begin{adjustwidth}{5em}{5em}
+Attempts to coerce a given Lisp object into a java-object of the
+given type. If type is not provided, works as jobject-lisp-value.
+Currently, type may be :BOOLEAN, treating the object as a truth value,
+or :REF, which returns Java null if NIL is provided.
+
+Deprecated. Please use JAVA:+NULL+, JAVA:+TRUE+, and JAVA:+FALSE+ for
+constructing wrapped primitive types, JAVA:JOBJECT-LISP-VALUE for converting a
+JAVA:JAVA-OBJECT to a Lisp value, or JAVA:JNULL-REF-P to distinguish a wrapped
+null JAVA-OBJECT from NIL.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JNEW-ARRAY-FROM-ARRAY}
+\index{JNEW-ARRAY-FROM-ARRAY}
+--- Function: \textbf{jnew-array-from-array} [\textbf{java}] \textit{element-type array}
+
+\begin{adjustwidth}{5em}{5em}
+Returns a new Java array with base type ELEMENT-TYPE (a string or a class-ref)
+ initialized from ARRAY
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JOBJECT-CLASS}
+\index{JOBJECT-CLASS}
+--- Function: \textbf{jobject-class} [\textbf{java}] \textit{obj}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the Java class that OBJ belongs to
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JREDEFINE-METHOD}
+\index{JREDEFINE-METHOD}
+--- Function: \textbf{jredefine-method} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-FIELDS}
+\index{JCLASS-FIELDS}
+--- Function: \textbf{jclass-fields} [\textbf{java}] \textit{class \&key declared public}
+
+\begin{adjustwidth}{5em}{5em}
+Returns a vector of all (or just the declared/public, if DECLARED/PUBLIC is true) fields of CLASS
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JAVA-EXCEPTION}
+\index{JAVA-EXCEPTION}
+--- Class: \textbf{java-exception} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:DESCRIBE-JAVA-OBJECT}
+\index{DESCRIBE-JAVA-OBJECT}
+--- Function: \textbf{describe-java-object} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JFIELD-RAW}
+\index{JFIELD-RAW}
+--- Function: \textbf{jfield-raw} [\textbf{java}] \textit{class-ref-or-field field-or-instance \&optional instance value}
+
+\begin{adjustwidth}{5em}{5em}
+Retrieves or modifies a field in a Java class or instance. Does not
+attempt to coerce its value or the result into a Lisp object.
+
+Supported argument patterns:
+
+ Case 1: class-ref field-name:
+ Retrieves the value of a static field.
+
+ Case 2: class-ref field-name instance-ref:
+ Retrieves the value of a class field of the instance.
+
+ Case 3: class-ref field-name primitive-value:
+ Stores a primitive-value in a static field.
+
+ Case 4: class-ref field-name instance-ref value:
+ Stores value in a class field of the instance.
+
+ Case 5: class-ref field-name nil value:
+ Stores value in a static field (when value may be
+ confused with an instance-ref).
+
+ Case 6: field-name instance:
+ Retrieves the value of a field of the instance. The
+ class is derived from the instance.
+
+ Case 7: field-name instance value:
+ Stores value in a field of the instance. The class is
+ derived from the instance.
+
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCONSTRUCTOR-PARAMS}
+\index{JCONSTRUCTOR-PARAMS}
+--- Function: \textbf{jconstructor-params} [\textbf{java}] \textit{constructor}
+
+\begin{adjustwidth}{5em}{5em}
+Returns a vector of parameter types (Java classes) for CONSTRUCTOR
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JMEMBER-STATIC-P}
+\index{JMEMBER-STATIC-P}
+--- Function: \textbf{jmember-static-p} [\textbf{java}] \textit{member}
+
+\begin{adjustwidth}{5em}{5em}
+MEMBER is a static member of its declaring class
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCOERCE}
+\index{JCOERCE}
+--- Function: \textbf{jcoerce} [\textbf{java}] \textit{object intended-class}
+
+\begin{adjustwidth}{5em}{5em}
+Attempts to coerce OBJECT into a JavaObject of class INTENDED-CLASS. Raises a TYPE-ERROR if no conversion is possible.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCONSTRUCTOR}
+\index{JCONSTRUCTOR}
+--- Function: \textbf{jconstructor} [\textbf{java}] \textit{class-ref \&rest parameter-class-refs}
+
+\begin{adjustwidth}{5em}{5em}
+Returns a reference to the Java constructor of CLASS-REF with the given PARAMETER-CLASS-REFS.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JARRAY-SET}
+\index{JARRAY-SET}
+--- Function: \textbf{jarray-set} [\textbf{java}] \textit{java-array new-value \&rest indices}
+
+\begin{adjustwidth}{5em}{5em}
+Stores NEW-VALUE at the given index in JAVA-ARRAY.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JARRAY-LENGTH}
+\index{JARRAY-LENGTH}
+--- Function: \textbf{jarray-length} [\textbf{java}] \textit{java-array}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JARRAY-REF}
+\index{JARRAY-REF}
+--- Function: \textbf{jarray-ref} [\textbf{java}] \textit{java-array \&rest indices}
+
+\begin{adjustwidth}{5em}{5em}
+Dereferences the Java array JAVA-ARRAY using the given INDICIES, coercing the result into a Lisp object, if possible.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-FIELD}
+\index{JCLASS-FIELD}
+--- Function: \textbf{jclass-field} [\textbf{java}] \textit{class field-name}
+
+\begin{adjustwidth}{5em}{5em}
+Returns the field named FIELD-NAME of CLASS
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JMAKE-PROXY}
+\index{JMAKE-PROXY}
+--- Generic Function: \textbf{jmake-proxy} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCALL-RAW}
+\index{JCALL-RAW}
+--- Function: \textbf{jcall-raw} [\textbf{java}] \textit{method-ref instance \&rest args}
+
+\begin{adjustwidth}{5em}{5em}
+Invokes the Java method METHOD-REF on INSTANCE with arguments ARGS. Does not attempt to coerce the result into a Lisp object.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:+FALSE+}
+\index{+FALSE+}
+--- Variable: \textbf{+false+} [\textbf{java}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+The JVM primitive value for boolean false.
+\end{adjustwidth}
+
+\paragraph{}
+\label{JAVA:JCLASS-INTERFACE-P}
+\index{JCLASS-INTERFACE-P}
+--- Function: \textbf{jclass-interface-p} [\textbf{java}] \textit{class}
+
+\begin{adjustwidth}{5em}{5em}
+Returns T if CLASS is an interface
+\end{adjustwidth}
+
Modified: branches/1.0.x/abcl/doc/manual/threads.tex
==============================================================================
--- branches/1.0.x/abcl/doc/manual/threads.tex Sat Jan 7 15:09:30 2012 (r13727)
+++ branches/1.0.x/abcl/doc/manual/threads.tex Mon Jan 9 00:38:52 2012 (r13728)
@@ -1,52 +1,235 @@
-\begin{verbatim}
-THREADS:CURRENT-THREAD
- Function: (not documented)
-THREADS:DESTROY-THREAD
- Function: (not documented)
-THREADS:GET-MUTEX
- Function: Acquires a lock on the `mutex'.
-THREADS:INTERRUPT-THREAD
- Function: Interrupts THREAD and forces it to apply FUNCTION to ARGS.
-THREADS:MAILBOX-EMPTY-P
- Function: Returns non-NIL if the mailbox can be read from, NIL otherwise.
-THREADS:MAILBOX-PEEK
- Function: Returns two values. The second returns non-NIL when the mailbox
-THREADS:MAILBOX-READ
- Function: Blocks on the mailbox until an item is available for reading.
-THREADS:MAILBOX-SEND
- Function: Sends an item into the mailbox, notifying 1 waiter
-THREADS:MAKE-MAILBOX
- Function: (not documented)
-THREADS:MAKE-MUTEX
- Function: (not documented)
-THREADS:MAKE-THREAD
- Function: (not documented)
-THREADS:MAKE-THREAD-LOCK
- Function: Returns an object to be used with the `with-thread-lock' macro.
-THREADS:MAPCAR-THREADS
- Function: (not documented)
-THREADS:OBJECT-NOTIFY
- Function: (not documented)
-THREADS:OBJECT-NOTIFY-ALL
- Function: (not documented)
-THREADS:OBJECT-WAIT
- Function: (not documented)
-THREADS:RELEASE-MUTEX
- Function: Releases a lock on the `mutex'.
-THREADS:SYNCHRONIZED-ON
- Function: (not documented)
-THREADS:THREAD
- Class: (not documented)
-THREADS:THREAD-ALIVE-P
- Function: Boolean predicate whether THREAD is alive.
-THREADS:THREAD-JOIN
- Function: Waits for thread to finish.
-THREADS:THREAD-NAME
- Function: (not documented)
-THREADS:THREADP
- Function: (not documented)
-THREADS:WITH-MUTEX
- Function: (not documented)
-THREADS:WITH-THREAD-LOCK
- Function: (not documented)
-\end{verbatim}
+\subsection{Exported Symbols from the THREADS package}
+
+\paragraph{}
+\label{THREADS:MAILBOX-EMPTY-P}
+\index{MAILBOX-EMPTY-P}
+--- Function: \textbf{mailbox-empty-p} [\textbf{threads}] \textit{mailbox}
+
+\begin{adjustwidth}{5em}{5em}
+Returns non-NIL if the mailbox can be read from, NIL otherwise.
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:THREADP}
+\index{THREADP}
+--- Function: \textbf{threadp} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:DESTROY-THREAD}
+\index{DESTROY-THREAD}
+--- Function: \textbf{destroy-thread} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:WITH-MUTEX}
+\index{WITH-MUTEX}
+--- Macro: \textbf{with-mutex} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:THREAD-JOIN}
+\index{THREAD-JOIN}
+--- Function: \textbf{thread-join} [\textbf{threads}] \textit{thread}
+
+\begin{adjustwidth}{5em}{5em}
+Waits for thread to finish.
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:RELEASE-MUTEX}
+\index{RELEASE-MUTEX}
+--- Function: \textbf{release-mutex} [\textbf{threads}] \textit{mutex}
+
+\begin{adjustwidth}{5em}{5em}
+Releases a lock on the `mutex'.
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:OBJECT-WAIT}
+\index{OBJECT-WAIT}
+--- Function: \textbf{object-wait} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:MAKE-THREAD}
+\index{MAKE-THREAD}
+--- Function: \textbf{make-thread} [\textbf{threads}] \textit{function \&key name}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:MAKE-THREAD-LOCK}
+\index{MAKE-THREAD-LOCK}
+--- Function: \textbf{make-thread-lock} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+Returns an object to be used with the `with-thread-lock' macro.
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:OBJECT-NOTIFY-ALL}
+\index{OBJECT-NOTIFY-ALL}
+--- Function: \textbf{object-notify-all} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:MAKE-MAILBOX}
+\index{MAKE-MAILBOX}
+--- Function: \textbf{make-mailbox} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:OBJECT-NOTIFY}
+\index{OBJECT-NOTIFY}
+--- Function: \textbf{object-notify} [\textbf{threads}] \textit{object}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:GET-MUTEX}
+\index{GET-MUTEX}
+--- Function: \textbf{get-mutex} [\textbf{threads}] \textit{mutex}
+
+\begin{adjustwidth}{5em}{5em}
+Acquires a lock on the `mutex'.
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:MAILBOX-PEEK}
+\index{MAILBOX-PEEK}
+--- Function: \textbf{mailbox-peek} [\textbf{threads}] \textit{mailbox}
+
+\begin{adjustwidth}{5em}{5em}
+Returns two values. The second returns non-NIL when the mailbox
+is empty. The first is the next item to be read from the mailbox
+if the first is NIL.
+
+Note that due to multi-threading, the first value returned upon
+peek, may be different from the one returned upon next read in the
+calling thread.
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:THREAD-ALIVE-P}
+\index{THREAD-ALIVE-P}
+--- Function: \textbf{thread-alive-p} [\textbf{threads}] \textit{thread}
+
+\begin{adjustwidth}{5em}{5em}
+Boolean predicate whether THREAD is alive.
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:MAILBOX-READ}
+\index{MAILBOX-READ}
+--- Function: \textbf{mailbox-read} [\textbf{threads}] \textit{mailbox}
+
+\begin{adjustwidth}{5em}{5em}
+Blocks on the mailbox until an item is available for reading.
+When an item is available, it is returned.
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:SYNCHRONIZED-ON}
+\index{SYNCHRONIZED-ON}
+--- NIL: \textbf{synchronized-on} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:INTERRUPT-THREAD}
+\index{INTERRUPT-THREAD}
+--- Function: \textbf{interrupt-thread} [\textbf{threads}] \textit{thread function \&rest args}
+
+\begin{adjustwidth}{5em}{5em}
+Interrupts THREAD and forces it to apply FUNCTION to ARGS.
+When the function returns, the thread's original computation continues. If multiple interrupts are queued for a thread, they are all run, but the order is not guaranteed.
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:MAKE-MUTEX}
+\index{MAKE-MUTEX}
+--- Function: \textbf{make-mutex} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:THREAD}
+\index{THREAD}
+--- Class: \textbf{thread} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:WITH-THREAD-LOCK}
+\index{WITH-THREAD-LOCK}
+--- Macro: \textbf{with-thread-lock} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:MAILBOX-SEND}
+\index{MAILBOX-SEND}
+--- Function: \textbf{mailbox-send} [\textbf{threads}] \textit{mailbox item}
+
+\begin{adjustwidth}{5em}{5em}
+Sends an item into the mailbox, notifying 1 waiter
+to wake up for retrieval of that object.
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:THREAD-NAME}
+\index{THREAD-NAME}
+--- Function: \textbf{thread-name} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:CURRENT-THREAD}
+\index{CURRENT-THREAD}
+--- Function: \textbf{current-thread} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
+\paragraph{}
+\label{THREADS:MAPCAR-THREADS}
+\index{MAPCAR-THREADS}
+--- Function: \textbf{mapcar-threads} [\textbf{threads}] \textit{}
+
+\begin{adjustwidth}{5em}{5em}
+NOT-DOCUMENTED
+\end{adjustwidth}
+
From mevenson at common-lisp.net Mon Jan 9 09:55:59 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 01:55:59 -0800
Subject: [armedbear-cvs] r13729 - branches/1.0.x/abcl
Message-ID:
Author: mevenson
Date: Mon Jan 9 01:55:58 2012
New Revision: 13729
Log:
backport most recent copy of build properties
Modified:
branches/1.0.x/abcl/abcl.properties.in
Modified: branches/1.0.x/abcl/abcl.properties.in
==============================================================================
--- branches/1.0.x/abcl/abcl.properties.in Mon Jan 9 00:38:52 2012 (r13728)
+++ branches/1.0.x/abcl/abcl.properties.in Mon Jan 9 01:55:58 2012 (r13729)
@@ -1,7 +1,10 @@
# $Id$
+# XXX should be called 'build.properties' but this collides with its usage by the Eclipe IDE
+
# Template for settings the Ant based build process.
+
# Attempt to perform incremental compilation?
#abcl.build.incremental=true
@@ -13,13 +16,28 @@
# Examples:
+# Java7 on 64bit optimizations
+#java.options=-d64 -Xmx16g -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2g
+
# Set the JVM to use a maximum of 1GB of RAM (only works for 64bit JVMs)
#java.options=-d64 -Xmx1g
+# Use a default garbage collector on another
+#java.options=-d64 -Xmx4g -XX:+PrintGCDetails -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MaxGCPauseMillis=100
+
+# Use a separate concurrent GC thread (java-1.6_14 or later)
+#java.options=-d64 -Xmx8g -XX:+UseConcMarkSweepGC
+
+# Java 5 era (???) flag to GC class definitions
+#java.options=-XX:+CMSPermGenSweepingEnabled
+
# The unloading of class definitions is a per jvm policy. For those
# implementations which run out of permgen space, the following should
# help things out.
#java.options=-d64 -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=1g
+# Enable assertions specified via the JVM contract
+#java.options=-ea
+
# Additional site specific startup code to be merged in 'system.lisp' at build time
#abcl.startup.file=${basedir}/startup.lisp
From mevenson at common-lisp.net Mon Jan 9 10:53:47 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 02:53:47 -0800
Subject: [armedbear-cvs] r13731 - trunk/abcl
Message-ID:
Author: mevenson
Date: Mon Jan 9 02:53:47 2012
New Revision: 13731
Log:
Update CHANGES for abcl-1.0.1.
Modified:
trunk/abcl/CHANGES
Modified: trunk/abcl/CHANGES
==============================================================================
--- trunk/abcl/CHANGES Mon Jan 9 02:53:45 2012 (r13730)
+++ trunk/abcl/CHANGES Mon Jan 9 02:53:47 2012 (r13731)
@@ -3,6 +3,58 @@
svn.uri=:"http//common-lisp.net/project/armedbear/svn/trunk/abcl/"
(unreleased)
+Changes
+-------
+
+ * [r13695] Reimplementation of global symbol macros to avoid using
+ the symbol's value slot.
+
+ * [r13696] DEFMACRO now supports documentation strings as per the
+ ANSI specification.
+
+ * [r13700] ABCL loads under the Weblogic 10.3 application server.
+
+
+Version 1.0.1
+==============
+svn.uri=:"http//common-lisp.net/project/armedbear/svn/tags/1.0.1/abcl/"
+(09 January 2012)
+
+Changes
+-------
+
+ * Updated ASDF to 2.019
+
+ * User Manual now contains more polished formating from docstring
+ groveling, an index of symbols, and additional enhancements.
+
+ * 'abcl.properties.in' now contains examples of optimizing the ABCL
+ wrapper script for 64bit instances for Java7 and for Java6.
+
+ * [r13720] Randomize string hash computation to guard against
+ exploits.
+
+ * [r13723] New internal API in Package.java for looking up internal
+ vs. external symbols.
+
+Fixes
+-----
+
+ * [#181][r13718] The implementation now correctly loads ASDF definitions
+ from jar archives. This had prevented the ABCL-CONTRIB loading
+ mechanism from working.
+
+ * [#177] Made the mechanism for locating the abcl-contrib archive
+ more robust
+
+ * [#177] LIST-DIRECTORY no longer ignores :RESOLVE-SYMLINKS
+
+ * [r13706] Fix Streadm.readToken() bug reported by Blake McBride.
+
+ * [#183][r13703] Move threads-jss.lisp out of system source to
+ restore conditional recompilation logic.
+
+
Version 1.0.0
==============
svn.uri=:"http//common-lisp.net/project/armedbear/svn/tags/1.0.0/abcl/"
From mevenson at common-lisp.net Mon Jan 9 10:53:51 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 02:53:51 -0800
Subject: [armedbear-cvs] r13730 - trunk/abcl/src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Mon Jan 9 02:53:45 2012
New Revision: 13730
Log:
Fix #177: make logic for finding abcl-contrib more robust.
Issuing a (REQUIRE 'ABCL-CONTRIB) will now use the full name of the
jar archive ABCL was loaded from if it is of the form `abcl.jar' or
`abcl-x.y.z.jar` or `abcl-x.y.z-some-arbitrary-string.jar' to
determine the location of the jar containing the ABCL-CONTRIB
packages. The namestrings of the ASDF systems located by this
mechanism are now printed to *STANDARD-OUTPUT*.
Installations of the implementations loading from non-standard
locations may use the SYS::*ABCL-JAR* and SYS:*ABCL-CONTRIB* specials
to override this behavior.
Modified:
trunk/abcl/src/org/armedbear/lisp/abcl-contrib.lisp
Modified: trunk/abcl/src/org/armedbear/lisp/abcl-contrib.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/abcl-contrib.lisp Mon Jan 9 01:55:58 2012 (r13729)
+++ trunk/abcl/src/org/armedbear/lisp/abcl-contrib.lisp Mon Jan 9 02:53:45 2012 (r13730)
@@ -2,21 +2,21 @@
(require :asdf)
-;;; XXX make less sensitive to ABCL jar being called "abcl.jar"
-;;; allow being called "abcl-x.y.z.jar for semantic versioning
-;;; allow customization in system.lisp
+;;; TODO possibly allow customization in system.lisp?
(defun find-system-jar ()
- (dolist (loader (java:dump-classpath))
- (let ((abcl-jar
- (find-if (lambda (p) (and
- (or (equal (pathname-name p) "abcl")
- (equal (pathname-name p)
- (format nil "abcl-~A"
- (lisp-implementation-version))))
- (equal (pathname-type p) "jar")))
- (rest loader))))
- (when abcl-jar
- (return abcl-jar)))))
+ (flet ((match-system-jar (p)
+ "Match `abcl.jar` or `abcl-1.0.1.jar` or `abcl-1.0.1-something.jar`"
+ (and (pathnamep p)
+ (equal (pathname-type p) "jar")
+ (java:jstatic "matches"
+ "java.util.regex.Pattern"
+ "abcl(-[0-9]\\.[0-9]\\.[0-9](-.+)?)?"
+ (pathname-name p))
+ p)))
+ (dolist (loader (java:dump-classpath))
+ (let ((abcl-jar (some #'match-system-jar loader)))
+ (when abcl-jar
+ (return abcl-jar))))))
(defvar *abcl-jar* nil
"Pathname of the jar that ABCL was loaded from.
@@ -26,32 +26,41 @@
"Pathname of the ABCL contrib.
Initialized via SYSTEM:FIND-CONTRIB")
-(defun find-contrib (&optional (verbose nil))
+(defun find-contrib (&key (verbose nil))
"Attempt to find the ABCL contrib jar and add its contents to ASDF."
(unless *abcl-contrib*
(unless *abcl-jar*
(setf *abcl-jar* (find-system-jar)))
(when *abcl-jar*
- (let ((abcl-contrib (make-pathname :defaults *abcl-jar*
- :name "abcl-contrib")))
- (when (probe-file abcl-contrib)
- (setf *abcl-contrib* abcl-contrib)
- (dolist (asdf-file
- (directory (make-pathname :device (list *abcl-contrib*)
- :directory '(:absolute :wild)
- :name :wild
- :type "asd")))
- (let ((asdf-directory
- (make-pathname :defaults asdf-file :name nil :type nil)))
- (when verbose
- (format t "Adding ~A to ASDF.~%" asdf-directory))
- (push asdf-directory asdf:*central-registry*)))
- *abcl-contrib*)))))
+ (let* ((abcl-contrib-name
+ (concatenate 'string "abcl-contrib"
+ (subseq (pathname-name *abcl-jar*) 4)))
+ (abcl-contrib (make-pathname :defaults *abcl-jar*
+ :name abcl-contrib-name)))
+ (if (probe-file abcl-contrib)
+ (progn
+ (setf *abcl-contrib* abcl-contrib)
+ (dolist (asdf-file
+ (directory (make-pathname :device (list *abcl-contrib*)
+ :directory '(:absolute :wild)
+ :name :wild
+ :type "asd")))
+ (let ((asdf-directory
+ (make-pathname :defaults asdf-file :name nil :type nil)))
+ (format verbose "Adding ~A to ASDF.~%" asdf-directory)
+ (push asdf-directory asdf:*central-registry*)))
+ *abcl-contrib*)
+ (format verbose "Failed to find abcl-contrib at '~A'." abcl-contrib))))))
-(when (find-contrib)
+
+(when (find-contrib :verbose t)
(provide :abcl-contrib))
+
+
+
+
From mevenson at common-lisp.net Mon Jan 9 10:58:12 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 02:58:12 -0800
Subject: [armedbear-cvs] r13732 - branches/1.0.x/abcl/src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Mon Jan 9 02:58:11 2012
New Revision: 13732
Log:
backport r13730: make logic for finding abcl-contrib more robust.
Modified:
branches/1.0.x/abcl/src/org/armedbear/lisp/abcl-contrib.lisp
Modified: branches/1.0.x/abcl/src/org/armedbear/lisp/abcl-contrib.lisp
==============================================================================
--- branches/1.0.x/abcl/src/org/armedbear/lisp/abcl-contrib.lisp Mon Jan 9 02:53:47 2012 (r13731)
+++ branches/1.0.x/abcl/src/org/armedbear/lisp/abcl-contrib.lisp Mon Jan 9 02:58:11 2012 (r13732)
@@ -2,17 +2,21 @@
(require :asdf)
-;;; XXX make less sensitive to ABCL jar being called "abcl.jar"
-;;; allow being called "abcl-x.y.z.jar for semantic versioning
-;;; allow customization in system.lisp
+;;; TODO possibly allow customization in system.lisp?
(defun find-system-jar ()
- (dolist (loader (java:dump-classpath))
- (let ((abcl-jar
- (find-if (lambda (p) (and (equal (pathname-name p) "abcl")
- (equal (pathname-type p) "jar")))
- (rest loader))))
- (when abcl-jar
- (return abcl-jar)))))
+ (flet ((match-system-jar (p)
+ "Match `abcl.jar` or `abcl-1.0.1.jar` or `abcl-1.0.1-something.jar`"
+ (and (pathnamep p)
+ (equal (pathname-type p) "jar")
+ (java:jstatic "matches"
+ "java.util.regex.Pattern"
+ "abcl(-[0-9]\\.[0-9]\\.[0-9](-.+)?)?"
+ (pathname-name p))
+ p)))
+ (dolist (loader (java:dump-classpath))
+ (let ((abcl-jar (some #'match-system-jar loader)))
+ (when abcl-jar
+ (return abcl-jar))))))
(defvar *abcl-jar* nil
"Pathname of the jar that ABCL was loaded from.
@@ -22,32 +26,41 @@
"Pathname of the ABCL contrib.
Initialized via SYSTEM:FIND-CONTRIB")
-(defun find-contrib (&optional (verbose nil))
+(defun find-contrib (&key (verbose nil))
"Attempt to find the ABCL contrib jar and add its contents to ASDF."
(unless *abcl-contrib*
(unless *abcl-jar*
(setf *abcl-jar* (find-system-jar)))
(when *abcl-jar*
- (let ((abcl-contrib (make-pathname :defaults *abcl-jar*
- :name "abcl-contrib")))
- (when (probe-file abcl-contrib)
- (setf *abcl-contrib* abcl-contrib)
- (dolist (asdf-file
- (directory (make-pathname :device (list *abcl-contrib*)
- :directory '(:absolute :wild)
- :name :wild
- :type "asd")))
- (let ((asdf-directory
- (make-pathname :defaults asdf-file :name nil :type nil)))
- (when verbose
- (format t "Adding ~A to ASDF.~%" asdf-directory))
- (push asdf-directory asdf:*central-registry*)))
- *abcl-contrib*)))))
+ (let* ((abcl-contrib-name
+ (concatenate 'string "abcl-contrib"
+ (subseq (pathname-name *abcl-jar*) 4)))
+ (abcl-contrib (make-pathname :defaults *abcl-jar*
+ :name abcl-contrib-name)))
+ (if (probe-file abcl-contrib)
+ (progn
+ (setf *abcl-contrib* abcl-contrib)
+ (dolist (asdf-file
+ (directory (make-pathname :device (list *abcl-contrib*)
+ :directory '(:absolute :wild)
+ :name :wild
+ :type "asd")))
+ (let ((asdf-directory
+ (make-pathname :defaults asdf-file :name nil :type nil)))
+ (format verbose "Adding ~A to ASDF.~%" asdf-directory)
+ (push asdf-directory asdf:*central-registry*)))
+ *abcl-contrib*)
+ (format verbose "Failed to find abcl-contrib at '~A'." abcl-contrib))))))
-(when (find-contrib)
+
+(when (find-contrib :verbose t)
(provide :abcl-contrib))
+
+
+
+
From mevenson at common-lisp.net Mon Jan 9 10:59:00 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 02:59:00 -0800
Subject: [armedbear-cvs] r13733 - branches/1.0.x/abcl
Message-ID:
Author: mevenson
Date: Mon Jan 9 02:59:00 2012
New Revision: 13733
Log:
backport r13731: CHANGES for abcl-1.0.1.
Modified:
branches/1.0.x/abcl/CHANGES
Modified: branches/1.0.x/abcl/CHANGES
==============================================================================
--- branches/1.0.x/abcl/CHANGES Mon Jan 9 02:58:11 2012 (r13732)
+++ branches/1.0.x/abcl/CHANGES Mon Jan 9 02:59:00 2012 (r13733)
@@ -1,3 +1,55 @@
+Changes
+-------
+
+ * [r13695] Reimplementation of global symbol macros to avoid using
+ the symbol's value slot.
+
+ * [r13696] DEFMACRO now supports documentation strings as per the
+ ANSI specification.
+
+ * [r13700] ABCL loads under the Weblogic 10.3 application server.
+
+
+Version 1.0.1
+==============
+svn.uri=:"http//common-lisp.net/project/armedbear/svn/tags/1.0.1/abcl/"
+(09 January 2012)
+
+Changes
+-------
+
+ * Updated ASDF to 2.019
+
+ * User Manual now contains more polished formating from docstring
+ groveling, an index of symbols, and additional enhancements.
+
+ * 'abcl.properties.in' now contains examples of optimizing the ABCL
+ wrapper script for 64bit instances for Java7 and for Java6.
+
+ * [r13720] Randomize string hash computation to guard against
+ exploits.
+
+ * [r13723] New internal API in Package.java for looking up internal
+ vs. external symbols.
+
+Fixes
+-----
+
+ * [#181][r13718] The implementation now correctly loads ASDF definitions
+ from jar archives. This had prevented the ABCL-CONTRIB loading
+ mechanism from working.
+
+ * [#177] Made the mechanism for locating the abcl-contrib archive
+ more robust
+
+ * [#177] LIST-DIRECTORY no longer ignores :RESOLVE-SYMLINKS
+
+ * [r13706] Fix Streadm.readToken() bug reported by Blake McBride.
+
+ * [#183][r13703] Move threads-jss.lisp out of system source to
+ restore conditional recompilation logic.
+
+
Version 1.0.0
==============
svn://common-lisp.net/project/armedbear/svn/tags/1.0.0/abcl
From mevenson at common-lisp.net Mon Jan 9 11:01:00 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 03:01:00 -0800
Subject: [armedbear-cvs] r13734 - branches/1.0.x/abcl
Message-ID:
Author: mevenson
Date: Mon Jan 9 03:00:59 2012
New Revision: 13734
Log:
Update README version for 1.0.1
Modified:
branches/1.0.x/abcl/README
Modified: branches/1.0.x/abcl/README
==============================================================================
--- branches/1.0.x/abcl/README Mon Jan 9 02:59:00 2012 (r13733)
+++ branches/1.0.x/abcl/README Mon Jan 9 03:00:59 2012 (r13734)
@@ -47,7 +47,7 @@
which should result in output like the following
- Armed Bear Common Lisp 1.0.0
+ Armed Bear Common Lisp 1.0.1
Java 1.6.0_21 Sun Microsystems Inc.
Java HotSpot(TM) Client VM
Low-level initialization completed in 0.3 seconds.
@@ -183,7 +183,7 @@
### Tests
-ABCL 1.0.0 now fails only 18 out of 21708 total tests in the ANSI CL
+ABCL 1.0.1 now fails only 18 out of 21708 total tests in the ANSI CL
test suite (derived from the tests orginally written for GCL).
Maxima's test suite runs without failures.
@@ -207,5 +207,5 @@
Alessio Stalla
Ville Voutilaninen
-October 22, 2011
+Janurary 2012
From mevenson at common-lisp.net Mon Jan 9 11:19:31 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 03:19:31 -0800
Subject: [armedbear-cvs] r13735 - branches/1.0.x/abcl
Message-ID:
Author: mevenson
Date: Mon Jan 9 03:19:30 2012
New Revision: 13735
Log:
Don't include future features in CHANGES for point release.
Modified:
branches/1.0.x/abcl/CHANGES
Modified: branches/1.0.x/abcl/CHANGES
==============================================================================
--- branches/1.0.x/abcl/CHANGES Mon Jan 9 03:00:59 2012 (r13734)
+++ branches/1.0.x/abcl/CHANGES Mon Jan 9 03:19:30 2012 (r13735)
@@ -1,15 +1,3 @@
-Changes
--------
-
- * [r13695] Reimplementation of global symbol macros to avoid using
- the symbol's value slot.
-
- * [r13696] DEFMACRO now supports documentation strings as per the
- ANSI specification.
-
- * [r13700] ABCL loads under the Weblogic 10.3 application server.
-
-
Version 1.0.1
==============
svn.uri=:"http//common-lisp.net/project/armedbear/svn/tags/1.0.1/abcl/"
From mevenson at common-lisp.net Mon Jan 9 11:28:56 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 03:28:56 -0800
Subject: [armedbear-cvs] r13736 - branches/1.0.x/abcl
Message-ID:
Author: mevenson
Date: Mon Jan 9 03:28:56 2012
New Revision: 13736
Log:
Correct spelling of January
Modified:
branches/1.0.x/abcl/README
Modified: branches/1.0.x/abcl/README
==============================================================================
--- branches/1.0.x/abcl/README Mon Jan 9 03:19:30 2012 (r13735)
+++ branches/1.0.x/abcl/README Mon Jan 9 03:28:56 2012 (r13736)
@@ -207,5 +207,5 @@
Alessio Stalla
Ville Voutilaninen
-Janurary 2012
+January 2012
From mevenson at common-lisp.net Mon Jan 9 11:30:35 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 03:30:35 -0800
Subject: [armedbear-cvs] r13737 - in public_html/releases/1.0.1: . RC1
Message-ID:
Author: mevenson
Date: Mon Jan 9 03:30:34 2012
New Revision: 13737
Log:
Upload abcl-1.0.1-rc1 distribution files.
Added:
public_html/releases/1.0.1/
public_html/releases/1.0.1/RC1/
From mevenson at common-lisp.net Mon Jan 9 11:31:39 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Mon, 09 Jan 2012 03:31:39 -0800
Subject: [armedbear-cvs] r13738 - public_html/releases/1.0.1/RC1
Message-ID:
Author: mevenson
Date: Mon Jan 9 03:31:38 2012
New Revision: 13738
Log:
Upload abcl-1.0.1-rc1 distribution files.
Added:
public_html/releases/1.0.1/RC1/abcl-bin-1.0.1-rc1.tar.gz (contents, props changed)
public_html/releases/1.0.1/RC1/abcl-bin-1.0.1-rc1.zip (contents, props changed)
public_html/releases/1.0.1/RC1/abcl-src-1.0.1-rc1.tar.gz (contents, props changed)
public_html/releases/1.0.1/RC1/abcl-src-1.0.1-rc1.zip (contents, props changed)
Added: public_html/releases/1.0.1/RC1/abcl-bin-1.0.1-rc1.tar.gz
==============================================================================
Binary file. No diff available.
Added: public_html/releases/1.0.1/RC1/abcl-bin-1.0.1-rc1.zip
==============================================================================
Binary file. No diff available.
Added: public_html/releases/1.0.1/RC1/abcl-src-1.0.1-rc1.tar.gz
==============================================================================
Binary file. No diff available.
Added: public_html/releases/1.0.1/RC1/abcl-src-1.0.1-rc1.zip
==============================================================================
Binary file. No diff available.
From astalla at common-lisp.net Mon Jan 9 22:55:38 2012
From: astalla at common-lisp.net (astalla at common-lisp.net)
Date: Mon, 09 Jan 2012 14:55:38 -0800
Subject: [armedbear-cvs] r13739 - trunk/abcl/src/org/armedbear/lisp
Message-ID:
Author: astalla
Date: Mon Jan 9 14:55:37 2012
New Revision: 13739
Log:
Annotations in class-file:
- support for enum-value elements;
- rectified boolean valued elements (Z instead of B which is Byte)
Modified:
trunk/abcl/src/org/armedbear/lisp/jvm-class-file.lisp
trunk/abcl/src/org/armedbear/lisp/runtime-class.lisp
Modified: trunk/abcl/src/org/armedbear/lisp/jvm-class-file.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/jvm-class-file.lisp Mon Jan 9 03:31:38 2012 (r13738)
+++ trunk/abcl/src/org/armedbear/lisp/jvm-class-file.lisp Mon Jan 9 14:55:37 2012 (r13739)
@@ -81,7 +81,7 @@
|#
(defstruct (jvm-class-name (:conc-name class-)
- (:constructor %make-jvm-class-name))
+ (:constructor %make-jvm-class-name))
"Used for class identification.
The caller should instantiate only one `class-name' per class, as they are
@@ -373,15 +373,19 @@
(defun pool-add-class (pool class)
"Returns the index of the constant-pool class item for `class'.
-`class' must be an instance of `class-name'."
- (let ((entry (gethash class (pool-entries pool))))
- (unless entry
- (let ((utf8 (pool-add-utf8 pool (class-name-internal class))))
- (setf entry
- (make-constant-class (incf (pool-index pool)) utf8)
- (gethash class (pool-entries pool)) entry))
- (push entry (pool-entries-list pool)))
- (constant-index entry)))
+`class' must be an instance of `class-name' or a string (which will be converted
+to a `class-name')."
+ (let ((class (if (jvm-class-name-p class)
+ class
+ (make-jvm-class-name class))))
+ (let ((entry (gethash class (pool-entries pool))))
+ (unless entry
+ (let ((utf8 (pool-add-utf8 pool (class-name-internal class))))
+ (setf entry
+ (make-constant-class (incf (pool-index pool)) utf8)
+ (gethash class (pool-entries pool)) entry))
+ (push entry (pool-entries-list pool)))
+ (constant-index entry))))
(defun pool-add-field-ref (pool class name type)
"Returns the index of the constant-pool item which denotes a reference
@@ -1348,7 +1352,7 @@
type
elements)
-(defstruct annotation-element name value)
+(defstruct annotation-element (name "value") value)
(defstruct annotation-element-value tag finalizer writer)
@@ -1360,19 +1364,46 @@
(etypecase value
(boolean
(setf (annotation-element-value-tag self)
- (char-code #\B)
+ (char-code #\Z)
+ (primitive-or-string-annotation-element-value self)
+ (pool-add-int (class-file-constants class) (if value 1 0))))
+ (fixnum
+ (setf (annotation-element-value-tag self)
+ (char-code #\I)
+ (primitive-or-string-annotation-element-value self)
+ (pool-add-int (class-file-constants class) value)))
+ (string
+ (setf (annotation-element-value-tag self)
+ (char-code #\s)
(primitive-or-string-annotation-element-value self)
- (pool-add-int (class-file-constants class) (if value 1 0))))))))
+ (pool-add-utf8 (class-file-constants class) value)))))))
(writer (lambda (self stream)
(write-u1 (annotation-element-value-tag self) stream)
(write-u2 (primitive-or-string-annotation-element-value self) stream)))))
value)
+(defstruct (enum-value-annotation-element-value
+ (:conc-name enum-value-annotation-element-)
+ (:include annotation-element-value
+ (finalizer (lambda (self class)
+ (setf (annotation-element-value-tag self)
+ (char-code #\e)
+ (enum-value-annotation-element-type self)
+ (pool-add-utf8 (class-file-constants class)
+ (enum-value-annotation-element-type self)) ;;Binary name as string
+ (enum-value-annotation-element-name self)
+ (pool-add-utf8 (class-file-constants class)
+ (enum-value-annotation-element-name self)))))
+ (writer (lambda (self stream)
+ (write-u1 (annotation-element-value-tag self) stream)
+ (write-u2 (enum-value-annotation-element-type self) stream)
+ (write-u2 (enum-value-annotation-element-name self) stream)))))
+ type
+ name)
+
(defstruct (runtime-visible-annotations-attribute
(:include annotations-attribute
- (name "RuntimeVisibleAnnotations")
- (finalizer #'finalize-annotations)
- (writer #'write-annotations)))
+ (name "RuntimeVisibleAnnotations")))
"4.8.15 The RuntimeVisibleAnnotations attribute
The RuntimeVisibleAnnotations attribute is a variable length attribute in the
attributes table of the ClassFile, field_info, and method_info structures. The
@@ -1388,10 +1419,7 @@
(declare (ignore code))
(dolist (ann (annotations-list annotations))
(setf (annotation-type ann)
- (pool-add-class (class-file-constants class)
- (if (jvm-class-name-p (annotation-type ann))
- (annotation-type ann)
- (make-jvm-class-name (annotation-type ann)))))
+ (pool-add-class (class-file-constants class) (annotation-type ann)))
(dolist (elem (annotation-elements ann))
(setf (annotation-element-name elem)
(pool-add-utf8 (class-file-constants class)
@@ -1405,7 +1433,9 @@
(write-u2 (annotation-type annotation) stream)
(write-u2 (length (annotation-elements annotation)) stream)
(dolist (elem (reverse (annotation-elements annotation)))
- (funcall (annotation-element-value-writer elem) elem stream))))
+ (write-u2 (annotation-element-name elem) stream)
+ (funcall (annotation-element-value-writer (annotation-element-value elem))
+ (annotation-element-value elem) stream))))
#|
Modified: trunk/abcl/src/org/armedbear/lisp/runtime-class.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/runtime-class.lisp Mon Jan 9 03:31:38 2012 (r13738)
+++ trunk/abcl/src/org/armedbear/lisp/runtime-class.lisp Mon Jan 9 14:55:37 2012 (r13739)
@@ -1,6 +1,9 @@
(require "COMPILER-PASS2")
(require "JVM-CLASS-FILE")
+;;The package is set to :jvm for convenience, since most of the symbols used
+;;here come from that package. However, the functions we're definining belong
+;;to the :java package.
(in-package :jvm)
(defconstant +abcl-java-object+ (make-jvm-class-name "org.armedbear.lisp.JavaObject"))
@@ -138,7 +141,16 @@
:methods (list
(list "foo" :void '("java.lang.Object")
(lambda (this that) (print (list this that)))
- :annotations (list (make-annotation :type "java.lang.Deprecated")))
+ :annotations (list (make-annotation :type "java.lang.Deprecated")
+ (make-annotation :type "java.lang.annotation.Retention"
+ :elements (list (make-annotation-element
+ :value (make-enum-value-annotation-element-value
+ :type "java.lang.annotation.RetentionPolicy"
+ :name "RUNTIME"))))
+ (make-annotation :type "javax.xml.bind.annotation.XmlAttribute"
+ :elements (list (make-annotation-element
+ :name "required"
+ :value (make-primitive-or-string-annotation-element-value :value t))))))
(list "bar" :int '("java.lang.Object")
(lambda (this that) (print (list this that)) 23))))
From mevenson at common-lisp.net Tue Jan 10 08:13:14 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Tue, 10 Jan 2012 00:13:14 -0800
Subject: [armedbear-cvs] r13740 - branches/1.0.x/abcl/src/org/armedbear/lisp
Message-ID:
Author: mevenson
Date: Tue Jan 10 00:13:11 2012
New Revision: 13740
Log:
Push 1.0.1-RC1 version tag.
Modified:
branches/1.0.x/abcl/src/org/armedbear/lisp/Version.java
Modified: branches/1.0.x/abcl/src/org/armedbear/lisp/Version.java
==============================================================================
--- branches/1.0.x/abcl/src/org/armedbear/lisp/Version.java Mon Jan 9 14:55:37 2012 (r13739)
+++ branches/1.0.x/abcl/src/org/armedbear/lisp/Version.java Tue Jan 10 00:13:11 2012 (r13740)
@@ -41,7 +41,7 @@
{
private Version() {}
- static final String baseVersion = "1.0.1-dev";
+ static final String baseVersion = "1.0.1-rc1";
static void init() {
try {
From mevenson at common-lisp.net Tue Jan 10 14:04:25 2012
From: mevenson at common-lisp.net (mevenson at common-lisp.net)
Date: Tue, 10 Jan 2012 06:04:25 -0800
Subject: [armedbear-cvs] r13741 - public_html
Message-ID:
Author: mevenson
Date: Tue Jan 10 06:04:24 2012
New Revision: 13741
Log:
Correct to valid XHTML.
Modified:
public_html/release-notes-0.13.shtml
public_html/release-notes-0.14.shtml
public_html/release-notes-0.15.shtml
public_html/release-notes-0.16.shtml
public_html/release-notes-0.17.shtml
public_html/release-notes-0.18.shtml
public_html/release-notes-0.19.shtml
public_html/release-notes-0.20.shtml
public_html/release-notes-0.21.shtml
public_html/release-notes-0.22.shtml
public_html/release-notes-0.23.shtml
public_html/release-notes-0.24.shtml
public_html/release-notes-0.25.shtml
public_html/release-notes-0.26.shtml
Modified: public_html/release-notes-0.13.shtml
==============================================================================
--- public_html/release-notes-0.13.shtml Tue Jan 10 00:13:11 2012 (r13740)
+++ public_html/release-notes-0.13.shtml Tue Jan 10 06:04:24 2012 (r13741)
@@ -6,7 +6,7 @@
-
Modified: public_html/release-notes-0.14.shtml
==============================================================================
--- public_html/release-notes-0.14.shtml Tue Jan 10 00:13:11 2012 (r13740)
+++ public_html/release-notes-0.14.shtml Tue Jan 10 06:04:24 2012 (r13741)
@@ -6,7 +6,7 @@
-
Modified: public_html/release-notes-0.15.shtml
==============================================================================
--- public_html/release-notes-0.15.shtml Tue Jan 10 00:13:11 2012 (r13740)
+++ public_html/release-notes-0.15.shtml Tue Jan 10 06:04:24 2012 (r13741)
@@ -6,7 +6,7 @@
-
@@ -59,8 +59,7 @@
Fixed special bindings un-binding in compiled code for
MULTIPLE-VALUE-BIND, LET, LET*, PROGV and function bodies
-
-
Special bindings now will get unbound even in case of (non-Lisp)
+
Special bindings now will get unbound even in case of (non-Lisp)
exceptions.
Including a few fixes on how certain objects are printed, a MACROLET bug, and support for JSR-223 with Java 1.5. Consult the CHANGES file distributed with ABCL for more details.
+ Extensive testing and the attendent bug fixing has resulted in
+ substantially improved capabilities vis a vis the ASDF systems
+ distributed with Quicklisp. Most notably
+ trivial-garbage, bordeaux-threads, parenscript, hunchentoot, and
+ cxml now work.
+
+
+
ASDF-2.017.22
+
The ASDF shipped with the distribution has been updated to asdf-2.017.22
The implementation now correctly loads ASDF definitions
+
The implementation now correctly loads ASDF definitions
from jar archives. This had prevented the ABCL-CONTRIB loading
- mechanism from working.
+ mechanism from working.