PatchSet 6538 
Date: 2005/05/17 10:20:08
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
merged in java/lang/System from GNU Classpath

Members: 
        ChangeLog:1.4064->1.4065 
        include/Makefile.am:1.101->1.102 
        include/Makefile.in:1.230->1.231 
        kaffe/kaffevm/baseClasses.c:1.64->1.65 
        kaffe/kaffevm/baseClasses.h:INITIAL->1.21 
        kaffe/kaffevm/thread.c:1.98->1.99 
        libraries/clib/native/Class.c:1.82->1.83 
        libraries/clib/native/Field.c:1.19->1.20 
        libraries/clib/native/Makefile.am:1.44->1.45 
        libraries/clib/native/Makefile.in:1.183->1.184 
        libraries/clib/native/System.c:INITIAL->1.65 
        libraries/clib/native/java_lang_VMSystem.c:INITIAL->1.1 
        libraries/javalib/Makefile.am:1.350->1.351 
        libraries/javalib/Makefile.in:1.440->1.441 
        libraries/javalib/gnu/classpath/VMStackWalker.java:1.1->1.2 
        libraries/javalib/java/lang/Runtime.java:INITIAL->1.32 
        libraries/javalib/java/lang/System.java:INITIAL->1.47 
        libraries/javalib/java/lang/VMSystem.java:INITIAL->1.1 
        test/internal/Makefile.am:INITIAL->1.19 
        test/internal/Makefile.in:1.105->1.106 
        test/internal/java/lang/System.java:1.2->1.3 
        test/internal/java/lang/VMSystem.java:INITIAL->1.1 
        test/regression/Reflect.java:1.13->1.14 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4064 kaffe/ChangeLog:1.4065
--- kaffe/ChangeLog:1.4064      Mon May 16 12:13:41 2005
+++ kaffe/ChangeLog     Tue May 17 10:20:08 2005
@@ -1,3 +1,57 @@
+2005-05-17  Dalibor Topic  <[EMAIL PROTECTED]>
+
+       * libraries/clib/native/java_lang_VMSystem.c,
+       libraries/javalib/java/lang/VMSystem.java,
+       test/internal/java/lang/VMSystem.java:
+       New files. Taken from GNU Classpath.
+
+       * include/Makefile.am (NOINSTALL_DERIVED_HDRS): Removed
+       java_lang_System.h. (NOINSTALL_JNI_DERIVED_HDRS) Added
+       java_lang_VMSystem.h.
+
+       * kaffe/kaffevm/baseClasses.c (RuntimeClass): New field.
+       (RUNTIMECLASS) New constant. 
+       (initBaseClasses) Load Runtime class.
+
+       * kaffe/kaffevm/baseClasses.h (RuntimeClass): export field.
+
+       * kaffe/kaffevm/thread.c (runfinalizer): Call exitJavaCleanupHook
+       in Runtime class.
+
+       * libraries/clib/native/Class.c,
+       libraries/clib/native/Field.c: Removed unnecessary include of
+       java_lang_System.h.
+
+       * libraries/clib/native/Makefile.am (LANG_SRCS): Added 
+       java_lang_VMSystem.c.
+
+       * libraries/clib/native/System.c (java_lang_System_getenv0,
+       java_lang_System_currentTimeMillis, Java_java_lang_System_setIn0,
+       Java_java_lang_System_setOut0, Java_java_lang_System_setErr0):
+       Removed.
+       (java_lang_System_identityHashCode, java_lang_System_arraycopy0)
+       Renamed into java_lang_VMSystem_identityHashCode and
+       java_lang_VMSystem_arraycopy0.
+
+       * libraries/javalib/gnu/classpath/VMStackWalker.java:
+       (MINIMAL_NUMBER_OF_FRAMES, CALLERS_CALLER_FRAME): New constants.
+       (getCallingClass, getCallingClassLoader): Use MINIMAL_NUMBER_OF_FRAMES
+       and CALLERS_CALLER_FRAME to return the class or the classloader of
+       the caller's caller.
+
+       * libraries/javalib/java/lang/Runtime.java (securityManager): Removed.
+       (exitJavaCleanupHook): New method.
+
+       * libraries/javalib/java/lang/System.java: Switched over to 
implementation
+       from GNU Classpath.
+
+       * test/internal/Makefile.am: Added java/lang/VMSystem.java into the 
build.
+
+       * test/internal/java/lang/System.java: Switched over to implementation
+       from GNU Classpath.
+
+       * test/regression/Reflect.java: Adapted expected output.
+
 2005-05-16  Dalibor Topic  <[EMAIL PROTECTED]>
 
        Resynced with GNU Classpath.
Index: kaffe/include/Makefile.am
diff -u kaffe/include/Makefile.am:1.101 kaffe/include/Makefile.am:1.102
--- kaffe/include/Makefile.am:1.101     Sun May 15 16:50:00 2005
+++ kaffe/include/Makefile.am   Tue May 17 10:20:12 2005
@@ -61,7 +61,6 @@
        java_lang_Math.h \
        java_lang_Runtime.h \
        java_lang_Short.h \
