From: Tom Tromey Date: Thu, 2 Sep 1999 23:44:04 +0000 (+0000) Subject: gjavah.c (decode_signature_piece): Emit "::" in JArray<>. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3a5395a311b5fff0b87edf3eeef99cff9f0d4354;p=gcc.git gjavah.c (decode_signature_piece): Emit "::" in JArray<>. * gjavah.c (decode_signature_piece): Emit "::" in JArray<>. Handle nested arrays, like `[[I'. From-SVN: r29067 --- diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index fbb67731f32..c49c91931d4 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +1999-09-02 Tom Tromey + + * gjavah.c (decode_signature_piece): Emit "::" in JArray<>. + Handle nested arrays, like `[[I'. + 1999-09-02 Kaveh R. Ghazi * class.c (finish_class): Remove unused parameter, all callers diff --git a/gcc/java/gjavah.c b/gcc/java/gjavah.c index 0859e3d4b1e..1fd84931880 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; }