2988 int cnt = 0; |
2988 int cnt = 0; |
2989 if (has_receiver) { |
2989 if (has_receiver) { |
2990 sig_bt[cnt++] = T_OBJECT; // Receiver is argument 0; not in signature |
2990 sig_bt[cnt++] = T_OBJECT; // Receiver is argument 0; not in signature |
2991 } |
2991 } |
2992 |
2992 |
2993 while (*s != ')') { // Find closing right paren |
2993 while (*s != JVM_SIGNATURE_ENDFUNC) { // Find closing right paren |
2994 switch (*s++) { // Switch on signature character |
2994 switch (*s++) { // Switch on signature character |
2995 case 'B': sig_bt[cnt++] = T_BYTE; break; |
2995 case JVM_SIGNATURE_BYTE: sig_bt[cnt++] = T_BYTE; break; |
2996 case 'C': sig_bt[cnt++] = T_CHAR; break; |
2996 case JVM_SIGNATURE_CHAR: sig_bt[cnt++] = T_CHAR; break; |
2997 case 'D': sig_bt[cnt++] = T_DOUBLE; sig_bt[cnt++] = T_VOID; break; |
2997 case JVM_SIGNATURE_DOUBLE: sig_bt[cnt++] = T_DOUBLE; sig_bt[cnt++] = T_VOID; break; |
2998 case 'F': sig_bt[cnt++] = T_FLOAT; break; |
2998 case JVM_SIGNATURE_FLOAT: sig_bt[cnt++] = T_FLOAT; break; |
2999 case 'I': sig_bt[cnt++] = T_INT; break; |
2999 case JVM_SIGNATURE_INT: sig_bt[cnt++] = T_INT; break; |
3000 case 'J': sig_bt[cnt++] = T_LONG; sig_bt[cnt++] = T_VOID; break; |
3000 case JVM_SIGNATURE_LONG: sig_bt[cnt++] = T_LONG; sig_bt[cnt++] = T_VOID; break; |
3001 case 'S': sig_bt[cnt++] = T_SHORT; break; |
3001 case JVM_SIGNATURE_SHORT: sig_bt[cnt++] = T_SHORT; break; |
3002 case 'Z': sig_bt[cnt++] = T_BOOLEAN; break; |
3002 case JVM_SIGNATURE_BOOLEAN: sig_bt[cnt++] = T_BOOLEAN; break; |
3003 case 'V': sig_bt[cnt++] = T_VOID; break; |
3003 case JVM_SIGNATURE_VOID: sig_bt[cnt++] = T_VOID; break; |
3004 case 'L': // Oop |
3004 case JVM_SIGNATURE_CLASS: // Oop |
3005 while (*s++ != ';'); // Skip signature |
3005 while (*s++ != JVM_SIGNATURE_ENDCLASS); // Skip signature |
3006 sig_bt[cnt++] = T_OBJECT; |
3006 sig_bt[cnt++] = T_OBJECT; |
3007 break; |
3007 break; |
3008 case '[': { // Array |
3008 case JVM_SIGNATURE_ARRAY: { // Array |
3009 do { // Skip optional size |
3009 do { // Skip optional size |
3010 while (*s >= '0' && *s <= '9') s++; |
3010 while (*s >= '0' && *s <= '9') s++; |
3011 } while (*s++ == '['); // Nested arrays? |
3011 } while (*s++ == JVM_SIGNATURE_ARRAY); // Nested arrays? |
3012 // Skip element type |
3012 // Skip element type |
3013 if (s[-1] == 'L') |
3013 if (s[-1] == JVM_SIGNATURE_CLASS) |
3014 while (*s++ != ';'); // Skip signature |
3014 while (*s++ != JVM_SIGNATURE_ENDCLASS); // Skip signature |
3015 sig_bt[cnt++] = T_ARRAY; |
3015 sig_bt[cnt++] = T_ARRAY; |
3016 break; |
3016 break; |
3017 } |
3017 } |
3018 default : ShouldNotReachHere(); |
3018 default : ShouldNotReachHere(); |
3019 } |
3019 } |