-       java_lang_System.h \
        java_lang_reflect_Array.h \
        java_lang_reflect_Constructor.h \
        java_lang_reflect_Field.h \
@@ -225,6 +224,7 @@
        gnu_java_nio_charset_iconv_IconvEncoder.h \
        gnu_java_nio_channels_FileChannelImpl.h \
        gnu_java_nio_SelectorImpl.h \
+       java_lang_VMSystem.h \
        java_io_VMObjectInputStream.h \
        java_io_VMObjectStreamClass.h \
        java_nio_VMDirectByteBuffer.h \
Index: kaffe/include/Makefile.in
diff -u kaffe/include/Makefile.in:1.230 kaffe/include/Makefile.in:1.231
--- kaffe/include/Makefile.in:1.230     Sun May 15 16:50:00 2005
+++ kaffe/include/Makefile.in   Tue May 17 10:20:12 2005
@@ -424,7 +424,6 @@
        java_lang_Math.h \
        java_lang_Runtime.h \
        java_lang_Short.h \
-       java_lang_System.h \
        java_lang_reflect_Array.h \
        java_lang_reflect_Constructor.h \
        java_lang_reflect_Field.h \
@@ -567,6 +566,7 @@
        gnu_java_nio_charset_iconv_IconvEncoder.h \
        gnu_java_nio_channels_FileChannelImpl.h \
        gnu_java_nio_SelectorImpl.h \
+       java_lang_VMSystem.h \
        java_io_VMObjectInputStream.h \
        java_io_VMObjectStreamClass.h \
        java_nio_VMDirectByteBuffer.h \
Index: kaffe/kaffe/kaffevm/baseClasses.c
diff -u kaffe/kaffe/kaffevm/baseClasses.c:1.64 
kaffe/kaffe/kaffevm/baseClasses.c:1.65
--- kaffe/kaffe/kaffevm/baseClasses.c:1.64      Sat May  7 16:20:10 2005
+++ kaffe/kaffe/kaffevm/baseClasses.c   Tue May 17 10:20:13 2005
@@ -63,6 +63,7 @@
 Hjava_lang_Class* StringClass;
 Hjava_lang_Class* ObjectClass;
 Hjava_lang_Class* SystemClass;
+Hjava_lang_Class* RuntimeClass;
 Hjava_lang_Class* SerialClass;
 Hjava_lang_Class* CloneClass;
 Hjava_lang_Class* PtrClass;
@@ -99,11 +100,12 @@
 
 Hjava_lang_ClassLoader* appClassLoader;
 
-#define SYSTEMCLASS "java/lang/System"
-#define        SERIALCLASS "java/io/Serializable"
-#define        CLONECLASS  "java/lang/Cloneable"
-#define        LOADERCLASS "java/lang/ClassLoader"
-#define PTRCLASS    "kaffe/util/Ptr"
+#define RUNTIMECLASS "java/lang/Runtime"
+#define SYSTEMCLASS  "java/lang/System"
+#define        SERIALCLASS  "java/io/Serializable"
+#define        CLONECLASS   "java/lang/Cloneable"
+#define        LOADERCLASS  "java/lang/ClassLoader"
+#define PTRCLASS     "kaffe/util/Ptr"
 
 
 /* Initialisation prototypes */
@@ -316,6 +318,7 @@
         loadStaticClass(&ClassClass, CLASSCLASS);
         loadStaticClass(&StringClass, STRINGCLASS);
         loadStaticClass(&SystemClass, SYSTEMCLASS);
+        loadStaticClass(&RuntimeClass, RUNTIMECLASS);
        
         /* We must to a little cross tidying */
         ObjectClass->head.vtable = ClassClass->vtable;
