< prev index next >
src/hotspot/cpu/sparc/sharedRuntime_sparc.cpp
Print this page
*** 1905,1936 ****
for (int i = 0; i < total_in_args ; i++ ) {
if (in_sig_bt[i] == T_ARRAY) {
// Arrays are passed as int, elem* pair
out_sig_bt[argc++] = T_INT;
out_sig_bt[argc++] = T_ADDRESS;
! Symbol* atype = ss.as_symbol();
! const char* at = atype->as_C_string();
! if (strlen(at) == 2) {
! assert(at[0] == '[', "must be");
! switch (at[1]) {
! case 'B': in_elem_bt[i] = T_BYTE; break;
! case 'C': in_elem_bt[i] = T_CHAR; break;
! case 'D': in_elem_bt[i] = T_DOUBLE; break;
! case 'F': in_elem_bt[i] = T_FLOAT; break;
! case 'I': in_elem_bt[i] = T_INT; break;
! case 'J': in_elem_bt[i] = T_LONG; break;
! case 'S': in_elem_bt[i] = T_SHORT; break;
! case 'Z': in_elem_bt[i] = T_BOOLEAN; break;
! default: ShouldNotReachHere();
! }
! }
} else {
out_sig_bt[argc++] = in_sig_bt[i];
in_elem_bt[i] = T_VOID;
}
if (in_sig_bt[i] != T_VOID) {
! assert(in_sig_bt[i] == ss.type(), "must match");
ss.next();
}
}
}
--- 1905,1925 ----
for (int i = 0; i < total_in_args ; i++ ) {
if (in_sig_bt[i] == T_ARRAY) {
// Arrays are passed as int, elem* pair
out_sig_bt[argc++] = T_INT;
out_sig_bt[argc++] = T_ADDRESS;
! ss.skip_array_prefix(1); // skip one '['
! if (ss.is_primitive())
! in_elem_bt[i] = ss.type();
! // else what is in_elem_bt[i]?
} else {
out_sig_bt[argc++] = in_sig_bt[i];
in_elem_bt[i] = T_VOID;
}
if (in_sig_bt[i] != T_VOID) {
! assert(in_sig_bt[i] == ss.type() ||
! in_sig_bt[i] == T_ARRAY, "must match");
ss.next();
}
}
}
< prev index next >