[cp-patches] FYI: Small additional ClassLoader VM extensibility point

2005-07-25 Thread Jeroen Frijters
Hi,

I committed the attached patch, that allows a VM implementer to hook
Classloader.findLoadedClass.

Regards,
Jeroen

2005-07-25  Jeroen Frijters  [EMAIL PROTECTED]

* java/lang/ClassLoader.java
(findLoadedClass): Call VMClassLoader.findLoadedClass.
* vm/reference/java/lang/VMClassLoader.java
(findLoadedClass): New method.
Index: java/lang/ClassLoader.java
===
RCS file: /cvsroot/classpath/classpath/java/lang/ClassLoader.java,v
retrieving revision 1.52
diff -u -r1.52 ClassLoader.java
--- java/lang/ClassLoader.java  2 Jul 2005 20:32:38 -   1.52
+++ java/lang/ClassLoader.java  25 Jul 2005 09:28:46 -
@@ -556,9 +556,7 @@
*/
   protected final synchronized Class findLoadedClass(String name)
   {
-// NOTE: If the VM is keeping its own cache, it may make sense to have
-// this method be native.
-return (Class) loadedClasses.get(name);
+return VMClassLoader.findLoadedClass(this, name);
   }
 
   /**
Index: vm/reference/java/lang/VMClassLoader.java
===
RCS file: 
/cvsroot/classpath/classpath/vm/reference/java/lang/VMClassLoader.java,v
retrieving revision 1.26
diff -u -r1.26 VMClassLoader.java
--- vm/reference/java/lang/VMClassLoader.java   2 Jul 2005 20:33:08 -   
1.26
+++ vm/reference/java/lang/VMClassLoader.java   25 Jul 2005 09:28:53 -
@@ -282,4 +282,12 @@
   {
 return ClassLoader.defaultGetSystemClassLoader();
   }
+
+  /**
+   * If the VM wants to keep its own cache, this method can be replaced.
+   */
+  static Class findLoadedClass(ClassLoader cl, String name)
+  {
+return (Class) cl.loadedClasses.get(name);
+  }
 }
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


Re: [cp-patches] [generics] Enum#valueOf implementation

2005-07-25 Thread Mark Wielaard
On Mon, 2005-07-25 at 00:33 -0600, Tom Tromey wrote:
  Ewout == Ewout Prangsma [EMAIL PROTECTED] writes:
 
 Ewout Here's the unified diff.  Again my question if someone can
 Ewout commit this, or give me CVS access rights.
 
 It still needs a ChangeLog entry.
 Also the code is not formatted according to the Classpath style.

Here is an example of a correct ChangeLog entry and the patch formatted
as (I also added a little documentation, please check).

2005-07-25  Ewout Prangsma  [EMAIL PROTECTED]

* java/lang/Enum.java (valueOf): implemented.

ChangeLog and Coding style is discussed int he hacking guide:
http://www.gnu.org/software/classpath/docs/hacking.html#SEC6
http://www.gnu.org/software/classpath/docs/hacking.html#SEC8

One question. Will the IllegalAccessException really never be thrown? I
can imagine that the Enum value fields are always public or package
private to java.lang in which case this is true (but I haven't studied
Enums at all). Otherwise we might need a PrivilegedAction that calls
setAccessible(true).

Andrew, could you please take a look and tell me whether it is OK to
commit (compiles, don't have ecj or gcjx installed here) and whether or
not it interferes with you current merging work?

Thanks,

Mark
Index: java/lang/Enum.java
===
RCS file: /cvsroot/classpath/classpath/java/lang/Attic/Enum.java,v
retrieving revision 1.1.2.4
diff -u -r1.1.2.4 Enum.java
--- java/lang/Enum.java	21 Mar 2005 12:10:17 -	1.1.2.4
+++ java/lang/Enum.java	25 Jul 2005 10:37:30 -
@@ -1,5 +1,5 @@
 /* Enum.java - Base class for all enums
-   Copyright (C) 2004 Free Software Foundation
+   Copyright (C) 2004, 2005 Free Software Foundation
 
 This file is part of GNU Classpath.
 
@@ -60,11 +60,32 @@
 this.ordinal = ordinal;
   }
 
+  /**
+   * Returns an Enum for a enum class given a description string of
+   * the enum constant.
+   *
+   * @exception NullPointerException when etype or s are null.
+   * @exception IllegalArgumentException when there is no value s in
+   * the enum etype.
+   */
+  @SuppressWarnings(unchecked)
   public static S extends EnumS Enum valueOf(ClassS etype, String s)
   {
 if (etype == null || s == null)
   throw new NullPointerException();
-return null;		// FIXME
+
+try
+  {
+	return (S) etype.getDeclaredField(s).get(null);
+  }
+catch (NoSuchFieldException exception)
+  {
+	throw new IllegalArgumentException(s);
+  }
+catch (IllegalAccessException exception)
+  {
+	throw new Error(Unable to access Enum class);
+  }
   }
 
   public final boolean equals(Object o)


signature.asc
Description: This is a digitally signed message part
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches] RFC: cleanup in nio native code

2005-07-25 Thread Roman Kennke
While merging some nio code I came upon some strange code in 
gnu_java_nio_channels_FileChannelImpl.c. There is some code that 
initializes the field in, out and err, which I would think would better 
fit in the Java code. I propose the following patch to move this init 
code there. Are there any objections? May I commit this?


2005-07-25  Roman Kennke  [EMAIL PROTECTED]

* gnu/java/nio/channels/FileChannelImpl.java
(static initializer): Init out, err and in here.
* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
(Java_gnu_java_nio_channels_FileChannelImpl_init): Moved init
code
for in, out and err to Java code.

/Roman
Index: gnu/java/nio/channels/FileChannelImpl.java
===
RCS file: 
/cvsroot/classpath/classpath/gnu/java/nio/channels/FileChannelImpl.java,v
retrieving revision 1.15
diff -u -r1.15 FileChannelImpl.java
--- gnu/java/nio/channels/FileChannelImpl.java  11 Jul 2005 17:27:55 -  
1.15
+++ gnu/java/nio/channels/FileChannelImpl.java  25 Jul 2005 10:46:41 -
@@ -73,6 +73,10 @@
   public static final int SYNC   = 16;
   public static final int DSYNC  = 32;
 
+  public static FileChannelImpl in;
+  public static FileChannelImpl out;
+  public static FileChannelImpl err;
+
   private static native void init();
 
   static
@@ -83,6 +87,12 @@
   }
 
 init();
+
+// Replaced native code by simpler, equivalent Java code for
+// readability and analysability.
+in  = new FileChannelImpl(0,READ);
+out = new FileChannelImpl(1,WRITE);
+err = new FileChannelImpl(2,WRITE);
   }
 
   /**
@@ -130,16 +140,20 @@
   }
   }
 
-  /* Used by init() (native code) */
+  /**
+   * Constructor for default channels in, out and err.
+   *
+   * Used by init() (native code).
+   *
+   * @param fd the file descriptor (0, 1, 2 for stdin, stdout, stderr).
+   *
+   * @param mode READ or WRITE
+   */
   FileChannelImpl (int fd, int mode)
   {
 this.fd = fd;
 this.mode = mode;
   }
-
-  public static FileChannelImpl in;
-  public static FileChannelImpl out;
-  public static FileChannelImpl err;
 
   private native int open (String path, int mode) throws FileNotFoundException;
 
Index: native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
===
RCS file: 
/cvsroot/classpath/classpath/native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c,v
retrieving revision 1.19
diff -u -r1.19 gnu_java_nio_channels_FileChannelImpl.c
--- native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 24 Jul 2005 
03:35:58 -  1.19
+++ native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 25 Jul 2005 
10:46:41 -
@@ -136,28 +136,6 @@
 }
 
   native_fd_fieldID = field;
-
-  constructor = (*env)-GetMethodID (env, clazz, init, (II)V);
-  if (!constructor)
-return;
-
-#define INIT_FIELD(FIELDNAME, FDVALUE, MODE)   \
-  field = (*env)-GetStaticFieldID (env, clazz, FIELDNAME, \
-   Lgnu/java/nio/channels/FileChannelImpl;); 
\
-  if (! field) \
-return;\
-  obj = (*env)-NewObject (env, clazz, constructor, FDVALUE, MODE);\
-  if (! obj)   \
-return;\
-  (*env)-SetStaticObjectField (env, clazz, field, obj);   \
-  if ((*env)-ExceptionOccurred (env)) \
-return;
-
-  INIT_FIELD (in, 0, FILECHANNELIMPL_READ);
-  INIT_FIELD (out, 1, FILECHANNELIMPL_WRITE);
-  INIT_FIELD (err, 2, FILECHANNELIMPL_WRITE);
-
-#undef INIT_FIELD
 }
 
 /*
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches] FYI: Update assign faq entry

2005-07-25 Thread Mark Wielaard
Hi,

I got some questions about our contribution requirements so I asked
FSF-legal for a better explanation of the assignment policy to add to
the FAQ explaining that it is a contract with the FSF committing the FSF
to distribute your contribution and derived works under free terms and
that you can get a grant-back for any contribution you made for use in
other projects (even proprietary) if you wish. Here it is.

2005-07-25  Mark Wielaard  [EMAIL PROTECTED]

* doc/www.gnu.org/faq.wml: Expand contribution assign answer.

Committed,

Mark
? doc/www.gnu.org/downloads.diff
? doc/www.gnu.org/escape.patch
? doc/www.gnu.org/gjdoc-home.patch
? doc/www.gnu.org/cp-tools/cp-tools.html
Index: doc/www.gnu.org/faq/faq.wml
===
RCS file: /cvsroot/classpath/classpath/doc/www.gnu.org/faq/faq.wml,v
retrieving revision 1.18
diff -u -r1.18 faq.wml
--- doc/www.gnu.org/faq/faq.wml	4 Jul 2005 14:31:01 -	1.18
+++ doc/www.gnu.org/faq/faq.wml	25 Jul 2005 11:29:16 -
@@ -304,6 +304,28 @@
 not see this as a personal offence.
 
 pGiving the copyright to the FSF also gives us a clear paper trail where changes come from, which confirms our clean-room status.
+/p
+
+p
+The assignment contract commits the foundation to setting distribution terms
+that permit free redistribution.
+/p
+
+p
+The assignment contract we normally use has a clause that permits you to
+use your code in proprietary programs, on 30 days' notice.
+(The 30 days' notice is there because, through a legal technicality,
+it would improve our position in a suit against a hoarder.)
+Although we believe that proprietary software is wrong, we include this
+clause because it would serve no purpose to ask you to promise not to do
+it. You're giving us a gift in the first place.
+/p
+
+p
+You don't need to invoke this clause in order to distribute
+copies as free software under the GNU GPL, since everyone is
+allowed to do that.
+/p
 
 pSee also a href=http://www.gnu.org/licenses/why-assign.html;http://www.gnu.org/licenses/why-assign.html/a.
 /p


signature.asc
Description: This is a digitally signed message part
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches] RFC: RMI Class loader fix

2005-07-25 Thread Jeroen Frijters
Hi,

I'm not an RMI person, but an IKVM user ran into an RMI problem that I
think is caused by a problem in the RMI class loader that the attached
patch should fix.

Please comment.

Regards,
Jeroen

* java/rmi/server/RMIClassLoader.java
(loadClass(String, String)): Use Class.forName() instead of
directly calling ClassLoader.loadClass(), to handle array
types correctly.
Index: java/rmi/server/RMIClassLoader.java
===
RCS file: /cvsroot/classpath/classpath/java/rmi/server/RMIClassLoader.java,v
retrieving revision 1.16
diff -u -r1.16 RMIClassLoader.java
--- java/rmi/server/RMIClassLoader.java 2 Jul 2005 20:32:40 -   1.16
+++ java/rmi/server/RMIClassLoader.java 25 Jul 2005 12:48:48 -
@@ -214,7 +214,7 @@
 //try context class loader first
 try 
   {
-return loader.loadClass (name);
+return Class.forName(name, false, loader);
   }
 catch (ClassNotFoundException e)
   {
@@ -237,7 +237,7 @@
   ) at codebase ( + codebases + ));
   }
   
-return loader.loadClass (name);
+return Class.forName(name, false, loader);
   }
 
   /**
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


Re: [cp-patches] RFC: cleanup in nio native code

2005-07-25 Thread Roman Kennke
Ok, as I was told on IRC, I have committed the attached slightly (only 
comments) changed patch.



2005-07-25  Roman Kennke  [EMAIL PROTECTED]

* gnu/java/nio/channels/FileChannelImpl.java
(static initializer): Init out, err and in here.
* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
(Java_gnu_java_nio_channels_FileChannelImpl_init): Moved init
code
for in, out and err to Java code.



/Roman
Index: gnu/java/nio/channels/FileChannelImpl.java
===
RCS file: 
/cvsroot/classpath/classpath/gnu/java/nio/channels/FileChannelImpl.java,v
retrieving revision 1.15
diff -u -r1.15 FileChannelImpl.java
--- gnu/java/nio/channels/FileChannelImpl.java  11 Jul 2005 17:27:55 -  
1.15
+++ gnu/java/nio/channels/FileChannelImpl.java  25 Jul 2005 13:52:11 -
@@ -73,6 +73,10 @@
   public static final int SYNC   = 16;
   public static final int DSYNC  = 32;
 
+  public static FileChannelImpl in;
+  public static FileChannelImpl out;
+  public static FileChannelImpl err;
+
   private static native void init();
 
   static
@@ -83,6 +87,10 @@
   }
 
 init();
+
+in  = new FileChannelImpl(0,READ);
+out = new FileChannelImpl(1,WRITE);
+err = new FileChannelImpl(2,WRITE);
   }
 
   /**
@@ -130,16 +138,20 @@
   }
   }
 
-  /* Used by init() (native code) */
+  /**
+   * Constructor for default channels in, out and err.
+   *
+   * Used by init() (native code).
+   *
+   * @param fd the file descriptor (0, 1, 2 for stdin, stdout, stderr).
+   *
+   * @param mode READ or WRITE
+   */
   FileChannelImpl (int fd, int mode)
   {
 this.fd = fd;
 this.mode = mode;
   }