===================================================================
Checking out kaffe/kaffe/kaffevm/baseClasses.h
RCS:  /home/cvs/kaffe/kaffe/kaffe/kaffevm/baseClasses.h,v
VERS: 1.21
***************
--- /dev/null   Sun Aug  4 19:57:58 2002
+++ kaffe/kaffe/kaffevm/baseClasses.h   Tue May 17 10:25:07 2005
@@ -0,0 +1,72 @@
+/*
+ * baseClasses.h
+ * Handle base classes.
+ *
+ * Copyright (c) 1996, 1997
+ *     Transvirtual Technologies, Inc.  All rights reserved.
+ *
+ * See the file "license.terms" for information on usage and redistribution 
+ * of this file. 
+ */
+
+#ifndef __baseclasses_h
+#define __baseclasses_h
+
+#include "object.h"
+#include "native.h"
+
+#define        STRINGCLASS     "java/lang/String"
+#define        OBJECTCLASS     "java/lang/Object"
+#define        CLASSCLASS      "java/lang/Class"
+#define        APPCLASSLOADERCLASS "kaffe/lang/AppClassLoader"
+
+#define        OBJECTCLASSSIG  "Ljava/lang/Object;"
+
+#define        PTRCLASS        "kaffe/util/Ptr"
+#define        PTRCLASSSIG     "Lkaffe/util/Ptr;"
+
+void initBaseClasses(void);
+void initialiseKaffe(void);
+
+extern struct Hjava_lang_Class*        ObjectClass;
+extern struct Hjava_lang_Class*        StringClass;
+extern struct Hjava_lang_Class*        RuntimeClass;
+extern struct Hjava_lang_Class*        SystemClass;
+extern struct Hjava_lang_Class*        SerialClass;
+extern struct Hjava_lang_Class*        CloneClass;
+extern struct Hjava_lang_Class* PtrClass;
+extern struct Hjava_lang_Class* ClassLoaderClass;
+extern struct Hjava_lang_Class* kaffeLangAppClassLoaderClass;
+
+extern struct Hjava_lang_Class* javaLangRefReference;
+extern struct Hjava_lang_Class* javaLangRefSoftReference;
+extern struct Hjava_lang_Class* javaLangRefWeakReference;
+extern struct Hjava_lang_Class* javaLangRefPhantomReference;
+
+extern struct Hjava_lang_Class*        javaLangVoidClass;
+extern struct Hjava_lang_Class*        javaLangBooleanClass;
+extern struct Hjava_lang_Class*        javaLangByteClass;
+extern struct Hjava_lang_Class*        javaLangCharacterClass;
+extern struct Hjava_lang_Class*        javaLangShortClass;
+extern struct Hjava_lang_Class*        javaLangIntegerClass;
+extern struct Hjava_lang_Class*        javaLangLongClass;
+extern struct Hjava_lang_Class*        javaLangFloatClass;
+extern struct Hjava_lang_Class*        javaLangDoubleClass;
+
+extern struct Hjava_lang_Class* javaLangThrowable;
+extern struct Hjava_lang_Class* javaLangVMThrowable;
+extern struct Hjava_lang_Class* javaLangStackTraceElement;
+extern struct Hjava_lang_Class* javaLangException;
+extern struct Hjava_lang_Class*        javaLangNullPointerException;
+extern struct Hjava_lang_Class*        javaLangArithmeticException;
+extern struct Hjava_lang_Class* javaLangArrayIndexOutOfBoundsException;
+extern struct Hjava_lang_Class* javaLangClassNotFoundException;
+extern struct Hjava_lang_Class* javaLangNoClassDefFoundError;
+extern struct Hjava_lang_Class* javaLangStackOverflowError;
+
+extern struct Hjava_lang_ClassLoader *appClassLoader;
+
+extern Hjava_lang_Class* getClassClass(void);
+extern Hjava_lang_Class* getStringClass(void);
+
+#endif
Index: kaffe/kaffe/kaffevm/thread.c
diff -u kaffe/kaffe/kaffevm/thread.c:1.98 kaffe/kaffe/kaffevm/thread.c:1.99
--- kaffe/kaffe/kaffevm/thread.c:1.98   Sat May 14 21:46:31 2005
+++ kaffe/kaffe/kaffevm/thread.c        Tue May 17 10:20:13 2005
@@ -610,7 +610,7 @@
        }
 
        /* Do java-land cleanup */
