* Merged executionstate branch.
[cacao.git] / src / vm / string.c
index e0c1e6708918ac5cd31259f9c0882d514ce07f63..f24e411e021c0c35c86777787ab5dbf063f56f98 100644 (file)
@@ -1,9 +1,7 @@
 /* src/vm/string.c - java.lang.String related functions
 
-   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
-   C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
-   E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
-   J. Wenninger, Institut f. Computersprachen - TU Wien
+   Copyright (C) 1996-2005, 2006, 2007, 2008
+   CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
 
    This file is part of CACAO.
 
@@ -29,6 +27,8 @@
 
 #include <assert.h>
 
+#include "vmcore/system.h"
+
 #include "vm/types.h"
 
 #include "vm/global.h"
@@ -85,6 +85,8 @@ typedef java_lang_String heapstring_t;
 
 bool string_init(void)
 {
+       TRACESUBSYSTEMINITIALIZATION("string_init");
+
        /* create string (javastring) hashtable */
 
        hashtable_create(&hashtable_string, HASHTABLE_STRING_SIZE);
@@ -228,7 +230,8 @@ java_handle_t *javastring_safe_new_from_utf8(const char *text)
        s4 nbytes;
        s4 len;
 
-       assert(text);
+       if (text == NULL)
+               return NULL;
 
        /* Get number of bytes. We need this to completely emulate the messy */
        /* behaviour of the RI. :(                                           */
@@ -508,6 +511,10 @@ utf *javastring_toutf(java_handle_t *string, bool isclassname)
                return utf_null;
 
        LLNI_field_get_ref(s, value, value);
+
+       if (value == NULL)
+               return utf_null;
+
        LLNI_field_get_val(s, count, count);
        LLNI_field_get_val(s, offset, offset);
 
@@ -705,6 +712,9 @@ java_object_t *literalstring_new(utf *u)
 
 *******************************************************************************/
 
+#if 0
+/* TWISTI This one is currently not used. */
+
 static void literalstring_free(java_object_t* string)
 {
        heapstring_t     *s;
@@ -719,6 +729,7 @@ static void literalstring_free(java_object_t* string)
        /* dispose memory of java-characterarray */
        FREE(a, sizeof(java_chararray_t) + sizeof(u2) * (a->header.size - 1)); /* +10 ?? */
 }
+#endif
 
 
 /* javastring_intern ***********************************************************
@@ -751,13 +762,13 @@ java_handle_t *javastring_intern(java_handle_t *s)
 }
 
 
-/* javastring_print ************************************************************
+/* javastring_fprint ***********************************************************
 
-   Print the given Java string.
+   Print the given Java string to the given stream.
 
 *******************************************************************************/
 
-void javastring_print(java_handle_t *s)
+void javastring_fprint(java_handle_t *s, FILE *stream)
 {
        java_lang_String        *so;
        java_handle_chararray_t *value;
@@ -774,7 +785,7 @@ void javastring_print(java_handle_t *s)
 
        for (i = offset; i < offset + count; i++) {
                c = LLNI_array_direct(value, i);
-               putchar(c);
+               fputc(c, stream);
        }
 }