diff options
-rw-r--r-- | gcc/java/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/java/gjavah.c | 20 |
2 files changed, 20 insertions, 5 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index fbb6773..c49c919 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +1999-09-02 Tom Tromey <tromey@cygnus.com> + + * gjavah.c (decode_signature_piece): Emit "::" in JArray<>. + Handle nested arrays, like `[[I'. + 1999-09-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * class.c (finish_class): Remove unused parameter, all callers diff --git a/gcc/java/gjavah.c b/gcc/java/gjavah.c index 0859e3d..1fd8493 100644 --- a/gcc/java/gjavah.c +++ b/gcc/java/gjavah.c @@ -695,10 +695,13 @@ decode_signature_piece (stream, signature, limit, need_space) int *need_space; { const char *ctype; + int array_depth = 0; switch (signature[0]) { case '[': + /* More spaghetti. */ + array_loop: for (signature++; (signature < limit && *signature >= '0' && *signature <= '9'); signature++) @@ -713,13 +716,17 @@ decode_signature_piece (stream, signature, limit, need_space) case 'S': ctype = "jshortArray"; goto printit; case 'J': ctype = "jlongArray"; goto printit; case 'Z': ctype = "jbooleanArray"; goto printit; - case '[': ctype = "jobjectArray"; goto printit; + case '[': + /* We have a nested array. */ + ++array_depth; + fputs ("JArray<", stream); + goto array_loop; + case 'L': - /* We have to generate a reference to JArray here, - so that our output matches what the compiler - does. */ + /* We have to generate a reference to JArray here, so that + our output matches what the compiler does. */ ++signature; - fputs ("JArray<", stream); + fputs ("JArray<::", stream); while (signature < limit && *signature != ';') { int ch = UTF8_GET (signature, limit); @@ -781,6 +788,9 @@ decode_signature_piece (stream, signature, limit, need_space) break; } + while (array_depth-- > 0) + fputs ("> *", stream); + return signature; } |