-       do_execute_java_method(NULL, SystemClass, "exitJavaCleanup",
+       do_execute_java_method(NULL, RuntimeClass, "exitJavaCleanupHook",
                               "()V", NULL, true);
        if (runFinalizerOnExit) {
                invokeFinalizer();
Index: kaffe/libraries/clib/native/Class.c
diff -u kaffe/libraries/clib/native/Class.c:1.82 
kaffe/libraries/clib/native/Class.c:1.83
--- kaffe/libraries/clib/native/Class.c:1.82    Sat May 14 21:46:53 2005
+++ kaffe/libraries/clib/native/Class.c Tue May 17 10:20:13 2005
@@ -29,7 +29,6 @@
 
 #include "java_io_InputStream.h"
 #include "java_io_PrintStream.h"
-#include "java_lang_System.h"
 #include "java_lang_reflect_Constructor.h"
 #include "java_lang_reflect_Method.h"
 #include "java_lang_reflect_Field.h"
Index: kaffe/libraries/clib/native/Field.c
diff -u kaffe/libraries/clib/native/Field.c:1.19 
kaffe/libraries/clib/native/Field.c:1.20
--- kaffe/libraries/clib/native/Field.c:1.19    Fri Apr 22 21:20:47 2005
+++ kaffe/libraries/clib/native/Field.c Tue May 17 10:20:13 2005
@@ -24,7 +24,6 @@
 #include "exception.h"
 #include "java_io_InputStream.h"
 #include "java_io_PrintStream.h"
-#include "java_lang_System.h"
 #include "java_lang_reflect_Field.h"
 #include <native.h>
 #include "defs.h"
Index: kaffe/libraries/clib/native/Makefile.am
diff -u kaffe/libraries/clib/native/Makefile.am:1.44 
kaffe/libraries/clib/native/Makefile.am:1.45
--- kaffe/libraries/clib/native/Makefile.am:1.44        Sun May 15 16:50:01 2005
+++ kaffe/libraries/clib/native/Makefile.am     Tue May 17 10:20:13 2005
@@ -29,6 +29,7 @@
                Runtime.c \
                String.c \
                System.c \
+               java_lang_VMSystem.c \
                Thread.c \
                ThreadStack.c \
                Throwable.c \
Index: kaffe/libraries/clib/native/Makefile.in
diff -u kaffe/libraries/clib/native/Makefile.in:1.183 
kaffe/libraries/clib/native/Makefile.in:1.184
--- kaffe/libraries/clib/native/Makefile.in:1.183       Sun May 15 16:50:01 2005
+++ kaffe/libraries/clib/native/Makefile.in     Tue May 17 10:20:13 2005
@@ -97,8 +97,9 @@
        libnative_la-MemoryAdvice.lo libnative_la-Object.lo \
        libnative_la-PrimordialClassLoader.lo libnative_la-Runtime.lo \
        libnative_la-String.lo libnative_la-System.lo \
-       libnative_la-Thread.lo libnative_la-ThreadStack.lo \
-       libnative_la-Throwable.lo libnative_la-UNIXProcess.lo \
+       libnative_la-java_lang_VMSystem.lo libnative_la-Thread.lo \
+       libnative_la-ThreadStack.lo libnative_la-Throwable.lo \
+       libnative_la-UNIXProcess.lo \
        libnative_la-gnu_classpath_VMStackWalker.lo \
        libnative_la-gnu_classpath_VMSystemProperties.lo \
        libnative_la-ZipFile.lo
@@ -422,6 +423,7 @@
                Runtime.c \
                String.c \
                System.c \
+               java_lang_VMSystem.c \
                Thread.c \
                ThreadStack.c \
                Throwable.c \
@@ -571,6 +573,7 @@
 @AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
 @AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
 @AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
[EMAIL PROTECTED]@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
 @AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED]/$(DEPDIR)/[EMAIL PROTECTED]@
 
 .c.o:
@@ -670,6 +673,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      source='System.c' 
object='libnative_la-System.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(libnative_la_CFLAGS) $(CFLAGS) -c -o libnative_la-System.lo `test -f 
'System.c' || echo '$(srcdir)/'`System.c
+
+libnative_la-java_lang_VMSystem.lo: java_lang_VMSystem.c
[EMAIL PROTECTED]@      if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(libnative_la_CFLAGS) $(CFLAGS) -MT libnative_la-java_lang_VMSystem.lo -MD -MP 
-MF "$(DEPDIR)/libnative_la-java_lang_VMSystem.Tpo" -c -o 
libnative_la-java_lang_VMSystem.lo `test -f 'java_lang_VMSystem.c' || echo 
'$(srcdir)/'`java_lang_VMSystem.c; \
[EMAIL PROTECTED]@      then mv -f 
"$(DEPDIR)/libnative_la-java_lang_VMSystem.Tpo" 
"$(DEPDIR)/libnative_la-java_lang_VMSystem.Plo"; else rm -f 
"$(DEPDIR)/libnative_la-java_lang_VMSystem.Tpo"; exit 1; fi
[EMAIL PROTECTED]@@am__fastdepCC_FALSE@ source='java_lang_VMSystem.c' 
object='libnative_la-java_lang_VMSystem.lo' libtool=yes @AMDEPBACKSLASH@
[EMAIL PROTECTED]@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
[EMAIL PROTECTED]@      $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(libnative_la_CFLAGS) $(CFLAGS) -c -o libnative_la-java_lang_VMSystem.lo `test 
-f 'java_lang_VMSystem.c' || echo '$(srcdir)/'`java_lang_VMSystem.c
 
 libnative_la-Thread.lo: Thread.c
 @am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(libnative_la_CFLAGS) $(CFLAGS) -MT libnative_la-Thread.lo -MD -MP -MF 
"$(DEPDIR)/libnative_la-Thread.Tpo" -c -o libnative_la-Thread.lo `test -f 
'Thread.c' || echo '$(srcdir)/'`Thread.c; \
===================================================================
Checking out kaffe/libraries/clib/native/System.c
RCS:  /home/cvs/kaffe/kaffe/libraries/clib/native/System.c,v
VERS: 1.65
***************
--- /dev/null   Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/clib/native/System.c        Tue May 17 10:25:08 2005
@@ -0,0 +1,178 @@
+/*
+ * java.lang.System.c
+ *
+ * Copyright (c) 1996, 1997, 1998, 1999
+ *     Transvirtual Technologies, Inc.  All rights reserved.
+ * Copyright (c) 2003
+ *     Mark J. Wielaard <[EMAIL PROTECTED]>
+ *
+ * See the file "license.terms" for information on usage and redistribution 
+ * of this file. 
+ */
+
+#include "config.h"
+#include "config-std.h"
+#include "config-io.h"
+#include "config-mem.h"
+#if defined(HAVE_SYS_UTSNAME_H)
+#include <sys/utsname.h>
+#endif
+#if defined(HAVE_PWD_H)
+#include <pwd.h>
+#endif
+#include <sys/time.h>
+#include <time.h>
+#include <ctype.h>
+#include "classMethod.h"
+#include "gtypes.h"
+#include "object.h"
+#include "constants.h"
+#include "access.h"
+#include "baseClasses.h"
+#include "stringSupport.h"
+#include "support.h"
+#include "external.h"
+#include "soft.h"
+#include "debug.h"
+#include "exception.h"
+#include "system.h"
+#include "defs.h"
+#include "java_io_InputStream.h"
+#include "java_io_PrintStream.h"
+#include "java_lang_VMSystem.h"
+#include "java_lang_Throwable.h"
+#include <native.h>
+#include <jni.h>
+
+#include <locale.h>
+
+extern void printStackTrace(struct Hjava_lang_Throwable*,
+       struct Hjava_lang_Object*, int);
+
+jint
+java_lang_VMSystem_identityHashCode(struct Hjava_lang_Object* o)
+{
+  /* Hash code is object's address */
+  return ((jint)(jword)o);
+}
+
+/*
+ * See java/lang/System.java for info on these two routines.
+ */
+void
+java_lang_System_debug(struct Hjava_lang_String *str)
+{
+       char *s;
+
+       s = checkPtr(stringJava2C(str));
+       dprintf("%s\n", s);
+       gc_free(s);
+}
+
+void
+java_lang_System_debugE(struct Hjava_lang_Throwable *t)
+{
+       Hjava_lang_String *msg;
+       const char *cname;
+       char *s;
+
+       cname = CLASS_CNAME(OBJECT_CLASS(&t->base));
+       msg = unhand(t)->detailMessage;
+
+       if (msg) {
+               s = checkPtr(stringJava2C(msg));
+               dprintf("%s: %s\n", cname, s);
+               gc_free(s);
+       } else {
+               dprintf("%s\n", cname);
+       }
+       printStackTrace(t, NULL, 1);
+}
+
+void
+java_lang_VMSystem_arraycopy0(struct Hjava_lang_Object* src,
+                             jint srcpos,
+                             struct Hjava_lang_Object* dst,
+                             jint dstpos,
+                             jint len)
+{
+       char* in;        
+       char* out;       
+       int elemsz;      
+       Hjava_lang_Class* sclass;        
+       Hjava_lang_Class* dclass;
+
+       sclass = OBJECT_CLASS(src);      
+       dclass = OBJECT_CLASS(dst);
+
+       sclass = CLASS_ELEMENT_TYPE(sclass);     
+       dclass = CLASS_ELEMENT_TYPE(dclass);     
+       elemsz = TYPE_SIZE(sclass);      
+
+       len *= elemsz;   
+       srcpos *= elemsz;        
+       dstpos *= elemsz;        
+
+       in = &((char*)ARRAY_DATA(src))[srcpos];          
+       out = &((char*)ARRAY_DATA(dst))[dstpos];
+
+       if (sclass == dclass) {
+#if defined(HAVE_MEMMOVE)       
+               memmove((void*)out, (void*)in, (size_t)len);     
+#else   
+               /* Do it ourself */      
+#if defined(HAVE_MEMCPY)        
+               if (src != dst) {        
+                       memcpy((void*)out, (void*)in, (size_t)len);      
+               } else   
+#endif          
+               if (out < in) {          
+                       /* Copy forwards */      
+                       for (; len > 0; len--) {         
+                               *out++ = *in++;          
+                       }        
+               } else {         
+                       /* Copy backwards */     
+                       out += len;      
+                       in += len;       
+                       for (; len > 0; len--) {         
+                               *--out = *--in;          
+                       }        
+               }        
+#endif          
+       } else {
+               if (CLASS_IS_PRIMITIVE(sclass) || CLASS_IS_PRIMITIVE(dclass)) {
+                 Hjava_lang_Throwable* asexc;
+                 const char *stype = CLASS_CNAME(sclass);
+                 const char *dtype = CLASS_CNAME(dclass);
+                 char *b;
+#define _FORMAT "incompatible array types `%s' and `%s'"
+                 b = 
checkPtr(KMALLOC(strlen(stype)+strlen(dtype)+strlen(_FORMAT)));
+                 sprintf(b, _FORMAT, stype, dtype);
+#undef _FORMAT
+                 asexc = ArrayStoreException(b);
+                 KFREE(b);
+                 throwException(asexc);
+               }
+
+               for (; len > 0; len -= sizeof(Hjava_lang_Object*)) {     
+                       Hjava_lang_Object* val = *(Hjava_lang_Object**)in;      
 
+                       if (val != 0 && !instanceof(dclass, OBJECT_CLASS(val))) 
{        
+                         Hjava_lang_Throwable* asexc;
+                         const char *vtype = CLASS_CNAME(OBJECT_CLASS(val));
+                         const char *atype = CLASS_CNAME(dclass);
+                         char *b;
+#define _FORMAT "can't store `%s' in array of type `%s'"
+                         b = 
checkPtr(KMALLOC(strlen(vtype)+strlen(atype)+strlen(_FORMAT)));
+                         sprintf(b, _FORMAT, vtype, atype);
+#undef _FORMAT
+                         asexc = ArrayStoreException(b);
+                         KFREE(b);
+                         throwException(asexc);
+                       }
+                       *(Hjava_lang_Object**)out = val;         
+                       in += sizeof(Hjava_lang_Object*);        
+                       out += sizeof(Hjava_lang_Object*);       
+               }
+       }
+}
===================================================================
Checking out kaffe/libraries/clib/native/java_lang_VMSystem.c
RCS:  /home/cvs/kaffe/kaffe/libraries/clib/native/java_lang_VMSystem.c,v
VERS: 1.1
***************
--- /dev/null   Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/clib/native/java_lang_VMSystem.c    Tue May 17 10:25:08 2005
@@ -0,0 +1,156 @@
+/* System.c -- native code for java.lang.System
+   Copyright (C) 1998, 1999, 2000, 2002, 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. */
+
+#include "java_lang_VMSystem.h"
+
+#include <jcl.h>
+
+#include <sys/time.h>
+#include <stdlib.h>
+
+/*
+ * Class:     java_lang_VMSystem
+ * Method:    setIn0
+ * Signature: (Ljava/io/InputStream;)V
+ */
+JNIEXPORT void JNICALL
+Java_java_lang_VMSystem_setIn (JNIEnv * env,
+                              jclass thisClass __attribute__ ((__unused__)),
+                              jobject obj)
+{
+  jclass cls;
+  jfieldID field;
+
+  cls = JCL_FindClass (env, "java/lang/System");
+  if (!cls)
+    return;
+
+  field = (*env)->GetStaticFieldID (env, cls, "in", "Ljava/io/InputStream;");
+  if (!field)
+    return;
+  (*env)->SetStaticObjectField (env, cls, field, obj);
+}
+
+/*
+ * Class:     java_lang_VMSystem
+ * Method:    setOut0
+ * Signature: (Ljava/io/PrintStream;)V
+ */
+JNIEXPORT void JNICALL
+Java_java_lang_VMSystem_setOut (JNIEnv * env,
+                               jclass thisClass __attribute__ ((__unused__)),
+                               jobject obj)
+{
+  jclass cls;
+  jfieldID field;
+
+  cls = JCL_FindClass (env, "java/lang/System");
+  if (!cls)
+    return;
+
+  field = (*env)->GetStaticFieldID (env, cls, "out", "Ljava/io/PrintStream;");
+  if (!field)
+    return;
+  (*env)->SetStaticObjectField (env, cls, field, obj);
+}
+
+/*
+ * Class:     java_lang_VMSystem
+ * Method:    setErr0
+ * Signature: (Ljava/io/PrintStream;)V
+ */
+JNIEXPORT void JNICALL
+Java_java_lang_VMSystem_setErr (JNIEnv * env,
+                               jclass thisClass __attribute__ ((__unused__)),
+                               jobject obj)
+{
+  jclass cls;
+  jfieldID field;
+
+  cls = JCL_FindClass (env, "java/lang/System");
+  if (!cls)
+    return;
+
+  field = (*env)->GetStaticFieldID (env, cls, "err", "Ljava/io/PrintStream;");
+  if (!field)
+    return;
+  (*env)->SetStaticObjectField (env, cls, field, obj);
+}
+
+/*
+ * Class:     java_lang_VMSystem
+ * Method:    currentTimeMillis
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL
+Java_java_lang_VMSystem_currentTimeMillis
+  (JNIEnv * env __attribute__ ((__unused__)),
+   jclass thisClass __attribute__ ((__unused__)))
+{
+  /* Note: this implementation copied directly from Japhar's, by Chris Toshok. 
*/
+  jlong result;
+  struct timeval tp;
+
+  if (gettimeofday (&tp, NULL) == -1)
+    (*env)->FatalError (env, "gettimeofday call failed.");
+
+  result = (jlong) tp.tv_sec;
+  result *= 1000;
+  result += (tp.tv_usec / 1000);
+
+  return result;
+}
+
+JNIEXPORT jstring JNICALL
+Java_java_lang_VMSystem_getenv (JNIEnv * env,
+                               jclass klass __attribute__ ((__unused__)),
+                               jstring jname)
+{
+  const char *cname;
+  const char *envname;
+
+  cname = JCL_jstring_to_cstring (env, jname);
+  if (cname == NULL)
+    return NULL;
+
+  envname = getenv (cname);
+  if (envname == NULL)
+    return NULL;
+
+  JCL_free_cstring (env, jname, cname);
+  return (*env)->NewStringUTF (env, envname);
+}
Index: kaffe/libraries/javalib/Makefile.am
diff -u kaffe/libraries/javalib/Makefile.am:1.350 
kaffe/libraries/javalib/Makefile.am:1.351
--- kaffe/libraries/javalib/Makefile.am:1.350   Mon May 16 12:13:45 2005
+++ kaffe/libraries/javalib/Makefile.am Tue May 17 10:20:14 2005
@@ -2684,6 +2684,7 @@
        java/lang/VMDouble.java \
        java/lang/VMFloat.java \
        java/lang/VMObject.java \