-
-  public static FileChannelImpl in;
-  public static FileChannelImpl out;
-  public static FileChannelImpl err;
 
   private native int open (String path, int mode) throws FileNotFoundException;
 
Index: native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
===
RCS file: 
/cvsroot/classpath/classpath/native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c,v
retrieving revision 1.19
diff -u -r1.19 gnu_java_nio_channels_FileChannelImpl.c
--- native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 24 Jul 2005 
03:35:58 -  1.19
+++ native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 25 Jul 2005 
13:52:11 -
@@ -136,28 +136,6 @@
 }
 
   native_fd_fieldID = field;
-
-  constructor = (*env)-GetMethodID (env, clazz, init, (II)V);
-  if (!constructor)
-return;
-
-#define INIT_FIELD(FIELDNAME, FDVALUE, MODE)   \
-  field = (*env)-GetStaticFieldID (env, clazz, FIELDNAME, \
-   Lgnu/java/nio/channels/FileChannelImpl;); 
\
-  if (! field) \
-return;\
-  obj = (*env)-NewObject (env, clazz, constructor, FDVALUE, MODE);\
-  if (! obj)   \
-return;\
-  (*env)-SetStaticObjectField (env, clazz, field, obj);   \
-  if ((*env)-ExceptionOccurred (env)) \
-return;
-
-  INIT_FIELD (in, 0, FILECHANNELIMPL_READ);
-  INIT_FIELD (out, 1, FILECHANNELIMPL_WRITE);
-  INIT_FIELD (err, 2, FILECHANNELIMPL_WRITE);
-
-#undef INIT_FIELD
 }
 
 /*
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches] FYI: Some fixes and optimizations for Container

2005-07-25 Thread Roman Kennke

Hi,

I checked in some fixes and optimizations that I came upon while merging 
with Jamaica's AWT. Most importantly the Lightweightdispatcher has been 
reworked so that it is reentrant, and preferredSize is now working 
optimized, so that it only recalculates the preferredSize if the 
container is invalid.


2005-07-25  Roman Kennke  [EMAIL PROTECTED]

* gnu/java/awt/AWTUtilities.java:
Added methods from SwingUtilities so that AWT does not have to
depend on Swing.
* java/awt/Component.java:
Reverted my DEFAULT_FONT patch from yesterday. This does not
seem to work with the Gtk peers.
* java/awt/Container.java
(addImpl): Call addNotify() on the added child. Invalidate not
only the container but also the added child. Repaint the
container.
(remove): Repaint the container.
(invalidate): Also invalidate the LayoutManager.
(invalidateTree): Call super.invalidate to invalidate the
container itself. Also invalidate the LayoutManager.
(setFont): Only set the font if the specified argument actually
differs from the current font.
(preferredSize): Optimized this method so the LayoutManager is
only called if the layout is invalid. Otherwise we return the
preferred size that has been stored during last
validation/layout.
(getAlignmentX): Despite common belief, this method does _not_
call the LayoutManagers getAlignmentX in the JDK. So we also
don't.
(getAlignmentY): Despite common belief, this method does _not_
call the LayoutManagers getAlignmentX in the JDK. So we also
don't.
(dispatchEventImpl): Let the dispatcher decide if it is enabled
for the incoming event type.
(eventTypeEnabled): Enables only container events for
containers.
(addNotifyContainerChildren): Coalesced two if statements into
one.
Enable events on the dispatcher for this container.
(LightweightDispatcher): Made this class reentrant. Handle
events enabling/disabling here.

/Roman
Index: gnu/java/awt/AWTUtilities.java
===
RCS file: /cvsroot/classpath/classpath/gnu/java/awt/AWTUtilities.java,v
retrieving revision 1.3
diff -u -r1.3 AWTUtilities.java
--- gnu/java/awt/AWTUtilities.java  2 Jul 2005 20:32:10 -   1.3
+++ gnu/java/awt/AWTUtilities.java  25 Jul 2005 13:45:05 -
@@ -1,5 +1,4 @@
-/* AWTUtilities.java -- Common utility methods for AWT and Swing.
-   Copyright (C) 2005  Free Software Foundation, Inc.
+/* Copyright (C) 2004 Free Software Foundation
 
 This file is part of GNU Classpath.
 
@@ -15,8 +14,8 @@
 
 You should have received a copy of the GNU General Public License
 along with GNU Classpath; see the file COPYING.  If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
 
 Linking this library statically or dynamically with other modules is
 making a combined work based on this library.  Thus, the terms and
@@ -34,20 +33,30 @@
 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 gnu.java.awt;
 
+import java.applet.Applet;
 import java.awt.Component;
 import java.awt.Container;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.Window;
+import java.awt.event.MouseEvent;
 import java.util.AbstractSequentialList;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.NoSuchElementException;
 import java.util.WeakHashMap;
+import java.lang.reflect.InvocationTargetException;
 
 /**
- * This class provides utility methods that are commonly used in AWT
- * (and Swing).
+ * This class mirrors the javax.swing.SwingUtilities class. It 
+ * provides commonly needed functionalities for AWT classes without
+ * the need to reference classes in the javax.swing package.
  */
 public class AWTUtilities
 {
@@ -317,5 +326,366 @@
   visibleChildren = (VisibleComponentList) o;
 
 return visibleChildren;
+  }
+
+  /**
+   * Calculates the portion of the base rectangle which is inside the
+   * insets.
+   *
+   * @param base The rectangle to apply the insets to
+   * @param insets The insets to apply to the base rectangle
+   * @param ret A rectangle to use for storing the return value, or
+   * codenull/code
+   *
+   * @return The calculated area inside the base rectangle and its insets,
+   * either stored in ret or a new Rectangle if ret is codenull/code
+   *
+   * @see #calculateInnerArea
+   */
+  public static Rectangle calculateInsetArea(Rectangle base, Insets insets,
+   

[cp-patches] FYI: JTable selectAll fix

2005-07-25 Thread Anthony Balkissoon
This patch ensures selectAll doesn't affect the lead selection indices
for the row or column ListSelectionModel.  Since this is fixed, I also
replaced some direct code in BasicListUI with a call to selectAll.  Also
a small touch-up to make the ENTER key press compatible with the JDK.

Patch attached.

2005-07-25  Anthony Balkissoon  [EMAIL PROTECTED]

* javax/swing/JTable.java:
(selectAll): Store the lead selection indices and restore them after
selecting all cells.
* javax/swing/plaf/basic/BasicTableUI.java:
(KeyHandler.keyPressed): Changed the criteria for only one selection
when the ENTER key is pressed to match the behavior of the JDK.  Also
replaced direct code for CTRL-A with call to JTable.selectAll().

- Tony
Index: javax/swing/JTable.java
===
RCS file: /cvsroot/classpath/classpath/javax/swing/JTable.java,v
retrieving revision 1.35
diff -u -r1.35 JTable.java
--- javax/swing/JTable.java	20 Jul 2005 20:25:08 -	1.35
+++ javax/swing/JTable.java	25 Jul 2005 14:46:07 -
@@ -2070,8 +2070,17 @@
   
   public void selectAll()
   {
+// rowLead and colLead store the current lead selection indices
+int rowLead = selectionModel.getLeadSelectionIndex();
+int colLead = getColumnModel().getSelectionModel().getLeadSelectionIndex();
+// the following calls to setSelectionInterval change the lead selection
+// indices
 setColumnSelectionInterval(0, getColumnCount() - 1);
 setRowSelectionInterval(0, getRowCount() - 1);
+// the following addSelectionInterval calls restore the lead selection
+// indices to their previous values
+addColumnSelectionInterval(colLead,colLead);
+addRowSelectionInterval(rowLead, rowLead);
   }
 
   public Object getValueAt(int row, int column)
Index: javax/swing/plaf/basic/BasicTableUI.java
===
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicTableUI.java,v
retrieving revision 1.14
diff -u -r1.14 BasicTableUI.java
--- javax/swing/plaf/basic/BasicTableUI.java	22 Jul 2005 19:44:35 -	1.14
+++ javax/swing/plaf/basic/BasicTableUI.java	25 Jul 2005 14:46:07 -
@@ -265,12 +265,17 @@
   return;
 }
 
-  // If there is just one cell selected, select the next row, and wrap
+  // If there is just one selection, select the next row, and wrap
   // when you get to the edges of the table.
