From 4a8b1205cac432ea6096077519789ecd90793924 Mon Sep 17 00:00:00 2001 From: michi Date: Tue, 21 Aug 2007 11:16:03 +0000 Subject: [PATCH] * src/cacaoh/headers.c (HEAP_PREFIX): Added define. (printtype): Added arguments prefix and infix. (printfields): Pass correct prefix for reference types. (printmethod): Pass correct infix for array types. (headerfile_generate): Print correct prefix for heap object. (headerfile_generate) [ENABLE_HANDLES]: Also create struct typedef for handle. --HG-- branch : exact-gc --- m4/classpath.m4 | 2 +- src/cacaoh/headers.c | 55 +++++++++++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/m4/classpath.m4 b/m4/classpath.m4 index 2b11adc8d..42345e8de 100644 --- a/m4/classpath.m4 +++ b/m4/classpath.m4 @@ -22,7 +22,7 @@ dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA dnl 02110-1301, USA. dnl -dnl $Id: classpath.m4 8248 2007-07-31 12:47:11Z twisti $ +dnl $Id: classpath.m4 8299 2007-08-13 08:41:18Z michi $ dnl which Java core library should we use diff --git a/src/cacaoh/headers.c b/src/cacaoh/headers.c index 2dccb9855..11548b122 100644 --- a/src/cacaoh/headers.c +++ b/src/cacaoh/headers.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: headers.c 8318 2007-08-16 10:05:34Z michi $ + $Id: headers.c 8377 2007-08-21 11:16:03Z michi $ */ @@ -63,6 +63,12 @@ #define ACC_NATIVELY_OVERLOADED 0x10000000 +#if defined(ENABLE_HANDLES) +# define HEAP_PREFIX "heap_" +#else +# define HEAP_PREFIX "" +#endif + chain *ident_chain; /* chain with method and field names in current class */ FILE *file = NULL; static uint32_t outputsize; @@ -145,7 +151,7 @@ void printOverloadPart(utf *desc) } } -static char *printtype(char *utf_ptr) +static char *printtype(char *utf_ptr, char *prefix, char *infix) { uint16_t c; @@ -176,22 +182,22 @@ static char *printtype(char *utf_ptr) case '[': addoutputsize ( sizeof(java_array_t*) ); switch (utf_nextu2(&utf_ptr)) { - case 'I': fprintf (file, "java_intarray_t*"); break; - case 'J': fprintf (file, "java_longarray_t*"); break; - case 'Z': fprintf (file, "java_booleanarray_t*"); break; - case 'B': fprintf (file, "java_bytearray_t*"); break; - case 'S': fprintf (file, "java_shortarray_t*"); break; - case 'C': fprintf (file, "java_chararray_t*"); break; - case 'F': fprintf (file, "java_floatarray_t*"); break; - case 'D': fprintf (file, "java_doublearray_t*"); break; + case 'I': fprintf (file, "java%s_intarray_t*", infix); break; + case 'J': fprintf (file, "java%s_longarray_t*", infix); break; + case 'Z': fprintf (file, "java%s_booleanarray_t*", infix); break; + case 'B': fprintf (file, "java%s_bytearray_t*", infix); break; + case 'S': fprintf (file, "java%s_shortarray_t*", infix); break; + case 'C': fprintf (file, "java%s_chararray_t*", infix); break; + case 'F': fprintf (file, "java%s_floatarray_t*", infix); break; + case 'D': fprintf (file, "java%s_doublearray_t*", infix); break; - case '[': fprintf(file, "java_objectarray_t*"); + case '[': fprintf(file, "java%s_objectarray_t*", infix); while ((c = utf_nextu2(&utf_ptr)) == '['); if (c == 'L') while (utf_nextu2(&utf_ptr) != ';'); break; - case 'L': fprintf(file, "java_objectarray_t*"); + case 'L': fprintf(file, "java%s_objectarray_t*", infix); while (utf_nextu2(&utf_ptr) != ';'); break; default: @@ -202,7 +208,7 @@ static char *printtype(char *utf_ptr) case 'L': addoutputsize ( sizeof(java_object_t*)); - fprintf (file, "struct "); + fprintf (file, "struct %s", prefix); while ( (c = utf_nextu2(&utf_ptr)) != ';' ) printIDpart (c); fprintf (file, "*"); break; @@ -253,7 +259,7 @@ static void printfields(classinfo *c) if (!(f->flags & ACC_STATIC)) { fprintf(file, " "); - printtype(f->descriptor->text); + printtype(f->descriptor->text, HEAP_PREFIX, ""); fprintf(file, " "); utf_fprint_printable_ascii(file, f->name); @@ -290,7 +296,7 @@ void printmethod(methodinfo *m) /* create prototype */ fprintf(file, "JNIEXPORT "); - printtype(utf_ptr); + printtype(utf_ptr, "", "_handle"); fprintf(file, " JNICALL Java_"); printID(m->class->name); @@ -320,7 +326,7 @@ void printmethod(methodinfo *m) if ((*utf_ptr) != ')') fprintf(file, ", "); while ((*utf_ptr) != ')') { - utf_ptr = printtype(utf_ptr); + utf_ptr = printtype(utf_ptr, "", "_handle"); fprintf(file, " par%d", paramnum++); if ((*utf_ptr)!=')') fprintf(file, ", "); } @@ -397,17 +403,30 @@ void headerfile_generate(classinfo *c, char *opt_directory) fprintf(file, "/* Structure information for class: "); utf_fprint_printable_ascii(file, c->name); fprintf(file, " */\n\n"); - fprintf(file, "typedef struct "); - printID(c->name); + fprintf(file, "typedef struct %s", HEAP_PREFIX); + printID(c->name); fprintf(file, " {\n"); outputsize = 0; dopadding = true; printfields(c); + fprintf(file, "} %s", HEAP_PREFIX); + printID(c->name); + fprintf(file, ";\n\n"); + +#if defined(ENABLE_HANDLES) + /* create structure for indirection cell */ + fprintf(file, "typedef struct "); + printID(c->name); + fprintf(file, " {\n"); + fprintf(file, " %s", HEAP_PREFIX); + printID(c->name); + fprintf(file, " *heap_object;\n"); fprintf(file, "} "); printID(c->name); fprintf(file, ";\n\n"); +#endif /* create chain for renaming overloaded methods */ chain_free(ident_chain); -- 2.25.1