+       java/lang/VMSystem.java \
        java/lang/VMThread.java \
        java/lang/VMThrowable.java \
        java/lang/VerifyError.java \
Index: kaffe/libraries/javalib/Makefile.in
diff -u kaffe/libraries/javalib/Makefile.in:1.440 
kaffe/libraries/javalib/Makefile.in:1.441
--- kaffe/libraries/javalib/Makefile.in:1.440   Mon May 16 12:13:46 2005
+++ kaffe/libraries/javalib/Makefile.in Tue May 17 10:20:15 2005
@@ -3186,6 +3186,7 @@
        java/lang/VMDouble.java \
        java/lang/VMFloat.java \
        java/lang/VMObject.java \
+       java/lang/VMSystem.java \
        java/lang/VMThread.java \
        java/lang/VMThrowable.java \
        java/lang/VerifyError.java \
Index: kaffe/libraries/javalib/gnu/classpath/VMStackWalker.java
diff -u kaffe/libraries/javalib/gnu/classpath/VMStackWalker.java:1.1 
kaffe/libraries/javalib/gnu/classpath/VMStackWalker.java:1.2
--- kaffe/libraries/javalib/gnu/classpath/VMStackWalker.java:1.1        Sun May 
15 16:50:06 2005
+++ kaffe/libraries/javalib/gnu/classpath/VMStackWalker.java    Tue May 17 
10:20:18 2005
@@ -52,6 +52,25 @@
 public final class VMStackWalker
 {
   /**
+   * When calling <code>getCallingClass()</code> and 
+   * <code>getCallingClassLoader()</code>, the minimal number of frames 
+   * on the stack needs to be 4. The frames on the stack look like this:
+   *
+   * <ul>
+   * <li><code>getClassContext()</code>
+   * <li><code>getCallingClass()</code> | <code>getCallingClassLoader()</code>
+   * <li>method invoking it
+   * <li>method whose <code>Class</code> or <code>ClassLoader</code> we need
+   * </ul>
+   */
+  private static final int MINIMAL_NUMBER_OF_FRAMES = 4;
+
+  /**
+   * The frame of the caller's caller.
+   */
+  private static final int CALLERS_CALLER_FRAME = MINIMAL_NUMBER_OF_FRAMES - 1;
+
+  /**
    * Get a list of all the classes currently executing methods on the
    * Java stack. <code>getClassContext()[0]</code> is the class associated
    * with the currently executing method, i.e., the method that called
@@ -81,9 +100,9 @@
   public static Class getCallingClass()
   {
     Class[] ctx = getClassContext();
-    if (ctx.length < 3)
+    if (ctx.length < MINIMAL_NUMBER_OF_FRAMES)
       return null;
-    return ctx[2];
+    return ctx[CALLERS_CALLER_FRAME];
   }
 
   /**
@@ -100,9 +119,9 @@
   public static ClassLoader getCallingClassLoader()
   {
     Class[] ctx = getClassContext();
-    if (ctx.length < 3)
+    if (ctx.length < MINIMAL_NUMBER_OF_FRAMES)
       return null;
-    return ctx[2].getClassLoader();
+    return ctx[CALLERS_CALLER_FRAME].getClassLoader();
   }
 }
 
===================================================================
Checking out kaffe/libraries/javalib/java/lang/Runtime.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/java/lang/Runtime.java,v
VERS: 1.32
***************
--- /dev/null   Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/java/lang/Runtime.java      Tue May 17 10:25:08 2005
@@ -0,0 +1,327 @@
+/*
+ * Java core library component.
+ *
+ * Copyright (c) 1997, 1998
+ *      Transvirtual Technologies, Inc.  All rights reserved.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file.
+ */
+
+package java.lang;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Enumeration;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import kaffe.lang.ThreadStack;
+
+public class Runtime
+{
+/**
+ *  XXX This is not part of the public interface.
+ */
+public interface MemoryAdvice {
+
+       // These should match those in kaffe.lang.MemoryAdvice
+       int GREEN = 0;
+       int YELLOW = 1;
+       int ORANGE = 2;
+       int RED = 3;
+}
+
+private static Runtime currentRuntime = new Runtime();
+private static kaffe.lang.MemoryAdvice advice
+       = kaffe.lang.MemoryAdvice.getInstance();
+private static final Vector shutdownHooks = new Vector(0);
+private static boolean VMShuttingDown = false;
+
+private static final RuntimePermission SHUTDOWN_HOOKS =
+       new RuntimePermission("shutdownHooks");
+
+private Runtime () {
+}
+
+public Process exec(String command) throws IOException {
+       return exec(command, null, null);
+}
+
+public Process exec(String command, String envp[]) throws IOException {
+       return exec(command, envp, null);
+}
+
+public Process exec(String command, String envp[], File dir)
+               throws IOException {
+       StringTokenizer tokenizer=new StringTokenizer(command);
+
+       int count=tokenizer.countTokens();
+       String cmdarray[]=new String[count];
+
+       for (int pos=0; pos<count; pos++) {
+               cmdarray[pos]=tokenizer.nextToken();
+       }
+
+       return exec(cmdarray, envp, dir);
+}
+
+public Process exec(String cmdarray[]) throws IOException {
+       return exec(cmdarray, null, null);
+}
+
+public Process exec(String cmdarray[], String envp[]) throws IOException {
+       return exec(cmdarray, envp, null);
+}
+
+public Process exec(String[] cmdarray, String[] envp, File dir)
+               throws IOException {
+       SecurityManager sm = System.getSecurityManager();
+       if (sm != null)
+               sm.checkExec(cmdarray[0]);
+       return execInternal(cmdarray, envp, dir);
+}
+
+private native Process execInternal(String cmdary[], String envp[], File dir)
+       throws IOException;
+
+/**
+ * Callback used to execute the shutdown hooks.
+ */
+boolean exitJavaCleanup() {
+       return runShutdownHooks();
+}
+
+public void exit(int status) throws SecurityException {
+       SecurityManager sm = System.getSecurityManager();
+       if (sm != null)
+               sm.checkExit(status);
+
+       /* First we cleanup the Virtual Machine */
+       if (!exitJavaCleanup())
+               /* Throw ThreadDeath to kill the currently running thread. */
+               throw new ThreadDeath();
+
+       /* Now we run the VM exit function */
+       exit0(status);
+}
+
+public void halt(int status) throws SecurityException {
+       SecurityManager sm = System.getSecurityManager();
+       if (sm != null)
+               sm.checkExit(status);
+
+       exit0(status);
+}
+
+native private void exit0(int status);
+
+native public long freeMemory();
+
+native public void gc();
+
+/**
+ * @deprecated
+ */
+public InputStream getLocalizedInputStream(InputStream in) {
+       return (in);
+}
+
+/**
+ * @deprecated
+ */
+public OutputStream getLocalizedOutputStream(OutputStream out) {
+       return (out);
+}
+
+public static Runtime getRuntime() {
+       return currentRuntime;
+}
+
+public void loadLibrary(String libname) {
+       loadLibrary(libname,
+                   ThreadStack.getCallersClassLoader(false));
+}
+
+   /**
+    * Tries to load and link a native library.
+    *
+    * @return true if successfull
+    * @throws UnsatisfiedLinkError if the library was found but could not be 
linked.
+    */
+   private static native boolean linkLibrary(String name, ClassLoader loader)
+      throws UnsatisfiedLinkError;
+
+   private static native String getLibPrefix ();
+   private static native String getLibSuffix ();
+
+   static String mapLibraryName (String name)
+   {
+      return getLibPrefix() + name + getLibSuffix();
+   }
+
+void loadLibrary(String libname, ClassLoader loader) throws 
UnsatisfiedLinkError {
+       SecurityManager sm = System.getSecurityManager();
+       if (sm != null)
+               sm.checkLink(libname);
+       String errmsg = libname + ": not found";
+       String filename;
+       String[] names;
+
+       if (loader != null && (filename = loader.findLibrary(libname)) != null) 
{
+               if (linkLibrary(filename, loader))
+                       return;
+       } else {
+               String libPath = System.getProperty("kaffe.library.path")
+                                + File.pathSeparatorChar
+                                + System.getProperty("java.library.path");
+
+               StringTokenizer t = new StringTokenizer(libPath,
+                                       new String(new char[] { 
File.pathSeparatorChar }));
+               while (t.hasMoreTokens ()) {
+                       if (linkLibrary(t.nextToken() + File.separator + 
mapLibraryName(libname),
+                                       loader))
+                               return;
+               }
+       }
+       throw new UnsatisfiedLinkError("Could not find library '" + libname +
+                                      "'\nAdding its directory to 
LD_LIBRARY_PATH may help.");
+}
+
+public void load(String filename) {
+       load(filename, ThreadStack.getCallersClassLoader(false));
+}
+
+void load(String filename, ClassLoader loader) {
+       SecurityManager sm = System.getSecurityManager();
+       if (sm != null)
+               sm.checkLink(filename);
+
+       if (!linkLibrary(filename, loader))
+               throw new UnsatisfiedLinkError(filename + ": not found");
+}
+
+native public long maxMemory();
+
+int getMemoryAdvice() {
+       return (advice.getColor());
+}
+
+int waitForMemoryAdvice(int level) throws InterruptedException {
+       return (advice.waitForOtherColor(level));
+}
+

*** Patch too long, truncated ***

_______________________________________________
kaffe mailing list
kaffe@kaffe.org
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to