-  if ((table.getSelectedRowCount() = 1  
-   table.getSelectedColumnCount() = 1)
-  || (table.getRowSelectionAllowed() == false  
-  table.getColumnSelectionAllowed() == false))
+  boolean multRowsSelected, multColsSelected;
+  multRowsSelected = (table.getSelectedRowCount()  1) ||
+(!table.getRowSelectionAllowed()  
+ table.getSelectedColumnCount()  0);
+  multColsSelected = (table.getSelectedColumnCount()  1) ||
+(!table.getColumnSelectionAllowed()  
+ table.getSelectedRowCount()  0);
+  
+  if (!multColsSelected || !multRowsSelected)
 {
   rowModel.setSelectionInterval((rowLead + 1)%(rowMax + 1), 
 (rowLead + 1)%(rowMax + 1));
@@ -350,13 +355,7 @@
   else if ((evt.getKeyCode() == KeyEvent.VK_A || evt.getKeyCode()
 == KeyEvent.VK_SLASH)  evt.isControlDown())
 {
-  rowModel.setSelectionInterval(0, rowMax);
-  colModel.setSelectionInterval(0, colMax);
-  // the next two lines are to restore the lead selection indices to 
-  // their previous values, because select-all operations shouldn't 
-  // change them
-  rowModel.addSelectionInterval(rowLead, rowLead);
-  colModel.addSelectionInterval(colLead, colLead);
+  table.selectAll();
 }
   else if (evt.getKeyCode() == KeyEvent.VK_BACK_SLASH
 evt.isControlDown())
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


RE: [cp-patches] FYI: ClassLoader caching Part 2

2005-07-25 Thread Jeroen Frijters
Mark Wielaard wrote:
 Yes, but unfortunately that doesn't change the byte-code of the
 ClassLoader class. static final primitive (and String) field 
 values are actually inlined into other classes. So you can replace
 VMClassLoader all you want with a version the has VM_USE_CACHE set
 to another value, that won't actually change the ClassLoader code
 paths unless ClassLoader is also recompiled against this new value.
 Really, try it out.

Trust me, I know all this ;-)

 It is an annoying byte code optimization.

It's Java's version of #define.

 So for things that can be different at runtime like the VMClasses
 you unfortunately cannot use static final fields of primitive types.

As long as you build everything from source (with the replaced VM*
classes) it works, but I must admit that I have no clue about how
everyone builds the class library (personally, I don't use any of the
build infrastructure that comes with GNU Classpath).

Regards,
Jeroen




___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


RE: [cp-patches] RFC: RMI Class loader fix

2005-07-25 Thread Jeroen Frijters
Mark Wielaard wrote:
 On Mon, 2005-07-25 at 14:52 +0200, Jeroen Frijters wrote:
  I'm not an RMI person, but an IKVM user ran into an RMI 
 problem that I
  think is caused by a problem in the RMI class loader that 
 the attached
  patch should fix.
  
  Please comment.
 
 I assume this is because the code tries to load an array class and
 forName() allows to specify arrays as type strings, but 
 loadClass() only allows for fully qualified class names? Our
 documentation isn't very clear here. But if that is the case then
 this patch looks good.

Unfortunately the Sun documentation isn't very clear either, but you are
correct that I believe this to be the case. BTW, clearly Class.forName()
allows array types, but ClassLoader.loadClass() isn't very clear and the
Sun implementation does some weird things. Here's an example I tried:

public class test
{
  public static void main(String[] args) throws Exception
  {
System.out.println(test.class.getClassLoader().loadClass(test));
Class.forName([Ltest;);
 
System.out.println(test.class.getClassLoader().loadClass([Ltest;));
  }
}

If you run this on JDK 1.5, the second loadClass succeeds, but if you
comment out the Class.forName(), the second load class fails. On JDK
1.4, the Class.forName() isn't required, but if you comment out the
first loadClass, the second one will fail...

I will commit the RMI fix.

Regards,
Jeroen


___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


Re: [cp-patches] RFC: RMI Class loader fix

2005-07-25 Thread Mark Wielaard
Hi,

On Mon, 2005-07-25 at 14:52 +0200, Jeroen Frijters wrote:
 I'm not an RMI person, but an IKVM user ran into an RMI problem that I
 think is caused by a problem in the RMI class loader that the attached
 patch should fix.
 
 Please comment.

I assume this is because the code tries to load an array class and
forName() allows to specify arrays as type strings, but loadClass() only
allows for fully qualified class names? Our documentation isn't very
clear here. But if that is the case then this patch looks good.

Cheers,

Mark


signature.asc
Description: This is a digitally signed message part
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


RE: [cp-patches] FYI: ClassLoader caching Part 2

2005-07-25 Thread Jeroen Frijters
Jeroen Frijters wrote:
 Mark Wielaard wrote:
  On Mon, 2005-07-25 at 16:29 +0200, Jeroen Frijters wrote:
   I committed the attached patch to complete to ability of the VM to
   bypass the class caching in ClassLoader.
  
   2005-07-25  Jeroen Frijters  [EMAIL PROTECTED]
   
   * java/lang/ClassLoader.java
   (loadedClasses): Set based on VMClassLoader.VM_USE_CACHE.
   (defineClass): Modified to respect 
  VMClassLoader.VM_USE_CACHE.
   * vm/reference/java/lang/VMClassLoader.java
   (VM_USE_CACHE): New field.
  
  This won't work if you make the VM_USE_CACHE field static 
 final. Then
  the constant will be compiled into ClassLoader making it 
 impossible to
  override for the runtime vm-classes later. It has to be a 
  static method for that to work.
 
 Like Archie says, your comment doesn't make sense ;-) If a VM decides
 not to use the cache in ClassLoader, it replaces VMClassLoader and
sets
 the constant to true.

Oh, I'm sorry, I think see what you mean. If a VM would take a binary
GNU Classpath jar, it wouldn't be able to override the value of the
flag.

Is this an important scenario? I thought you long haired types didn't
like binary distributions ;-)

Regards,
Jeroen


___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches] FYI: Container fixlet

2005-07-25 Thread Anthony Balkissoon
This patch fixes a typo in Container.java that was causing an array out
of bounds exception with calls to setFocusedTraversalKeys.

Patch attached.


2005-07-25  Anthony Balkissoon  [EMAIL PROTECTED]

* java/awt/Container.java:
(setFocusTraversalKeys): Instantiate focusTraversalKeys to an array of
size 4, not 3.  This must have been a typo.

- Tony
Index: java/awt/Container.java
===
RCS file: /cvsroot/classpath/classpath/java/awt/Container.java,v
retrieving revision 1.55
diff -u -r1.55 Container.java
--- java/awt/Container.java	25 Jul 2005 14:18:02 -	1.55
+++ java/awt/Container.java	25 Jul 2005 16:31:35 -
@@ -1225,7 +1225,7 @@
   }
 
 if (focusTraversalKeys == null)
-  focusTraversalKeys = new Set[3];
+  focusTraversalKeys = new Set[4];
 
 keystrokes = Collections.unmodifiableSet (new HashSet (keystrokes));
 firePropertyChange (name, focusTraversalKeys[id], keystrokes);
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches] FYI: RMI Class loader fix

2005-07-25 Thread Jeroen Frijters
Hi,

I applied the attached fix.

Regards,
Jeroen

* java/rmi/server/RMIClassLoader.java
(loadClass(String, String)): Use Class.forName() instead of
directly calling ClassLoader.loadClass(), to handle array
types correctly.
Index: java/rmi/server/RMIClassLoader.java
===
RCS file: /cvsroot/classpath/classpath/java/rmi/server/RMIClassLoader.java,v
retrieving revision 1.16
diff -u -r1.16 RMIClassLoader.java
--- java/rmi/server/RMIClassLoader.java 2 Jul 2005 20:32:40 -   1.16
+++ java/rmi/server/RMIClassLoader.java 25 Jul 2005 12:48:48 -
@@ -214,7 +214,7 @@
 //try context class loader first
 try 
   {
-return loader.loadClass (name);
+return Class.forName(name, false, loader);
   }
 catch (ClassNotFoundException e)
   {
@@ -237,7 +237,7 @@
   ) at codebase ( + codebases + ));
   }
   
-return loader.loadClass (name);
+return Class.forName(name, false, loader);
   }
 
   /**
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


Re: [cp-patches] FYI: ClassLoader caching Part 2

2005-07-25 Thread Archie Cobbs

Jeroen Frijters wrote:

Oh, I'm sorry, I think see what you mean. If a VM would take a binary
GNU Classpath jar, it wouldn't be able to override the value of the
flag.

Is this an important scenario? I thought you long haired types didn't
like binary distributions ;-)


OK now I get it too... I call this idea of imposing VM-specific versions
of a class in front of the stock Classpath versions overlaying instead
of overriding to avoid confusion :-)

Yes, I think not breaking overlaying is important.. so a static method
(with comment why being used) would be better.

-Archie

__
Archie Cobbs  *CTO, Awarix*  http://www.awarix.com


___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


Re: [cp-patches] RFC: New JCL helper functions for RawData handling

2005-07-25 Thread Chris Burdess

Guilhem Lavaux wrote:

Ok. Then I will make a set of patches to first use the new common JCL
interface. And then I will rename RawData* to Pointer*. Is it ok ?


Absolutely.
--
Chris Burdess



___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches]: Patch: JTree painting

2005-07-25 Thread Lillian Angel
A fix for the case where there are no icons.

2005-07-25  Lillian Angel  [EMAIL PROTECTED]

* javax/swing/plaf/basic/BasicTreeUI.java
(paint): moved code to paintNode
(getCellBounds): width increased, slightly short before
(paintNode): changed to paint node depending if icons exist

? examples/gnu/classpath/examples/swing/Demo$1.class
? examples/gnu/classpath/examples/swing/Demo$10.class
? examples/gnu/classpath/examples/swing/Demo$11.class
? examples/gnu/classpath/examples/swing/Demo$2.class
? examples/gnu/classpath/examples/swing/Demo$3.class
? examples/gnu/classpath/examples/swing/Demo$4.class
? examples/gnu/classpath/examples/swing/Demo$5.class
? examples/gnu/classpath/examples/swing/Demo$6.class
? examples/gnu/classpath/examples/swing/Demo$7.class
? examples/gnu/classpath/examples/swing/Demo$8.class
? examples/gnu/classpath/examples/swing/Demo$9.class
? examples/gnu/classpath/examples/swing/Demo$CheckCellRenderer.class
? examples/gnu/classpath/examples/swing/Demo$LabelCellRenderer.class
? examples/gnu/classpath/examples/swing/Demo$LaterMain.class
? examples/gnu/classpath/examples/swing/Demo$PopUpAction.class
? examples/gnu/classpath/examples/swing/Demo.class
? examples/gnu/classpath/examples/swing/GNULookAndFeel.class
Index: examples/gnu/classpath/examples/swing/Demo.java
===
RCS file: /cvsroot/classpath/classpath/examples/gnu/classpath/examples/swing/Demo.java,v
retrieving revision 1.16
diff -u -r1.16 Demo.java
--- examples/gnu/classpath/examples/swing/Demo.java	21 Jul 2005 14:13:36 -	1.16
+++ examples/gnu/classpath/examples/swing/Demo.java	25 Jul 2005 17:35:03 -
@@ -70,7 +70,7 @@
   Look and Feel notice,
   JOptionPane.INFORMATION_MESSAGE);
 
-UIManager.setLookAndFeel(new GNULookAndFeel());
+UIManager.setLookAndFeel(new MetalLookAndFeel());
   }
   }
 catch (UnsupportedLookAndFeelException e)
Index: javax/swing/plaf/basic/BasicIconFactory.java
===
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicIconFactory.java,v
retrieving revision 1.10
diff -u -r1.10 BasicIconFactory.java
--- javax/swing/plaf/basic/BasicIconFactory.java	21 Jul 2005 12:07:06 -	1.10
+++ javax/swing/plaf/basic/BasicIconFactory.java	25 Jul 2005 17:35:04 -
@@ -113,7 +113,7 @@
   // The icon is empty and needs no painting.
 }
   }
-
+  
   /**
* The icon used for RadioButtons in the BasicLookAndFeel. This is an empty
* icon with a size of 13x13 pixels.
@@ -163,7 +163,7 @@
 
   /** The cached CheckBoxIcon instance. */
   private static RadioButtonIcon radioButtonIcon;
