This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: replacing gnu.gcj.runtime.FirstThread


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi list,


I got the idea to replace gnu.gcj.runtime.FirstThread by 
gnu.java.lang.MainThread and merge this with GNU classpath as far as 
possible. I wrote the attached patch to to this move. It only moves 
and changes style a bit. No really semantic changes are done (yet).

Okay for mainline ?


Michael
- -- 
Homepage: http://www.worldforge.org/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFAvhuiWSOgCCdjSDsRAhrHAJ9Ar5/UXnWnpT//W6hAafvcpX0sUwCfbqJT
T7YPB4SgmbSI5oQe+3BKb4A=
=jeWT
-----END PGP SIGNATURE-----
Index: gnu/gcj/runtime/FirstThread.java
===================================================================
RCS file: gnu/gcj/runtime/FirstThread.java
diff -N gnu/gcj/runtime/FirstThread.java
--- gnu/gcj/runtime/FirstThread.java	8 Nov 2003 13:43:12 -0000	1.13
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,98 +0,0 @@
-// FirstThread.java - Implementation of very first thread.
-
-/* Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation
-
-   This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
-details.  */
-
-package gnu.gcj.runtime;
-
-import java.util.jar.*;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date August 24, 1998 
- */
-
-final class FirstThread extends Thread
-{
-  public FirstThread (Class k, String[] args)
-  {
-    super (null, null, "main");
-    klass = k;
-    this.args = args;
-  }
-
-  public FirstThread (String class_name, String[] args, boolean is_jar)
-  {
-    super (null, null, "main");
-    klass_name = class_name;
-    this.args = args;
-    this.is_jar = is_jar;
-  }
-
-  public void run()
-  {
-    if (is_jar)
-      klass_name = getMain(klass_name);
-
-    if (klass == null)
-      {
-        try
-	  {
-	    klass = Class.forName(klass_name);
-	  }
-	catch (ClassNotFoundException x)
-	  {
-	    throw new NoClassDefFoundError(klass_name);
-	  }
-      }
-
-    call_main();
-  }
-
-  private String getMain (String name)
-  {
-    String mainName = null;
-    try
-      {
-	JarFile j = new JarFile(name);
-	Attributes a = j.getManifest().getMainAttributes();
-	mainName = a.getValue(Attributes.Name.MAIN_CLASS);
-      }
-    catch (Exception e)
-      {
-	// Ignore.
-      }
-
-    if (mainName == null)
-      {
-	System.err.println("Failed to load Main-Class manifest attribute from "
-			   + name);
-	System.exit(1);
-      }
-    return mainName;
-  }
-
-  private native void call_main ();
-
-  // Private data.
-  private Class klass;
-  private String klass_name;
-  private Object args;
-  private boolean is_jar;
-
-  // If the user links statically then we need to ensure that these
-  // classes are linked in.  Otherwise bootstrapping fails.  These
-  // classes are only referred to via Class.forName(), so we add an
-  // explicit mention of them here.
-  static final Class Kcert     = java.security.cert.Certificate.class;
-  static final Class Kfile     = gnu.java.net.protocol.file.Handler.class;
-  static final Class Khttp     = gnu.java.net.protocol.http.Handler.class;
-  static final Class Kjar      = gnu.java.net.protocol.jar.Handler.class;
-  static final Class Klocale   = gnu.java.locale.LocaleInformation.class;
-  static final Class Kcalendar = gnu.java.locale.Calendar.class;
-}
Index: gnu/gcj/runtime/natFirstThread.cc
===================================================================
RCS file: gnu/gcj/runtime/natFirstThread.cc
diff -N gnu/gcj/runtime/natFirstThread.cc
--- gnu/gcj/runtime/natFirstThread.cc	22 Oct 2003 18:05:57 -0000	1.8
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,48 +0,0 @@
-// natFirstThread.cc - Implementation of FirstThread native methods.
-
-/* Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation
-
-   This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
-details.  */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <gcj/cni.h>
-#include <jvm.h>
-
-#include <gnu/gcj/runtime/FirstThread.h>
-
-typedef void main_func (jobject);
-
-void
-gnu::gcj::runtime::FirstThread::call_main (void)
-{
-  Utf8Const* main_signature = _Jv_makeUtf8Const ("([Ljava.lang.String;)V", 22);
-  Utf8Const* main_name = _Jv_makeUtf8Const ("main", 4);
-
-  _Jv_Method *meth = _Jv_LookupDeclaredMethod (klass, main_name,
-					       main_signature);
-
-  // Some checks from Java Spec section 12.1.4.
-  const char *msg = NULL;
-  if (meth == NULL)
-    msg = "no suitable method `main' in class";
-  else if (! java::lang::reflect::Modifier::isStatic(meth->accflags))
-    msg = "`main' must be static";
-  else if (! java::lang::reflect::Modifier::isPublic(meth->accflags))
-    msg =  "`main' must be public";
-  if (msg != NULL)
-    {
-      fprintf (stderr, "%s\n", msg);
-      ::exit(1);
-    }
-
-  main_func *real_main = (main_func *) meth->ncode;
-  (*real_main) (args);
-}
Index: gnu/java/lang/MainThread.java
===================================================================
RCS file: gnu/java/lang/MainThread.java
diff -N gnu/java/lang/MainThread.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/java/lang/MainThread.java	2 Jun 2004 18:22:24 -0000
@@ -0,0 +1,128 @@
+/* gnu.java.lang.MainThread
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+   Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath 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, or (at your option)
+any later version.
+ 
+GNU Classpath 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 GNU Classpath; see the file COPYING.  If not, write to the
+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
+conditions of the GNU General Public License cover the whole
+combination.
+
+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 gnu.java.lang;
+
+import java.util.jar.*;
+
+/**
+ * MainThread is a Thread which uses the main() method of some class.
+ *
+ * @author John Keiser
+ * @author Tom Tromey (tromey@redhat.com)
+ */
+final class MainThread extends Thread
+{
+  // If the user links statically then we need to ensure that these
+  // classes are linked in.  Otherwise bootstrapping fails.  These
+  // classes are only referred to via Class.forName(), so we add an
+  // explicit mention of them here.
+  static final Class Kcert     = java.security.cert.Certificate.class;
+  static final Class Kfile     = gnu.java.net.protocol.file.Handler.class;
+  static final Class Khttp     = gnu.java.net.protocol.http.Handler.class;
+  static final Class Kjar      = gnu.java.net.protocol.jar.Handler.class;
+  static final Class Klocale   = gnu.java.locale.LocaleInformation.class;
+  static final Class Kcalendar = gnu.java.locale.Calendar.class;
+
+  // Private data.
+  private Class klass;
+  private String klass_name;
+  private Object args;
+  private boolean is_jar;
+
+  public MainThread(Class k, String[] args)
+  {
+    super(null, null, "main");
+    klass = k;
+    this.args = args;
+  }
+
+  public MainThread(String classname, String[] args, boolean is_jar)
+  {
+    super (null, null, "main");
+    klass_name = classname;
+    this.args = args;
+    this.is_jar = is_jar;
+  }
+
+  public void run()
+  {
+    if (is_jar)
+      klass_name = getMain(klass_name);
+
+    if (klass == null)
+      {
+        try
+	  {
+	    klass = Class.forName(klass_name);
+	  }
+	catch (ClassNotFoundException x)
+	  {
+	    throw new NoClassDefFoundError(klass_name);
+	  }
+      }
+
+    call_main();
+  }
+
+  private String getMain(String name)
+  {
+    String mainName = null;
+    try
+      {
+	JarFile j = new JarFile(name);
+	Attributes a = j.getManifest().getMainAttributes();
+	mainName = a.getValue(Attributes.Name.MAIN_CLASS);
+      }
+    catch (Exception e)
+      {
+	// Ignore.
+      }
+
+    if (mainName == null)
+      {
+	System.err.println("Failed to load Main-Class manifest attribute from "
+			   + name);
+	System.exit(1);
+      }
+    return mainName;
+  }
+
+  private native void call_main();
+}
Index: gnu/java/lang/natMainThread.cc
===================================================================
RCS file: gnu/java/lang/natMainThread.cc
diff -N gnu/java/lang/natMainThread.cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/java/lang/natMainThread.cc	2 Jun 2004 18:22:24 -0000
@@ -0,0 +1,48 @@
+// natMainThread.cc - Implementation of MainThread native methods.
+
+/* Copyright (C) 1998, 1999, 2000, 2001, 2003  Free Software Foundation
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <gcj/cni.h>
+#include <jvm.h>
+
+#include <gnu/java/lang/MainThread.h>
+
+typedef void main_func (jobject);
+
+void
+gnu::java::lang::MainThread::call_main (void)
+{
+  Utf8Const* main_signature = _Jv_makeUtf8Const ("([Ljava.lang.String;)V", 22);
+  Utf8Const* main_name = _Jv_makeUtf8Const ("main", 4);
+
+  _Jv_Method *meth = _Jv_LookupDeclaredMethod (klass, main_name,
+					       main_signature);
+
+  // Some checks from Java Spec section 12.1.4.
+  const char *msg = NULL;
+  if (meth == NULL)
+    msg = "no suitable method `main' in class";
+  else if (! ::java::lang::reflect::Modifier::isStatic(meth->accflags))
+    msg = "`main' must be static";
+  else if (! ::java::lang::reflect::Modifier::isPublic(meth->accflags))
+    msg =  "`main' must be public";
+  if (msg != NULL)
+    {
+      fprintf (stderr, "%s\n", msg);
+      ::exit(1);
+    }
+
+  main_func *real_main = (main_func *) meth->ncode;
+  (*real_main) (args);
+}
Index: prims.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/prims.cc,v
retrieving revision 1.88
diff -u -b -B -r1.88 prims.cc
--- prims.cc	16 Apr 2004 16:27:12 -0000	1.88
+++ prims.cc	2 Jun 2004 18:22:25 -0000
@@ -60,7 +60,7 @@
 #include <java/lang/VirtualMachineError.h>
 #include <gnu/gcj/runtime/VMClassLoader.h>
 #include <gnu/gcj/runtime/FinalizerThread.h>
-#include <gnu/gcj/runtime/FirstThread.h>
+#include <gnu/java/lang/MainThread.h>
 
 #ifdef USE_LTDL
 #include <ltdl.h>
@@ -1045,11 +1045,11 @@
       arg_vec = JvConvertArgv (argc - 1, argv + 1);
 #endif
 
-      using namespace gnu::gcj::runtime;
+      using namespace gnu::java::lang;
       if (klass)
-	main_thread = new FirstThread (klass, arg_vec);
+	main_thread = new MainThread (klass, arg_vec);
       else
-	main_thread = new FirstThread (JvNewStringLatin1 (name),
+	main_thread = new MainThread (JvNewStringLatin1 (name),
 				       arg_vec, is_jar);
     }
   catch (java::lang::Throwable *t)
Index: Makefile.am
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v
retrieving revision 1.381
diff -u -b -B -r1.381 Makefile.am
--- Makefile.am	28 May 2004 18:53:04 -0000	1.381
+++ Makefile.am	2 Jun 2004 18:22:26 -0000
@@ -2257,7 +2257,6 @@
 gnu/gcj/io/SimpleSHSStream.java	\
 gnu/gcj/runtime/FileDeleter.java \
 gnu/gcj/runtime/FinalizerThread.java \
-gnu/gcj/runtime/FirstThread.java \
 gnu/gcj/runtime/JNIWeakRef.java \
 gnu/gcj/runtime/MethodRef.java \
 gnu/gcj/runtime/NameFinder.java \
@@ -2274,6 +2273,7 @@
 gnu/java/lang/ArrayHelper.java \
 gnu/java/lang/ClassHelper.java \
 gnu/java/lang/CharData.java \
+gnu/java/lang/MainThread.java \
 gnu/java/lang/reflect/TypeSignature.java \
 gnu/java/locale/Calendar.java \
 gnu/java/locale/Calendar_de.java \
@@ -2930,13 +2930,13 @@
 gnu/gcj/io/natSimpleSHSStream.cc \
 gnu/gcj/io/shs.cc \
 gnu/gcj/runtime/natFinalizerThread.cc \
-gnu/gcj/runtime/natFirstThread.cc \
 gnu/gcj/runtime/natNameFinder.cc \
 gnu/gcj/runtime/natSharedLibLoader.cc \
 gnu/gcj/runtime/natStackTrace.cc \
 gnu/gcj/runtime/natStringBuffer.cc \
 gnu/gcj/runtime/natVMClassLoader.cc \
 gnu/java/awt/natEmbeddedWindow.cc \
+gnu/java/lang/natMainThread.cc \
 gnu/java/net/natPlainDatagramSocketImpl.cc \
 gnu/java/net/natPlainSocketImpl.cc \
 gnu/java/net/protocol/core/natCoreInputStream.cc \
Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.in,v
retrieving revision 1.405
diff -u -b -B -r1.405 Makefile.in
--- Makefile.in	28 May 2004 18:53:05 -0000	1.405
+++ Makefile.in	2 Jun 2004 18:22:29 -0000
@@ -1929,7 +1929,6 @@
 gnu/gcj/io/SimpleSHSStream.java	\
 gnu/gcj/runtime/FileDeleter.java \
 gnu/gcj/runtime/FinalizerThread.java \
-gnu/gcj/runtime/FirstThread.java \
 gnu/gcj/runtime/JNIWeakRef.java \
 gnu/gcj/runtime/MethodRef.java \
 gnu/gcj/runtime/NameFinder.java \
@@ -1946,6 +1945,7 @@
 gnu/java/lang/ArrayHelper.java \
 gnu/java/lang/ClassHelper.java \
 gnu/java/lang/CharData.java \
+gnu/java/lang/MainThread.java \
 gnu/java/lang/reflect/TypeSignature.java \
 gnu/java/locale/Calendar.java \
 gnu/java/locale/Calendar_de.java \
@@ -2601,13 +2601,13 @@
 gnu/gcj/io/natSimpleSHSStream.cc \
 gnu/gcj/io/shs.cc \
 gnu/gcj/runtime/natFinalizerThread.cc \
-gnu/gcj/runtime/natFirstThread.cc \
 gnu/gcj/runtime/natNameFinder.cc \
 gnu/gcj/runtime/natSharedLibLoader.cc \
 gnu/gcj/runtime/natStackTrace.cc \
 gnu/gcj/runtime/natStringBuffer.cc \
 gnu/gcj/runtime/natVMClassLoader.cc \
 gnu/java/awt/natEmbeddedWindow.cc \
+gnu/java/lang/natMainThread.cc \
 gnu/java/net/natPlainDatagramSocketImpl.cc \
 gnu/java/net/natPlainSocketImpl.cc \
 gnu/java/net/protocol/core/natCoreInputStream.cc \
@@ -2785,10 +2785,10 @@
 gnu/gcj/convert/natInput_SJIS.lo gnu/gcj/convert/natOutput_EUCJIS.lo \
 gnu/gcj/convert/natOutput_SJIS.lo gnu/gcj/io/natSimpleSHSStream.lo \
 gnu/gcj/io/shs.lo gnu/gcj/runtime/natFinalizerThread.lo \
-gnu/gcj/runtime/natFirstThread.lo gnu/gcj/runtime/natNameFinder.lo \
-gnu/gcj/runtime/natSharedLibLoader.lo gnu/gcj/runtime/natStackTrace.lo \
-gnu/gcj/runtime/natStringBuffer.lo gnu/gcj/runtime/natVMClassLoader.lo \
-gnu/java/awt/natEmbeddedWindow.lo \
+gnu/gcj/runtime/natNameFinder.lo gnu/gcj/runtime/natSharedLibLoader.lo \
+gnu/gcj/runtime/natStackTrace.lo gnu/gcj/runtime/natStringBuffer.lo \
+gnu/gcj/runtime/natVMClassLoader.lo gnu/java/awt/natEmbeddedWindow.lo \
+gnu/java/lang/natMainThread.lo \
 gnu/java/net/natPlainDatagramSocketImpl.lo \
 gnu/java/net/natPlainSocketImpl.lo \
 gnu/java/net/protocol/core/natCoreInputStream.lo \
@@ -3106,14 +3106,13 @@
 .deps/gnu/gcj/io/natSimpleSHSStream.P .deps/gnu/gcj/io/shs.P \
 .deps/gnu/gcj/natCore.P .deps/gnu/gcj/runtime/FileDeleter.P \
 .deps/gnu/gcj/runtime/FinalizerThread.P \
-.deps/gnu/gcj/runtime/FirstThread.P .deps/gnu/gcj/runtime/JNIWeakRef.P \
-.deps/gnu/gcj/runtime/MethodRef.P .deps/gnu/gcj/runtime/NameFinder.P \
+.deps/gnu/gcj/runtime/JNIWeakRef.P .deps/gnu/gcj/runtime/MethodRef.P \
+.deps/gnu/gcj/runtime/NameFinder.P \
 .deps/gnu/gcj/runtime/SharedLibHelper.P \
 .deps/gnu/gcj/runtime/SharedLibLoader.P \
 .deps/gnu/gcj/runtime/StackTrace.P .deps/gnu/gcj/runtime/StringBuffer.P \
 .deps/gnu/gcj/runtime/VMClassLoader.P \
 .deps/gnu/gcj/runtime/natFinalizerThread.P \
-.deps/gnu/gcj/runtime/natFirstThread.P \
 .deps/gnu/gcj/runtime/natNameFinder.P \
 .deps/gnu/gcj/runtime/natSharedLibLoader.P \
 .deps/gnu/gcj/runtime/natStackTrace.P \
@@ -3219,7 +3218,8 @@
 .deps/gnu/java/io/NullOutputStream.P \
 .deps/gnu/java/io/ObjectIdentityWrapper.P \
 .deps/gnu/java/lang/ArrayHelper.P .deps/gnu/java/lang/CharData.P \
-.deps/gnu/java/lang/ClassHelper.P \
+.deps/gnu/java/lang/ClassHelper.P .deps/gnu/java/lang/MainThread.P \
+.deps/gnu/java/lang/natMainThread.P \
 .deps/gnu/java/lang/reflect/TypeSignature.P \
 .deps/gnu/java/locale/Calendar.P .deps/gnu/java/locale/Calendar_de.P \
 .deps/gnu/java/locale/Calendar_en.P .deps/gnu/java/locale/Calendar_nl.P \

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]