X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=tables.c;h=9cbd95e9ae8a8ea4091834cbc91f074b72abf05b;hb=8614dad1cecffc80317d6c41be07611d6ff1f1ae;hp=197fd4ae29dc1b764ab367f4c94d783d91714fcb;hpb=0e3819bd399e1b843bc909ef24cd2927abbd07ab;p=cacao.git diff --git a/tables.c b/tables.c index 197fd4ae2..9cbd95e9a 100644 --- a/tables.c +++ b/tables.c @@ -35,7 +35,7 @@ - the heap - additional support functions - $Id: tables.c 1240 2004-06-30 20:07:25Z twisti $ + $Id: tables.c 1482 2004-11-11 14:39:13Z twisti $ */ @@ -47,7 +47,10 @@ #include #include #include +#include "builtin.h" +#include "exceptions.h" #include "types.h" +#include "native.h" #include "options.h" #include "tables.h" #include "loader.h" @@ -166,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 */ @@ -187,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 */ @@ -241,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 */ @@ -262,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 */ @@ -1091,6 +1122,9 @@ classinfo *class_new_intern(utf *classname) } } } +#if defined(USE_THREADS) && defined(NATIVE_THREADS) + initObjectLock(&c->header); +#endif return c; } @@ -1341,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++;