-
+ 
   public static Icon getMenuItemCheckIcon()
   {
 return new DummyIcon();
@@ -217,7 +217,7 @@
   checkBoxIcon = new CheckBoxIcon();
 return checkBoxIcon;
   }
-
+ 
   /**
* Returns an icon for RadioButtons in the BasicLookAndFeel. RadioButton
* icons in the Basic Lamp;F are empty and have a size of 13x13 pixels.
Index: javax/swing/plaf/basic/BasicLookAndFeel.java
===
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java,v
retrieving revision 1.40
diff -u -r1.40 BasicLookAndFeel.java
--- javax/swing/plaf/basic/BasicLookAndFeel.java	22 Jul 2005 16:45:07 -	1.40
+++ javax/swing/plaf/basic/BasicLookAndFeel.java	25 Jul 2005 17:35:04 -
@@ -1013,8 +1013,6 @@
   }),
   Tree.background, new ColorUIResource(light),
   Tree.changeSelectionWithFocus, Boolean.TRUE,
-//  Tree.closedIcon, new IconUIResource(new ImageIcon(icons/TreeClosed.png)),
-//  Tree.collapsedIcon, new IconUIResource(new ImageIcon(icons/TreeCollapsed.png)),
   Tree.drawsFocusBorderAroundIcon, Boolean.FALSE,
   Tree.editorBorder, new BorderUIResource.LineBorderUIResource(Color.lightGray),
   Tree.focusInputMap, new UIDefaults.LazyInputMap(new Object[] {
Index: javax/swing/plaf/basic/BasicTreeUI.java
===
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicTreeUI.java,v
retrieving revision 1.47
diff -u -r1.47 BasicTreeUI.java
--- javax/swing/plaf/basic/BasicTreeUI.java	22 Jul 2005 08:36:52 -	1.47
+++ javax/swing/plaf/basic/BasicTreeUI.java	25 Jul 2005 17:35:04 -
@@ -1240,16 +1240,6 @@
   
   if (hasControlIcons())
  paintControlIcons(g, 0, 0, 0, 0, tree, mod, root);
-  
-  TreePath lead = tree.getLeadSelectionPath();
-  if (lead != null  tree.isPathSelected(lead))
-  {
- Rectangle cell = getPathBounds(tree, lead);  
- g.setColor(UIManager.getLookAndFeelDefaults().getColor(
-   Tree.selectionBorderColor));
- g.drawRect(cell.x + rightChildIndent - 4, cell.y, 
-   

[cp-patches] Patch: FYI: Properties fixlet

2005-07-25 Thread Tom Tromey
I'm checking this in.  This fixes a bug in Properties.load that was
found with FindBugs.

Tom

Index: ChangeLog
from  Tom Tromey  [EMAIL PROTECTED]

* java/util/Properties.java (load): Handle case where backslash
appears at EOF when reading the key.  PR classpath/22994.

Index: java/util/Properties.java
===
RCS file: /cvsroot/classpath/classpath/java/util/Properties.java,v
retrieving revision 1.29
diff -u -r1.29 Properties.java
--- java/util/Properties.java 5 Jul 2005 10:28:03 - 1.29
+++ java/util/Properties.java 25 Jul 2005 17:27:22 -
@@ -209,8 +209,12 @@
   {
 if (pos == line.length())
   {
-// The line continues on the next line.
+// The line continues on the next line.  If there
+// is no next line, just treat it as a key with an
+// empty value.
 line = reader.readLine();
+   if (line == null)
+ line = ;
 pos = 0;
 while (pos  line.length()
 Character.isWhitespace(c = line.charAt(pos)))


___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


Re: [cp-patches]: Patch: JTree painting

2005-07-25 Thread Lillian Angel
Done it again!
heres the correct patch.

On Mon, 2005-07-25 at 13:39 -0400, Lillian Angel wrote:
 A fix for the case where there are no icons.
 
 2005-07-25  Lillian Angel  [EMAIL PROTECTED]
 
 * javax/swing/plaf/basic/BasicTreeUI.java
 (paint): moved code to paintNode
 (getCellBounds): width increased, slightly short before
 (paintNode): changed to paint node depending if icons exist
 
 ___
 Classpath-patches mailing list
 Classpath-patches@gnu.org
 http://lists.gnu.org/mailman/listinfo/classpath-patches
Index: javax/swing/plaf/basic/BasicTreeUI.java
===
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicTreeUI.java,v
retrieving revision 1.47
diff -u -r1.47 BasicTreeUI.java
--- javax/swing/plaf/basic/BasicTreeUI.java	22 Jul 2005 08:36:52 -	1.47
+++ javax/swing/plaf/basic/BasicTreeUI.java	25 Jul 2005 17:35:04 -
@@ -1240,16 +1240,6 @@
   
   if (hasControlIcons())
  paintControlIcons(g, 0, 0, 0, 0, tree, mod, root);
-  
-  TreePath lead = tree.getLeadSelectionPath();
-  if (lead != null  tree.isPathSelected(lead))
-  {
- Rectangle cell = getPathBounds(tree, lead);  
- g.setColor(UIManager.getLookAndFeelDefaults().getColor(
-   Tree.selectionBorderColor));
- g.drawRect(cell.x + rightChildIndent - 4, cell.y, 
-   cell.width + 4, cell.height);
-  }
}
 
/**
@@ -1928,7 +1918,7 @@
 boolean cntlClick = false;
 Rectangle bounds = BasicTreeUI.this.getPathBounds(
   BasicTreeUI.this.tree, path);
-// include icon
+
 bounds.x -= rightChildIndent - 4;
 bounds.width += rightChildIndent + 4;
 
@@ -2517,7 +2507,7 @@
  Font f = tree.getFont();
  FontMetrics fm = tree.getToolkit().getFontMetrics(tree.getFont());
 
- return new Rectangle(x, y, SwingUtilities.computeStringWidth(fm, s),
+ return new Rectangle(x, y, SwingUtilities.computeStringWidth(fm, s) + 4,
fm.getHeight());
   }
   return null;
@@ -2581,7 +2571,8 @@
   TreePath curr = new TreePath(((DefaultMutableTreeNode) node).getPath());
   boolean selected = tree.isPathSelected(curr);
   boolean expanded = false;
-
+  boolean hasIcons = false;
+  
   if (tree.isVisible(curr))
   {
  DefaultTreeCellRenderer dtcr = (DefaultTreeCellRenderer) tree
@@ -2589,21 +2580,46 @@
 
  if (!isLeaf)
 expanded = tree.isExpanded(curr);
-
+ 
+ Icon icon = null;
+ if (!isLeaf  expanded)
+icon = dtcr.getOpenIcon();
+ else if (!isLeaf  !expanded)
+icon = dtcr.getClosedIcon();
+ else
+icon = dtcr.getLeafIcon();
+ 
+ if (icon.getIconHeight()  -1  icon.getIconWidth()  -1)
+hasIcons = true;
+ 
  Component c = dtcr.getTreeCellRendererComponent(tree, node, selected,
expanded, isLeaf, 0, false);
 
- if (selected)
+ if (hasIcons)
  {
-Rectangle cell = getPathBounds(tree, curr);
-g.setColor(dtcr.getBackgroundSelectionColor());
-g.fillRect(cell.x + rightChildIndent - 4, cell.y, cell.width + 4,
-  cell.height);
+if (selected)
+{
+   Rectangle cell = getPathBounds(tree, curr);
+   g.setColor(dtcr.getBackgroundSelectionColor());
+   g.fillRect(cell.x + icon.getIconWidth()/2, cell.y, cell.width,
+ cell.height);
+   
+   if (curr.equals(tree.getLeadSelectionPath()))
+   {
+  g.setColor(UIManager.getLookAndFeelDefaults().getColor(
+Tree.selectionBorderColor));
+  g.drawRect(cell.x + icon.getIconWidth()/2, cell.y, 
+cell.width, cell.height);
+   }
+}
+   
+g.translate(x, y);
+c.paint(g);
+g.translate(-x, -y);
  }
-
- g.translate(x, y);
- c.paint(g);
- g.translate(-x, -y);
+ else 
+rendererPane.paintComponent(g, c, c.getParent(), 
+  getCellBounds(x, y, node));
   }
}
 
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


Re: [cp-patches] RFC: RMI Class loader fix

2005-07-25 Thread Tom Tromey
 Jeroen == Jeroen Frijters [EMAIL PROTECTED] writes:

Jeroen * java/rmi/server/RMIClassLoader.java
Jeroen (loadClass(String, String)): Use Class.forName() instead of
Jeroen directly calling ClassLoader.loadClass(), to handle array
Jeroen types correctly.

Andrew, didn't we run into code that expected ClassLoader.loadClass
to handle array signatures?

Tom


___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


Re: [cp-patches] FYI: Some fixes and optimizations for Container

2005-07-25 Thread Tom Tromey
 Roman == Roman Kennke [EMAIL PROTECTED] writes:

Roman (getAlignmentX): Despite common belief, this method does _not_
Roman call the LayoutManagers getAlignmentX in the JDK. So we also
Roman  don't.

Information like this should be in comments in the code, not in the
ChangeLog entry.  Generally speaking the ChangeLog should describe
what was done and the code should explain why.

Tom


___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches] rmic error handling

2005-07-25 Thread Archit Shah
Attached is a patch to the cp-tools rmic that centralizes calls to 
System.exit and makes handling of exceptions and error conditions more 
uniform.


With the patch, rmic (built with libgcj-3.3.3-7 on FC2) passes the mauve 
rmic tests.


 -- Archit Shah
Index: src/gnu/classpath/tools/rmi/rmic/RMIC.java
===
RCS file: /cvsroot/classpath/cp-tools/src/gnu/classpath/tools/rmi/rmic/RMIC.java,v
retrieving revision 1.2
diff -u -r1.2 RMIC.java
--- src/gnu/classpath/tools/rmi/rmic/RMIC.java	5 Jul 2005 18:11:36 -	1.2
+++ src/gnu/classpath/tools/rmi/rmic/RMIC.java	25 Jul 2005 18:21:50 -
@@ -1,4 +1,4 @@
-/* ASMRMIC.java --
+/* RMIC.java --
Copyright (c) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
 
@@ -65,7 +65,7 @@
 {
   private String[] args;
   private int next;
-  private Exception exception;
+  private List errors = new ArrayList();
   private boolean keep = false;
   private boolean need11Stubs = true;
   private boolean need12Stubs = true;
@@ -97,40 +97,66 @@
 
   public static void main(String[] args)
   {
+if (rmic(args))
+  System.exit(0);
+else
+  System.exit(1);
+  }
+
+  /**
+   * @return true if compilation was successful
+   */
+  public static boolean rmic(String[] args)
+  {
 RMIC r = new RMIC(args);
-if (r.run() == false)
-  {
-	Exception e = r.getException();
-	if (e != null)
-	  e.printStackTrace();
-	else
-	  System.exit(1);
-  }
+return r.run();
   }
 
