< 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 >