aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/java/ChangeLog5
-rw-r--r--gcc/java/gjavah.c20
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;
}