-  public boolean run()
+  /**
+   * @return true if run was successful
+   */
+  private boolean run()
   {
-parseOptions();
+boolean done = parseOptions();
+if (done)
+  return errorCount == 0;
+
 if (next = args.length)
-  error(no class names found);
+  {
+usage();
+return false;
+  }
+
 for (int i = next; i  args.length; i++)
   {
 	try
 	  {
-	if (verbose)
+if (verbose)
 	  System.out.println([Processing class  + args[i] + .class]);
 	processClass(args[i].replace(File.separatorChar, '.'));
 	  }
-	catch (Exception e)
-	  {
-	exception = e;
-	return (false);
-	  }
+catch (IOException e)
+  {
+errors.add(e);
+  }
+catch (RMICException e)
+  {
+errors.add(e);
+  }
   }
-return (true);
+if (errors.size()  0)
+  {
+for (Iterator it = errors.iterator(); it.hasNext(); )
+  {
+Exception ex = (Exception) it.next();
+logError(ex);
+  }
+  }
+
+return errorCount == 0;
   }
 
-  private boolean processClass(String cls) throws Exception
+  private void processClass(String cls) throws IOException, RMICException
   {
 // reset class specific vars
 clazz = null;
@@ -142,18 +168,14 @@
 skelname = null;
 mRemoteInterfaces = new ArrayList();
 
-errorCount = 0;
-
 analyzeClass(cls);
-if (errorCount  0)
-  System.exit(1);
 generateStub();
 if (need11Stubs)
   generateSkel();
-return (true);
   }
 
-  private void analyzeClass(String cname) throws Exception
+  private void analyzeClass(String cname)
+throws RMICException
   {
 if (verbose)
   System.out.println([analyze class  + cname + ]);
@@ -168,35 +190,35 @@
 findRemoteMethods();
   }
 
+  /**
+   * @deprecated
+   */
   public Exception getException()
   {
-return (exception);
+return errors.size() == 0 ? null : (Exception) errors.get(0);
   }
 
   private void findClass()
+throws RMICException
   {
+ClassLoader cl = (loader == null
+  ? ClassLoader.getSystemClassLoader()
+  : loader);
 try
   {
-ClassLoader cl = (loader == null
-  ? ClassLoader.getSystemClassLoader()
-  : loader);
 clazz = Class.forName(fullclassname, false, cl);
   }
 catch (ClassNotFoundException cnfe)
   {
-System.err.println(fullclassname +  not found in  + classpath);
-throw new RuntimeException(cnfe);
+throw new RMICException
+  (Class  + fullclassname +  not found in classpath, cnfe);
   }
 
 if (! Remote.class.isAssignableFrom(clazz))
   {
-logError(Class  + clazz.getName() +  is not a remote object. 
- + It does not implement an interface that is a 
- + java.rmi.Remote-interface.);
-throw new RuntimeException
-  (Class  + clazz.getName() +  is not a remote object. 
-   + It does not implement an interface that is a 
-   + java.rmi.Remote-interface.);
+throw new RMICException
+  (Class  + clazz.getName()
+   +  does not implement a remote interface.);
   }
   }
 
@@ -412,7 +434,8 @@
   }
   }
 
-  private void generateStub() throws IOException
+  private void generateStub()
+throws IOException
   {
 

RE: [cp-patches] FYI: ClassLoader caching Part 2

2005-07-25 Thread Aaron Luchko
On Mon, 2005-07-25 at 18:20 +0200, Mark Wielaard wrote:
 On Mon, 2005-07-25 at 17:55 +0200, Jeroen Frijters wrote:
   This won't work if you make the VM_USE_CACHE field static final. Then
   the constant will be compiled into ClassLoader making it impossible to
   override for the runtime vm-classes later. It has to be a 
   static method for that to work.
  
  Like Archie says, your comment doesn't make sense ;-) If a VM decides
  not to use the cache in ClassLoader, it replaces VMClassLoader and sets
  the constant to true.
 
 Yes, but unfortunately that doesn't change the byte-code of the
 ClassLoader class. static final primitive (and String) field values are
 actually inlined into other classes. So you can replace VMClassLoader
 all you want with a version the has VM_USE_CACHE set to another value,
 that won't actually change the ClassLoader code paths unless ClassLoader
 is also recompiled against this new value. Really, try it out. It is an
 annoying byte code optimization. So for things that can be different at
 runtime like the VMClasses you unfortunately cannot use static final
 fields of primitive types.
 
  I haven't looked at jdwp yet, but hopefully jdwp will provide its own
  VM interface instead of messing around with the internals of other
  classes.
 
 Yeah that would be the clean way to do it indeed.

Well if it were decided to have some minor changes to allow VM re-use
this is pretty much how I would alter ClassLoader.

We're not ready to use it anyways but I'll put it out there so people
know what would be required.

Aaron
Index: java/lang/ClassLoader.java
===
RCS file: /cvsroot/classpath/classpath/java/lang/ClassLoader.java,v
retrieving revision 1.54
diff -u -p -r1.54 ClassLoader.java
--- java/lang/ClassLoader.java	25 Jul 2005 14:28:42 -	1.54
+++ java/lang/ClassLoader.java	25 Jul 2005 18:37:38 -
@@ -40,6 +40,7 @@ package java.lang;
 
 import gnu.classpath.SystemProperties;
 import gnu.classpath.VMStackWalker;
+import gnu.classpath.jdwp.Jdwp;
 import gnu.java.util.DoubleEnumeration;
 import gnu.java.util.EmptyEnumeration;
 
@@ -152,6 +153,14 @@ public abstract class ClassLoader
*/
   private final boolean initialized;
 
+  /**
+   * This list is kept around for JDWP. We need a way to know every class
+   * that this ClassLoader has been asked to load, thus they will be added
+   * here. There's no need to do anything else, JDWP is able to sniff out
+   * private fields so we'll just sniff this field as well!  
+   */
+  final ArrayList loadRequests = new ArrayList();
+
   static class StaticData
   {
 /**
@@ -333,23 +342,25 @@ public abstract class ClassLoader
 	  {
 	if (parent == null)
 	  {
-		c = VMClassLoader.loadClass(name, resolve);
-		if (c != null)
-		  return c;
-	  }
-	else
-	  {
-		return parent.loadClass(name, resolve);
-	  }
-	  }
-	catch (ClassNotFoundException e)
-	  {
-	  }
-	// Still not found, we have to do it ourself.
-	c = findClass(name);
+			c = VMClassLoader.loadClass(name, resolve);
+  }
+else
+  {
+   		c =  parent.loadClass(name, resolve);
+  }
+   }
+   catch (ClassNotFoundException e)
+ {
+ }
+  // Still not found, we have to do it ourself.
+  if (c == null)
+c = findClass(name);
   }
+}
 if (resolve)
   resolveClass(c);
+if (Jdwp.isDebugging)
+  loadRequests.add(c);
 return c;
   }
 
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches] Patch: FYI: fix PR classpath/22986

2005-07-25 Thread Tom Tromey
I'm checking this in.

FindBugs pointed out that we were using equals() to compare arrays.
In this case, this is incorrect, and we want Arrays.equals().

Tom

Index: ChangeLog
from  Tom Tromey  [EMAIL PROTECTED]
* java/text/CollationKey.java (equals): Use Arrays.equals.
PR classpath/22986.

Index: java/text/CollationKey.java
===
RCS file: /cvsroot/classpath/classpath/java/text/CollationKey.java,v
retrieving revision 1.15
diff -u -r1.15 CollationKey.java
--- java/text/CollationKey.java 23 Jul 2005 20:25:15 - 1.15
+++ java/text/CollationKey.java 25 Jul 2005 18:26:23 -
@@ -38,6 +38,8 @@
 
 package java.text;
 
+import java.util.Arrays;
+
 /* Written using Java Class Libraries, 2nd edition, plus online
  * API docs for JDK 1.2 from http://www.javasoft.com.
  * Status: Believed complete and correct.
@@ -154,7 +156,7 @@
 if (!ck.getSourceString ().equals (getSourceString ()))
   return false;
 
-if (!ck.toByteArray ().equals (toByteArray ()))
+if (! Arrays.equals (ck.toByteArray (), toByteArray ()))
   return false;
 
 return true;


___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


Re: [cp-patches] FYI: Some fixes and optimizations for Container

2005-07-25 Thread Roman Kennke

Hi,


-/* AWTUtilities.java -- Common utility methods for AWT and Swing.
-   Copyright (C) 2005  Free Software Foundation, Inc.
+/* Copyright (C) 2004 Free Software Foundation



Don't do that.


sorry, I simply copied over the file (from our repo). I will take more 
care in the future. I'll fix this tomorrow.



-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.



Please keep the new address in place everywhere.


See above.


+  public static Rectangle calculateInsetArea(Rectangle base, Insets
insets,
+
Rectangle ret)



This looks strange, did you forget a return here?
There are a couple of similar things like this in the patch.


Now I was confused. I thought you meant a missing return statement which 
would have been rejected by the compiler. I see you mean the bad 
formatting. I will go over this file and fix everything tomorrow. Sorry 
for this crap.


/Roman


___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


RE: [cp-patches] FYI: ClassLoader caching Part 2

2005-07-25 Thread Mark Wielaard
Hi Jeroen,

On Mon, 2005-07-25 at 18:17 +0200, Jeroen Frijters wrote:
 Is this an important scenario? I thought you long haired types didn't
 like binary distributions ;-)

He he. Sure we don't. But if you follow the harmony effort of the
cleanly shaved apache types you will have noticed that they might
actually be paranoid enough to not look at or use something that comes
with source code :)

But I do care about binary installations!
I have here two runtimes (jamvm and kissme) who both use the same GNU
Classpath installation, but both overlay the VM classes differently. I
would actually like that to be true for some of the others I have
installed here too.

Cheers,

Mark


signature.asc
Description: This is a digitally signed message part
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


Re: [cp-patches] RFC: New JCL helper functions for RawData handling

2005-07-25 Thread Mark Wielaard
Hi,

On Mon, 2005-07-25 at 19:21 +0200, Guilhem Lavaux wrote:
 Ok. Then I will make a set of patches to first use the new common JCL
 interface. And then I will rename RawData* to Pointer*. Is it ok ?

Yes please.
And for extra bonus points you could add a little thing to the Hacker
Guide about using these new JCL functions!

Cheers,

Mark


signature.asc
Description: This is a digitally signed message part
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches] FYI: BasicTableUI TAB, SHIFT-TAB, and SHIFT-ENTER

2005-07-25 Thread Anthony Balkissoon
This patch implements TAB, SHIFT-TAB, and SHIFT-ENTER key actions and
merges them with the code for the ENTER action because of the
similarities.

Note that you won't be able to test the TAB or SHIFT-TAB unless you also
apply the Hack.diff patch because JTable currently uses TABs to change
focus.  This is incorrect and will be fixed separately, but applying the
small Hack.diff will allow you to see the implemented key actions.

Patch attached.


2005-07-25  Anthony Balkissoon  [EMAIL PROTECTED]

* javax/swing/plaf/basic/BasicTableUI.java:
(KeyHandler.advanceSingleSelection): New method.  Helper method for 
ENTER, SHIFT-ENTER, TAB, and SHIFT-TAB key events.
(KeyHandler.advanceMultipleSelection): Likewise, used when the table
has multiple selections at the time that ENTER or TAB was pressed.
(KeyHandler.keyPressed): Implemented TAB, SHIFT-TAB, and SHIFT-ENTER
and merged these with existing code for ENTER event, because of the
similarites.
Index: javax/swing/plaf/basic/BasicTableUI.java
===
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicTableUI.java,v
retrieving revision 1.15
diff -u -r1.15 BasicTableUI.java
--- javax/swing/plaf/basic/BasicTableUI.java	25 Jul 2005 14:48:53 -	1.15
+++ javax/swing/plaf/basic/BasicTableUI.java	25 Jul 2005 19:50:44 -
@@ -97,6 +97,171 @@
 
   class KeyHandler implements KeyListener
   {
+
+/**
+ * A helper method for the keyPressed event.  Used because the actions
+ * for TAB, SHIFT-TAB, ENTER, and SHIFT-ENTER are very similar.
+ *
+ * Selects the next (previous if SHIFT pressed) column for TAB, or row for
+ * ENTER from within the currently selected cells.
+ *
+ * @param firstModel the ListSelectionModel for columns (TAB) or
+ * rows (ENTER)
+ * @param firstMin the first selected index in firstModel
+ * @param firstMax the last selected index in firstModel
+ * @param secondModel the ListSelectionModel for rows (TAB) or 
+ * columns (ENTER)
+ * @param secondMin the first selected index in secondModel
+ * @param secondMax the last selected index in secondModel
+ * @param reverse true if shift was held for the event
+ * @param eventIsTab true if TAB was pressed, false if ENTER pressed
+ */
+void advanceMultipleSelection (ListSelectionModel firstModel, int firstMin,
+   int firstMax, ListSelectionModel secondModel, 
+   int secondMin, int secondMax, boolean reverse,
+   boolean eventIsTab)
+{
+  // If eventIsTab, all the firsts correspond to columns, otherwise, to rows
+  // seconds correspond to the opposite
+  int firstLead = firstModel.getLeadSelectionIndex();
+  int secondLead = secondModel.getLeadSelectionIndex();
+  int numFirsts = eventIsTab ? 
+table.getModel().getColumnCount() : table.getModel().getRowCount();
+  int numSeconds = eventIsTab ? 
+table.getModel().getRowCount() : table.getModel().getColumnCount();
+
+  // check if we have to wrap the firsts around, going to the other side
+  if ((firstLead == firstMax  !reverse) || 
+  (reverse  firstLead == firstMin))
+{
+  firstModel.addSelectionInterval(reverse ? firstMax : firstMin, 
+  reverse ? firstMax : firstMin);
+  
+  // check if we have to wrap the seconds
+  if ((secondLead == secondMax  !reverse) || 
+  (reverse  secondLead == secondMin))
+secondModel.addSelectionInterval(reverse ? secondMax : secondMin, 
+ reverse ? secondMax : secondMin);
+
+  // if we're not wrapping the seconds, we have to find out where we
+  // are within the secondModel and advance to the next cell (or 
+  // go back to the previous cell if reverse == true)
+  else
+{
+  int[] secondsSelected;
+  if (eventIsTab  table.getRowSelectionAllowed() || 
+  !eventIsTab  table.getColumnSelectionAllowed())
+secondsSelected = eventIsTab ? 
+  table.getSelectedRows() : table.getSelectedColumns();
+  else
+{
+  // if row selection is not allowed, then the entire column gets
+  // selected when you click on it, so consider ALL rows selected
+  secondsSelected = new int[numSeconds];
+  for (int i = 0; i  numSeconds; i++)
+  secondsSelected[i] = i;
+}
+
+  // and now find the next index within the model
+  int secondIndex = reverse ? secondsSelected.length - 1 : 0;
+  if (!reverse)
+while (secondsSelected[secondIndex] = secondLead)
+  secondIndex++;
+  else
+

[cp-patches] [patch] examples README

2005-07-25 Thread Andreas Tobler

Hi all,

a little patchlet for the README in the examples directory.
Ok?

Andreas

2005-07-25  Andreas Tobler  [EMAIL PROTECTED]

* examples/README: Add GNULookAndFeel.java to the compile command.

Index: README
===
RCS file: /cvsroot/classpath/classpath/examples/README,v
retrieving revision 1.3
diff -u -r1.3 README
--- README  2 Jul 2005 20:32:08 -   1.3
+++ README  25 Jul 2005 20:12:26 -
@@ -7,7 +7,8 @@
 The examples can be compiled and run with gcj as follows:

   gcj -o swingdemo --main=gnu.classpath.examples.swing.Demo \
-  gnu/classpath/examples/swing/Demo.java
+  gnu/classpath/examples/swing/Demo.java \
+  gnu/classpath/examples/swing/GNULookAndFeel.java
   ./swingdemo

 Or with a traditional byte code interpreter like:


___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


[cp-patches] [patch] fix memory image source handling in GTK peers

2005-07-25 Thread Thomas Fitzsimmons
Hi,

This patch does three things:

- implements GtkComponentPeer.repaint timed repaints properly
- implements GtkComponentPeer.updateCursorImmediately
- fixes handling of memory image sources in GtkImageConsumer

I committed this to mainline.  This patch gets the Cortado applet closer
to working out-of-the-box on GNU Classpath.

Tom

2005-07-25  Thomas Fitzsimmons  [EMAIL PROTECTED]

* gnu/java/awt/peer/gtk/GtkComponentPeer.java (repaint): Implement
timed repaint.
(updateCursorImmediately): Implement.
(RepaintTimerTask): New class.
* gnu/java/awt/peer/gtk/GtkImageConsumer.java (imageComplete):
Don't remove consumer if source is a MemoryImageSource.

Index: gnu/java/awt/peer/gtk/GtkComponentPeer.java
===
RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkComponentPeer.java,v
retrieving revision 1.88
diff -u -r1.88 GtkComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkComponentPeer.java	14 Jul 2005 22:07:02 -	1.88
+++ gnu/java/awt/peer/gtk/GtkComponentPeer.java	26 Jul 2005 01:50:52 -
@@ -70,6 +70,8 @@
 import java.awt.image.ImageProducer;
 import java.awt.image.VolatileImage;
 import java.awt.peer.ComponentPeer;
+import java.util.Timer;
+import java.util.TimerTask;
 
 public class GtkComponentPeer extends GtkGenericPeer
   implements ComponentPeer
@@ -372,8 +374,28 @@
 if (x == 0  y == 0  width == 0  height == 0)
   return;
 
-q().postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
- new Rectangle (x, y, width, height)));
+Timer t = new Timer();
+
+t.schedule(new RepaintTimerTask(x, y, width, height), tm);
+  }
+
+  private class RepaintTimerTask extends TimerTask
+  {
+private int x, y, width, height;
+
+RepaintTimerTask(int x, int y, int width, int height)
+{
+  this.x = x;
+  this.y = y;
+  this.width = width;
+  this.height = height;
+}
+
+public void run()
+{
+  q().postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
+ new Rectangle (x, y, width, height)));
+}
   }
 
   public void requestFocus ()
