FirstThread.java, [...]: Removed.
authorMichael Koch <konqueror@gmx.de>
Sun, 4 Jul 2004 15:27:05 +0000 (15:27 +0000)
committerMichael Koch <mkoch@gcc.gnu.org>
Sun, 4 Jul 2004 15:27:05 +0000 (15:27 +0000)
2004-07-04  Michael Koch  <konqueror@gmx.de>

* gnu/gcj/runtime/FirstThread.java,
gnu/gcj/runtime/natFirstThread.cc: Removed.
* gnu/java/lang/MainThread.java,
gnu/java/lang/natMainThread.cc: New files.
* prims.cc (_Jv_RunMain): Use MainThread instead of FirstThread.
* Makefile.am: Added new files and removed deleted ones.
* Makefile.in: Regenerated.

From-SVN: r84085

libjava/ChangeLog
libjava/Makefile.am
libjava/Makefile.in
libjava/gnu/gcj/runtime/FirstThread.java [deleted file]
libjava/gnu/gcj/runtime/natFirstThread.cc [deleted file]
libjava/gnu/java/lang/MainThread.java [new file with mode: 0644]
libjava/gnu/java/lang/natMainThread.cc [new file with mode: 0644]
libjava/prims.cc

index edf90fb33a5fbd4f3a62c508149acd9dbc10e3e3..17c097b307ff200794eec51dbb917e21619e3a3a 100644 (file)
@@ -1,3 +1,13 @@
+2004-07-04  Michael Koch  <konqueror@gmx.de>
+
+       * gnu/gcj/runtime/FirstThread.java,
+       gnu/gcj/runtime/natFirstThread.cc: Removed.
+       * gnu/java/lang/MainThread.java,
+       gnu/java/lang/natMainThread.cc: New files.
+       * prims.cc (_Jv_RunMain): Use MainThread instead of FirstThread.
+       * Makefile.am: Added new files and removed deleted ones.
+       * Makefile.in: Regenerated.
+
 2004-07-03  Mark Wielaard  <mark@klomp.org>
             Anthony Green  <green@redhat.com>
 
index cd893bb188640ff8d5887053d74ee4f90379c0e6..9a2d8f4b8e15e4e324ffb8117afc7ca488eca6e2 100644 (file)
@@ -2266,7 +2266,6 @@ gnu/gcj/io/MimeTypes.java \
 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 \
@@ -2283,6 +2282,7 @@ gnu/java/io/ObjectIdentityWrapper.java \
 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 \
@@ -2939,13 +2939,13 @@ gnu/gcj/convert/natOutput_SJIS.cc \
 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 4a1cd9b973bc40d4aff533d89f29fc914dd54eee..894c853ac5e77f4362bc7cb8c37160278d63d8d6 100644 (file)
@@ -1938,7 +1938,6 @@ gnu/gcj/io/MimeTypes.java \
 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 \
@@ -1955,6 +1954,7 @@ gnu/java/io/ObjectIdentityWrapper.java \
 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 \
@@ -2610,13 +2610,13 @@ gnu/gcj/convert/natOutput_SJIS.cc \
 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 \
@@ -2794,10 +2794,10 @@ gnu/gcj/convert/natIconv.lo gnu/gcj/convert/natInput_EUCJIS.lo \
 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 \
@@ -3115,14 +3115,13 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .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 \
@@ -3228,7 +3227,8 @@ DEP_FILES =  .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
 .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 \
diff --git a/libjava/gnu/gcj/runtime/FirstThread.java b/libjava/gnu/gcj/runtime/FirstThread.java
deleted file mode 100644 (file)
index 9d4b435..0000000
+++ /dev/null
@@ -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;
-}
diff --git a/libjava/gnu/gcj/runtime/natFirstThread.cc b/libjava/gnu/gcj/runtime/natFirstThread.cc
deleted file mode 100644 (file)
index e3100c5..0000000
+++ /dev/null
@@ -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);
-}
diff --git a/libjava/gnu/java/lang/MainThread.java b/libjava/gnu/java/lang/MainThread.java
new file mode 100644 (file)
index 0000000..61751b2
--- /dev/null
@@ -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();
+}
diff --git a/libjava/gnu/java/lang/natMainThread.cc b/libjava/gnu/java/lang/natMainThread.cc
new file mode 100644 (file)
index 0000000..7e8e422
--- /dev/null
@@ -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 cbcbc9fbf168aaf965093c272e3efde97476b4c3..93db746fc1eefaa450407e4bfdeb4406400fd119 100644 (file)
@@ -60,7 +60,7 @@ details.  */
 #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>
@@ -1049,12 +1049,12 @@ _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv,
       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),
-                                      arg_vec, is_jar);
+       main_thread = new MainThread (JvNewStringLatin1 (name),
+                                     arg_vec, is_jar);
     }
   catch (java::lang::Throwable *t)
     {