< prev index next >
src/share/vm/runtime/signature.cpp
Print this page
@@ -531,5 +531,30 @@
return true;
default:
return false;
}
}
+
+int SigEntry::count_fields(const GrowableArray<SigEntry>& sig_extended) {
+ int values = 0;
+ for (int i = 0; i < sig_extended.length(); i++) {
+ if (sig_extended.at(i)._bt == T_VALUETYPE) {
+ values++;
+ }
+ }
+ return sig_extended.length() - 2 * values;
+}
+
+void SigEntry::fill_sig_bt(const GrowableArray<SigEntry>& sig_extended, BasicType* sig_bt_cc, int total_args_passed_cc, bool skip_vt) {
+ int j = 0;
+ for (int i = 0; i < sig_extended.length(); i++) {
+ if (!skip_vt) {
+ sig_bt_cc[j++] = sig_extended.at(i)._bt;
+ } else if (sig_extended.at(i)._bt != T_VALUETYPE &&
+ (sig_extended.at(i)._bt != T_VOID ||
+ sig_extended.at(i-1)._bt == T_LONG ||
+ sig_extended.at(i-1)._bt == T_DOUBLE)) {
+ sig_bt_cc[j++] = sig_extended.at(i)._bt;
+ }
+ }
+ assert(j == total_args_passed_cc, "bad number of arguments");
+}
< prev index next >