@@ -586,7 +608,8 @@
 
   public void updateCursorImmediately ()
   {
-
+if (awtComponent.getCursor() != null)
+  setCursor(awtComponent.getCursor());
   }
 
   public boolean handlesWheelScrolling ()
Index: gnu/java/awt/peer/gtk/GtkImageConsumer.java
===
RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkImageConsumer.java,v
retrieving revision 1.3
diff -u -r1.3 GtkImageConsumer.java
--- gnu/java/awt/peer/gtk/GtkImageConsumer.java	2 Jul 2005 20:32:12 -	1.3
+++ gnu/java/awt/peer/gtk/GtkImageConsumer.java	26 Jul 2005 01:50:52 -
@@ -45,6 +45,7 @@
 import java.awt.image.ImageConsumer;
 import java.awt.image.ImageObserver;
 import java.awt.image.ImageProducer;
+import java.awt.image.MemoryImageSource;
 import java.util.Hashtable;
 import java.util.Vector;
 
@@ -70,7 +71,10 @@
 
   public synchronized void imageComplete (int status)
   {
-source.removeConsumer(this);
+// we need to reuse the pixel cache for memory image sources since
+// a memory image's backing array can be updated live.
+if (!(source instanceof MemoryImageSource))
+  source.removeConsumer(this);
 target.setImage(width, height, pixelCache, properties);
   }
 
___
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches


RE: ClasspathToolkit redesign.

2005-07-25 Thread Jeroen Frijters
Sven de Marothy wrote:
 Ok, I've been looking into the issue of our AWT peer 
 interface now that I've been running my peers on Classpath
 in earnest.
 
 The goal here is to try to bring our peer interface as close to Sun's
 as possible. And simplify things for potential peer-authors.

[...]

 Summary: So, my opinion: Keep most of the font stuff and the robot
 stuff. Get rid of the rest, and we'll have an interface which is both
 closer to the JDKs, and simpler.
 
 Comments?

I very much agree. My peers are only toys at the moment, but I ran into
many of the same issues. Especially the fact that the GTK event model is
integrated in EventQueue is very bad.

 Method: createEmbeddedWindow ()
 Comment: What's an EmbeddedWindow and why do we need this as 
 part of the peer interface?

I'm not sure, but I think this is used for Applets that have to live
inside a non-Java window.

Regards,
Jeroen




___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


RE: Implementation details of VMStackWalker

2005-07-25 Thread Jeroen Frijters
Ingo Prötel wrote:
 I just implemented VMStackWalker for our VM and have some questions.
 
 The reference implementation of 'getCallingClass()' and
 'getCallingClassLoader()' just look at the third entry in the class
 context. Would it not be better to return the first class that is not
 assignable to the class in context[0] ? That way we could cope with
 classes that first call some private or protected classes an then ends
 up calling the stack walker.

I'm *very* strongly opposed to this. It makes auditing the code for correctness 
of VMStackWalker *much* harder and it adds no value.

 The next thing I would like to have is a method to get the calling
 method name. This would be good for logging. 

Yeah, we should probably add a method to get the calling method and maybe 
another one to get the entire stack trace (as a java.lang.reflect.Method[]).

 For the security part: Is it enough to check if the class loader of
 context[0] is the boot classloader?

You don't need to enforce that, the documentation is just intended to point out 
that this is a privileged call that is not available to untrusted code. The 
security model will be used to enforce that untrusted code cannot call code in 
the gnu.classpath.* package.

Regards,
Jeroen


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


RE: Implementation details of VMStackWalker

2005-07-25 Thread Jeroen Frijters
Andrew Haley wrote:
 In gcj, we have a method called GetCallingClass(Class c).  It searches
 firstly for a method declared in class c, then for a method not
 declared in c.  We have found, after a certain amount of trouble, that
 this is the right way to do things; it means that an arbitrary number
 of stack frames can be between the direct caller of GetCallingClass
 and the user code, and it also means that you don't have to check for
 assignability, but for an exact match.

This is a dumb idea...

 For example, you may have
 
 class Foo
 {
 bar (Object O)
 {
return baz(O);
 }
 
 baz (Object O)
 {
   ... GetCallingClass (Foo) ...
 }
 }

class Frob extends Foo
{
  baz (Object o)
  {
super.baz(o);
  }
}

 ... and you will get class of the caller of bar, not Foo.class.

No, you'll get Frob.

Regards,
Jeroen


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


RE: Implementation details of VMStackWalker

2005-07-25 Thread Jeroen Frijters
Andrew Haley wrote:
 However, as for overhead -- I don't believe it.  I doubt that not
 having this parameter saves anything much on any VM.

