X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=tables.c;h=9cbd95e9ae8a8ea4091834cbc91f074b72abf05b;hb=8614dad1cecffc80317d6c41be07611d6ff1f1ae;hp=d9bab4cdad3598fce6fc955806e7499707d50bb4;hpb=9b53e16b4d18f9b75aa74336dd5d83036ea08501;p=cacao.git diff --git a/tables.c b/tables.c index d9bab4cda..9cbd95e9a 100644 --- a/tables.c +++ b/tables.c @@ -35,7 +35,7 @@ - the heap - additional support functions - $Id: tables.c 1195 2004-06-20 19:44:46Z twisti $ + $Id: tables.c 1482 2004-11-11 14:39:13Z twisti $ */ @@ -47,22 +47,21 @@ #include #include #include +#include "builtin.h" +#include "exceptions.h" #include "types.h" -#include "main.h" +#include "native.h" +#include "options.h" #include "tables.h" #include "loader.h" #include "asmpart.h" +#include "statistics.h" #include "threads/thread.h" #include "threads/locks.h" #include "toolbox/logging.h" #include "toolbox/memory.h" -/* statistics */ -int count_utf_len = 0; /* size of utf hash */ -int count_utf_new = 0; /* calls of utf_new */ -int count_utf_new_found = 0; /* calls of utf_new with fast return */ - hashtable utf_hash; /* hashtable for utf8-symbols */ hashtable string_hash; /* hashtable for javastrings */ hashtable class_hash; /* hashtable for classes */ @@ -170,15 +169,21 @@ void tables_close() write utf symbol to stdout (debugging purposes) -******************************************************************************/ +*******************************************************************************/ void utf_display(utf *u) { - char *endpos = utf_end(u); /* points behind utf string */ - char *utf_ptr = u->text; /* current position in utf text */ + char *endpos; /* points behind utf string */ + char *utf_ptr; /* current position in utf text */ - if (!u) + if (!u) { + printf("NULL"); + fflush(stdout); return; + } + + endpos = utf_end(u); + utf_ptr = u->text; while (utf_ptr < endpos) { /* read next unicode character */ @@ -191,19 +196,25 @@ void utf_display(utf *u) } -/********************* function: utf_display ********************************* +/* utf_display_classname ******************************************************* - write utf symbol to stdout (debugging purposes) + write utf symbol to stdout (debugging purposes) -******************************************************************************/ +*******************************************************************************/ void utf_display_classname(utf *u) { - char *endpos = utf_end(u); /* points behind utf string */ - char *utf_ptr = u->text; /* current position in utf text */ + char *endpos; /* points behind utf string */ + char *utf_ptr; /* current position in utf text */ - if (!u) + if (!u) { + printf("NULL"); + fflush(stdout); return; + } + + endpos = utf_end(u); + utf_ptr = u->text; while (utf_ptr < endpos) { /* read next unicode character */ @@ -245,17 +256,25 @@ void log_plain_utf(utf *u) } -/************************ function: utf_sprint ******************************* +/* utf_sprint ****************************************************************** - write utf symbol into c-string (debugging purposes) + write utf symbol into c-string (debugging purposes) -******************************************************************************/ +*******************************************************************************/ void utf_sprint(char *buffer, utf *u) { - char *endpos = utf_end(u); /* points behind utf string */ - char *utf_ptr = u->text; /* current position in utf text */ - u2 pos = 0; /* position in c-string */ + char *endpos; /* points behind utf string */ + char *utf_ptr; /* current position in utf text */ + u2 pos = 0; /* position in c-string */ + + if (!u) { + memcpy(buffer, "NULL", 5); /* 4 chars + terminating \0 */ + return; + } + + endpos = utf_end(u); + utf_ptr = u->text; while (utf_ptr < endpos) /* copy next unicode character */ @@ -266,17 +285,25 @@ void utf_sprint(char *buffer, utf *u) } -/************************ function: utf_sprint_classname ********************* +/* utf_sprint_classname ******************************************************** - write utf symbol into c-string (debugging purposes) + write utf symbol into c-string (debugging purposes) -******************************************************************************/ +*******************************************************************************/ void utf_sprint_classname(char *buffer, utf *u) { - char *endpos = utf_end(u); /* points behind utf string */ - char *utf_ptr = u->text; /* current position in utf text */ - u2 pos = 0; /* position in c-string */ + char *endpos; /* points behind utf string */ + char *utf_ptr; /* current position in utf text */ + u2 pos = 0; /* position in c-string */ + + if (!u) { + memcpy(buffer, "NULL", 5); /* 4 chars + terminating \0 */ + return; + } + + endpos = utf_end(u); + utf_ptr = u->text; while (utf_ptr < endpos) { /* copy next unicode character */ @@ -1095,6 +1122,9 @@ classinfo *class_new_intern(utf *classname) } } } +#if defined(USE_THREADS) && defined(NATIVE_THREADS) + initObjectLock(&c->header); +#endif return c; } @@ -1345,9 +1375,17 @@ classinfo *class_multiarray_of(int dim, classinfo *element) u4 utf_strlen(utf *u) { - char *endpos = utf_end(u); /* points behind utf string */ - char *utf_ptr = u->text; /* current position in utf text */ - u4 len = 0; /* number of unicode characters */ + char *endpos; /* points behind utf string */ + char *utf_ptr; /* current position in utf text */ + u4 len = 0; /* number of unicode characters */ + + if (!u) { + *exceptionptr = new_nullpointerexception(); + return 0; + } + + endpos = utf_end(u); + utf_ptr = u->text; while (utf_ptr < endpos) { len++;