That's just your lack of imagination ;-) I was concerned with two
aspects wrt performance:
1) Class literals are inefficient -- this is no longer an issue to me,
since I now use ecj (in 1.5 mode) to compile GNU Classpath
2) I have to do multiple (partial) stack walks to retrieve multiple
frames

Remember, IKVM is built on top of another VM, so I have to use another
stack walking abstraction to walk the stack. Having to fetch multiple
frames is obviously more expensive than having to fetch a single frame.

*BUT* I have much stronger objections against this model:
1) Like Archie points out, there is no need for this additional
functionality (at least not in the common case)
2) It is very easy to introduce subtle bugs (like the one with the
override I showed)
3) It is tempting to do (either on purpose or accidentally):
  class Foo
  {
somemethod()
{
   // we know we're always being called by Bar and we need its
caller
   GetCaller(Bar.class);
}
  }
4) It makes advanced optimizations by the JIT harder (the current
interface is very easy for the JIT to special case)

Regards,
Jeroen


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


RE: Implementation details of VMStackWalker

2005-07-25 Thread Andrew Haley
Jeroen Frijters writes:
  Andrew Haley wrote:
   In gcj, we have a method called GetCallingClass(Class c).  It searches
   firstly for a method declared in class c, then for a method not
   declared in c.  We have found, after a certain amount of trouble, that
   this is the right way to do things; it means that an arbitrary number
   of stack frames can be between the direct caller of GetCallingClass
   and the user code, and it also means that you don't have to check for
   assignability, but for an exact match.
  
  This is a dumb idea...
  
   For example, you may have
   
   class Foo
   {
   bar (Object O)
   {
  return baz(O);
   }
   
   baz (Object O)
   {
 ... GetCallingClass (Foo) ...
   }
   }
  
  class Frob extends Foo
  {
baz (Object o)
{
  super.baz(o);
}
  }
  
   ... and you will get class of the caller of bar, not Foo.class.
  
  No, you'll get Frob.

Which is the Right Answer: the caller of baz *is* Frob.

Andrew.


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


GJava_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor possible crash

2005-07-25 Thread Christian Thalinger
Hi!

We have some problems with the spec jvm applet and i think i've found a
problem. Java_gnu_java_awt_peer_gtk_GdkGraphics_setFGColor uses
NSA_GET_PTR to get the graphics pointer, which calls cp_gtk_get_state.
This function may return NULL in exception case, which lets this code
crash:

  g = (struct graphics *) NSA_GET_PTR (env, obj);
  
  gdk_color_alloc (g-cm, color);

May this be a problem? In fact, this crashes currently for me, but there
is no exception, it just returns NULL.

TWISTI



___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


RE: Implementation details of VMStackWalker

2005-07-25 Thread Andrew Haley
Jeroen Frijters writes:
  Andrew Haley wrote:
   However, as for overhead -- I don't believe it.  I doubt that not
   having this parameter saves anything much on any VM.
  
  That's just your lack of imagination ;-) I was concerned with two
  aspects wrt performance:
  1) Class literals are inefficient -- this is no longer an issue to me,
  since I now use ecj (in 1.5 mode) to compile GNU Classpath
  2) I have to do multiple (partial) stack walks to retrieve multiple
  frames
  
  Remember, IKVM is built on top of another VM, so I have to use another
  stack walking abstraction to walk the stack. Having to fetch multiple
  frames is obviously more expensive than having to fetch a single frame.

As I said:

  IMO trying to unify low-level stack walker code is unnecessary and
  leads to too many compromises; it's a merge too far.

Andrew.


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


RE: Implementation details of VMStackWalker

2005-07-25 Thread Andrew Haley
Jeroen Frijters writes:
  Andrew Haley wrote:
   Which is the Right Answer: the caller of baz *is* Frob.
  
  It *may* be the right answer, but how can you be certain that the
  coder of class Foo intended this?

Ah, well that is a totally different matter.

  IMNSHO, code like this is completely unauditable (remember, this
  isn't just a correctness issue, access to class loaders is a
  potential security issue).

Of course, yes.  But it's security issues that I'm concerned about
here: what we want to know is the first caller of Foo.method() that is
not Foo.

Andrew.


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


RE: Implementation details of VMStackWalker

2005-07-25 Thread Jeroen Frijters
Andrew Haley wrote:
 Which is the Right Answer: the caller of baz *is* Frob.

It *may* be the right answer, but how can you be certain that the coder of 
class Foo intended this? IMNSHO, code like this is completely unauditable 
(remember, this isn't just a correctness issue, access to class loaders is a 
potential security issue).

Regards,
Jeroen


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


RE: Implementation details of VMStackWalker

2005-07-25 Thread Jeroen Frijters
Ingo Prötel wrote:
 I really like the idea of having a stack walker so I would like to use
 it wherever possible. For example in java.util.logging.Logger. If a
 class calls 'logger.warning(some warning)' this call will 
 be forwarded through a couple of calls until it will call
 'Logger.log(Level level, String message, Throwable thrown)' there the
 stack will be inspected to get the calling class and calling method.

I think that a (potentially) more optimized version of the stack walker API can 
be made for this. I have no problem with that since accuracy in the logging 
isn't that critical (getting it wrong will be annoying but won't create a 
security hole).

 Does this mean the VM must check for every call if it is a call into 
 the gnu.classpath.* package and if so check the classloader 
 of the calling class?

No, this is enforced by the system class loader. Untrusted code cannot even 
load classes from the gnu.classpath package (this isn't yet fully implemented 
yet, but most of the infrastructure is in place).

Only if you replace the GNU Classpath system class loader do you need to worry 
about this.

Regards,
Jeroen


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


RE: Implementation details of VMStackWalker

2005-07-25 Thread Jeroen Frijters
Andrew Haley wrote:
 Of course, yes.  But it's security issues that I'm concerned about
 here: what we want to know is the first caller of Foo.method() that is
 not Foo.

Not necessarily. Typically what's important is the supplier of the arguments to 
the method. In the subclassing scenario, the subclass may be the one providing 
the arguments (i.e. passing different values then it was passed), but it may 
also be passing along the original values. If the subclasser is trusted but the 
original caller isn't, you have a problem. Now granted, this is a coding error, 
but I think it is facilitated by this too flexible model of walking the stack.

BTW, I'm not ruling out the need for this more flexible way of getting the 
caller, I just want to make sure that this isn't the default and is used only 
very cautiously.

Regards,
Jeroen


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


RE: Implementation details of VMStackWalker

2005-07-25 Thread Ingo Prötel
Am Montag, den 25.07.2005, 10:16 +0200 schrieb Jeroen Frijters:
 Ingo Prötel wrote:
  I just implemented VMStackWalker for our VM and have some questions.
  
  The reference implementation of 'getCallingClass()' and
  'getCallingClassLoader()' just look at the third entry in the class
  context. Would it not be better to return the first class that is not
  assignable to the class in context[0] ? That way we could cope with
  classes that first call some private or protected classes an then ends
  up calling the stack walker.
 
 I'm *very* strongly opposed to this. It makes auditing the code for 
 correctness of VMStackWalker *much* harder and it adds no value.
 
I really like the idea of having a stack walker so I would like to use
it wherever possible. For example in java.util.logging.Logger. If a
class calls 'logger.warning(some warning)' this call will be forwarded
through a couple of calls until it will call 'Logger.log(Level level,
String message, Throwable thrown)' there the stack will be inspected to
get the calling class and calling method. The current implementation of
VMStackWalker would require the generation of the full class context to
get the class that called 'Logger.warning(String)' since
'VMStackWalker.getCallingClass()' would always return 'Logger'. But
creating the whole class context is expensive. 

And yes our AOT compiler can simply inline the methods but not the
simple interpreter that we use to run dynamically loaded classes.

No I'm not sure if checking for assignability really is useful. But if
somebody wants to create their own Logger subclass it would just work as
I would expect when a call is forwarded to the Logger. But I admit I
have not yet checked what happens on a Sun VM in such a case.

  The next thing I would like to have is a method to get the calling
  method name. This would be good for logging. 
 
 Yeah, we should probably add a method to get the calling method and maybe 
 another one to get the entire stack trace (as a java.lang.reflect.Method[]).
 
  For the security part: Is it enough to check if the class loader of
  context[0] is the boot classloader?
 
 You don't need to enforce that, the documentation is just intended to point 
 out that this is a privileged call that is not available to untrusted code. 
 The security model will be used to enforce that untrusted code cannot call 
 code in the gnu.classpath.* package.

Does this mean the VM must check for every call if it is a call into 
the gnu.classpath.* package and if so check the classloader of the calling 
class?

Ingo
-- 
Ingo Prötel  [EMAIL PROTECTED]
aicas GmbHhttp://www.aicas.com
Haid-und-Neu-Str. 18phone   +49 721 663 968-32
76131 Karlsruhe fax +49 721 663 968-93
Germany  




___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


Using GNU Classpath while changing his hierarchy

2005-07-25 Thread Jean-Philippe Deblonde
Oups..., I completely forget to answer to the mailing list *too*...
So, here's what I answered to Tom...

-- Forwarded message --
From: Jean-Philippe Deblonde [EMAIL PROTECTED]
Date: 21 juil. 2005 19:21
Subject: Re: Using GNU Classpath while changing his hierarchy
To: [EMAIL PROTECTED]


In fact, it's a lot more than a simple refactoring, because I need, by
example, to rewrite the String.java to use an array of bytes (coded
with UTF-8) instead of an array of char, to save some space for the
smartcards...
It's only one of the substitutions I need to do, and I need to do them
automatically, since the developpers getting hands on the whole thing
will just have to download the new version of the Classpath archive,
and run a script to merge it with the rest of the project

21 Jul 2005 10:22:30 -0600, Tom Tromey [EMAIL PROTECTED]:
   == Jean-Philippe Deblonde [EMAIL PROTECTED] writes:

  The GNU Classpath project evolves while I'm doing this. And some
  substitution rules available for today won't be available in future
  releases of the Classpath project. Some new classes/substitutions will
  be introduced with each new version...

  So, I post this message to ask if I'm not missing something in the
  process, if there is a existing tool or some guidelines to help me
  keep track of the diff in a streamlined way.

  Do you have any comments or  suggestions ?

 Use Eclipse to do the refactoring for you?
 Or, do the refactoring *after* the build using a tool like ASM?

 Tom



___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


Re: ClasspathToolkit redesign.

2005-07-25 Thread Roman Kennke

Hi Sven,


Ok, I've been looking into the issue of our AWT peer interface now that
I've been running my peers on Classpath in earnest.

The goal here is to try to bring our peer interface as close to Sun's
as possible. And simplify things for potential peer-authors.


...


Summary: So, my opinion: Keep most of the font stuff and the robot
stuff. Get rid of the rest, and we'll have an interface which is both
closer to the JDKs, and simpler.

Comments?


A cleanup is very welcome. Go ahead.

/Roman


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


Re: Using GNU Classpath while changing his hierarchy

2005-07-25 Thread Meskauskas Audrius

Jean-Philippe Deblonde wrote:


In fact, it's a lot more than a simple refactoring, because I need, by
example, to rewrite the String.java to use an array of bytes (coded
with UTF-8) instead of an array of char, to save some space for the
smartcards..

Maybe I do not understand properly, but why on the world are you doing 
so strange? GNU Classpath Reader and Writer supports not just UTF-8, but 
also many other encodings, see release notes for details. You only write 
in UTF-16 if you want to. Are you using smart card as the main memory 
for the application?





___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


Re: Using GNU Classpath while changing his hierarchy

2005-07-25 Thread Jean-Philippe Deblonde
The idea was to save memory space  execution time, so the String.java
use *internally* UTF format.

2005/7/25, Meskauskas Audrius [EMAIL PROTECTED]:
 Jean-Philippe Deblonde wrote:
 
 In fact, it's a lot more than a simple refactoring, because I need, by
 example, to rewrite the String.java to use an array of bytes (coded
 with UTF-8) instead of an array of char, to save some space for the
 smartcards..
 
 Maybe I do not understand properly, but why on the world are you doing
 so strange? GNU Classpath Reader and Writer supports not just UTF-8, but
 also many other encodings, see release notes for details. You only write
 in UTF-16 if you want to. Are you using smart card as the main memory
 for the application?
 
 
 
 
 ___
 Classpath mailing list
 Classpath@gnu.org
 http://lists.gnu.org/mailman/listinfo/classpath



___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


Re: Using GNU Classpath while changing his hierarchy

2005-07-25 Thread Mark Wielaard
Hi,

On Mon, 2005-07-25 at 14:46 +0200, Jean-Philippe Deblonde wrote:
 In fact, it's a lot more than a simple refactoring, because I need, by
 example, to rewrite the String.java to use an array of bytes (coded
 with UTF-8) instead of an array of char, to save some space for the
 smartcards...

This is what wonka does for internal string representations btw.

 It's only one of the substitutions I need to do, and I need to do them
 automatically, since the developpers getting hands on the whole thing
 will just have to download the new version of the Classpath archive,
 and run a script to merge it with the rest of the project

It is a pain to maintain a forked version. And the best way to make sure
you won't have to is to provide patches to make these things possible
for the runtime to tweak. I am sure others will love to help with that
if you come up with some nice optimization points for the core classes.
Just supply some patches and a reference implementation and we can see
if we can incorporate it in the default build. We make regular releases
(once every 2 months at least).

Thanks,

Mark


signature.asc
Description: This is a digitally signed message part
___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


Re: ClasspathToolkit redesign.

2005-07-25 Thread Mark Wielaard
Hi,

I'll let Thomas reply with more details since he knows a lot more about
this. But here are some quick references that might help.

On Sun, 2005-07-24 at 00:19 +0200, Sven de Marothy wrote:
 Method: getClasspathFontPeer(), getClasspathTextLayoutPeer(), getFont() 
 Comment: We need these. No way around that. But they could perhaps be
 put in a seperate ClasspathFontInterface or something.
 
 Method: createFont()
 Comment: Um, we don't even implement this ourselves. Sorry Sacha, but
 there's no point. Right now anyway.

Note that Sascha did make a design and a start of an implementation:
http://www.brawer.ch/software/fonts/

 Method: createEmbeddedWindow ()
 Comment: What's an EmbeddedWindow and why do we need this as part of the
 peer interface?

It is an extension for things like gcjwebplugin. We also briefly
discussed this with the OpenOffice hackers who would also like some way
to create embedded windows (inside documents). See
http://savannah.nongnu.org/cgi-bin/viewcvs/gcjwebplugin/gcjwebplugin/src/gnu/gcjwebplugin/PluginAppletWindow.java?rev=HEADcontent-type=text/vnd.viewcvs-markup

 Method: registerImageIOSpis()
 Comment: Unnecessary. The peers can register their SPIs (if they have
 any) themselves without this.

Agreed. Or use the META-INF/services hack.

Cheers,

Mark


signature.asc
Description: This is a digitally signed message part
___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


Re: ClasspathToolkit redesign.

2005-07-25 Thread Thomas Fitzsimmons
Hi,

On Sun, 2005-07-24 at 00:19 +0200, Sven de Marothy wrote:

[...]

 Method: getClasspathFontPeer(), getClasspathTextLayoutPeer(), getFont() 
 Comment: We need these. No way around that. But they could perhaps be
 put in a seperate ClasspathFontInterface or something.

OK.

 
 Method: createFont()
 Comment: Um, we don't even implement this ourselves. Sorry Sacha, but
 there's no point. Right now anyway.
 
 Method: createRobot()
 Comment: This we need. But it's a rather singular item. Replace with a
 property setting? Certain peers may not (or cannot) have Robots anyway.

How could this be replaced by a property setting?

 
 Method: createEmbeddedWindow ()
 Comment: What's an EmbeddedWindow and why do we need this as part of the
 peer interface?

An EmbeddedWindowPeer is a wrapper around the native toolkit's
implementation of the XEMBED protocol.  gnu.java.awt.EmbeddedWindow
should use the current toolkit's XEMBED implementation, e.g. for GTK,
GtkPlug.  We'll need some way to create the peer dependent on the
toolkit.  Whatever we do for Robot can be done here too.

 
 Method: registerImageIOSpis()
 Comment: Unnecessary. The peers can register their SPIs (if they have
 any) themselves without this.
 
 Method: nativeQueueEmpty(), wakeNativeQueue(), iterateNativeQueue()
 Comment: These are specific to how the GTK peers handles threads and
 events, and should certainly not be part of the interface. The versions
 of EventQueue using these methods should be reverted too. The GTK peers
 should extend and overload EventQueue for their custom approach instead.
 
 Summary: So, my opinion: Keep most of the font stuff and the robot
 stuff. Get rid of the rest, and we'll have an interface which is both
 closer to the JDKs, and simpler.
 
 Comments?

Yeah, this sounds good.

Tom




___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


Re: JNI assertion failure

2005-07-25 Thread Archie Cobbs

I checked in the aforementioned assertion patch.

2005-07-25  Archie Cobbs  [EMAIL PROTECTED]

* native/jni/classpath/native_state.c: add assertion for object type

-Archie

__
Archie Cobbs  *CTO, Awarix*  http://www.awarix.com


___
Classpath mailing list
Classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath


[commit-cp] classpath ./ChangeLog gnu/java/nio/channels/Fil...

2005-07-25 Thread Roman Kennke
CVSROOT:/cvsroot/classpath
Module name:classpath
Branch: 
Changes by: Roman Kennke [EMAIL PROTECTED]05/07/25 13:57:40

Modified files:
.  : ChangeLog 
gnu/java/nio/channels: FileChannelImpl.java 
native/jni/java-nio: gnu_java_nio_channels_FileChannelImpl.c 

Log message:
2005-07-25  Roman Kennke  [EMAIL PROTECTED]

* gnu/java/nio/channels/FileChannelImpl.java
(static initializer): Init out, err and in here.
* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
(Java_gnu_java_nio_channels_FileChannelImpl_init): Moved init code
for in, out and err to Java code.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/ChangeLog.diff?tr1=1.4213tr2=1.4214r1=textr2=text
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/gnu/java/nio/channels/FileChannelImpl.java.diff?tr1=1.15tr2=1.16r1=textr2=text
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c.diff?tr1=1.19tr2=1.20r1=textr2=text



___
Commit-classpath mailing list
Commit-classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/commit-classpath


[commit-cp] classpath ./ChangeLog java/lang/ClassLoader.jav...

2005-07-25 Thread Jeroen Frijters
CVSROOT:/cvsroot/classpath
Module name:classpath
Branch: 
Changes by: Jeroen Frijters [EMAIL PROTECTED] 05/07/25 14:28:42

Modified files:
.  : ChangeLog 
java/lang  : ClassLoader.java 
vm/reference/java/lang: VMClassLoader.java 

Log message:
2005-07-25  Jeroen Frijters  [EMAIL PROTECTED]

* java/lang/ClassLoader.java
(loadedClasses): Set based on VMClassLoader.VM_USE_CACHE.
(defineClass): Modified to respect VMClassLoader.VM_USE_CACHE.
* vm/reference/java/lang/VMClassLoader.java
(VM_USE_CACHE): New field.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/ChangeLog.diff?tr1=1.4215tr2=1.4216r1=textr2=text
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/java/lang/ClassLoader.java.diff?tr1=1.53tr2=1.54r1=textr2=text
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/vm/reference/java/lang/VMClassLoader.java.diff?tr1=1.27tr2=1.28r1=textr2=text



___
Commit-classpath mailing list
Commit-classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/commit-classpath


[commit-cp] classpath ./ChangeLog java/rmi/server/RMIClassL...

2005-07-25 Thread Jeroen Frijters
CVSROOT:/cvsroot/classpath
Module name:classpath
Branch: 
Changes by: Jeroen Frijters [EMAIL PROTECTED] 05/07/25 16:31:53

Modified files:
.  : ChangeLog 
java/rmi/server: RMIClassLoader.java 

Log message:
2005-07-25  Jeroen Frijters  [EMAIL PROTECTED]

* java/rmi/server/RMIClassLoader.java
(loadClass(String, String)): Use Class.forName() instead of
directly calling ClassLoader.loadClass(), to handle array
types correctly.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/ChangeLog.diff?tr1=1.4217tr2=1.4218r1=textr2=text
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/java/rmi/server/RMIClassLoader.java.diff?tr1=1.16tr2=1.17r1=textr2=text



___
Commit-classpath mailing list
Commit-classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/commit-classpath


[commit-cp] classpath ./ChangeLog java/awt/Container.java

2005-07-25 Thread Anthony Balkissoon
CVSROOT:/cvsroot/classpath
Module name:classpath
Branch: 
Changes by: Anthony Balkissoon [EMAIL PROTECTED]  05/07/25 16:33:15

Modified files:
.  : ChangeLog 
java/awt   : Container.java 

Log message:
2005-07-25  Anthony Balkissoon  [EMAIL PROTECTED]

* java/awt/Container.java:
(setFocusTraversalKeys): Instantiate focusTraversalKeys to an array of
size 4, not 3.  This must have been a typo.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/ChangeLog.diff?tr1=1.4218tr2=1.4219r1=textr2=text
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/java/awt/Container.java.diff?tr1=1.55tr2=1.56r1=textr2=text



___
Commit-classpath mailing list
Commit-classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/commit-classpath


[commit-cp] classpath ./ChangeLog java/text/CollationKey.java

2005-07-25 Thread Tom Tromey
CVSROOT:/cvsroot/classpath
Module name:classpath
Branch: 
Changes by: Tom Tromey [EMAIL PROTECTED]  05/07/25 18:36:35

Modified files:
.  : ChangeLog 
java/text  : CollationKey.java 

Log message:
* java/text/CollationKey.java (equals): Use Arrays.equals.
PR classpath/22986.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/ChangeLog.diff?tr1=1.4222tr2=1.4223r1=textr2=text
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/java/text/CollationKey.java.diff?tr1=1.15tr2=1.16r1=textr2=text



___
Commit-classpath mailing list
Commit-classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/commit-classpath


[commit-cp] classpath ./ChangeLog native/jni/classpath/nati...

2005-07-25 Thread Archie Cobbs
CVSROOT:/cvsroot/classpath
Module name:classpath
Branch: 
Changes by: Archie Cobbs [EMAIL PROTECTED]05/07/25 22:32:51

Modified files:
.  : ChangeLog 
native/jni/classpath: native_state.c 

Log message:
* native/jni/classpath/native_state.c: add assertion for object type

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/ChangeLog.diff?tr1=1.4224tr2=1.4225r1=textr2=text
http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/native/jni/classpath/native_state.c.diff?tr1=1.11tr2=1.12r1=textr2=text



___
Commit-classpath mailing list
Commit-classpath@gnu.org
http://lists.gnu.org/mailman/listinfo/commit-classpath