Index: runtime/vm/object.cc |
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
index f44c36539865db16ec85e89c1c206adcb1f01e76..a4c035fcde2d798ab34d3c63509e61b6df0cca7f 100644 |
--- a/runtime/vm/object.cc |
+++ b/runtime/vm/object.cc |
@@ -12869,7 +12869,6 @@ void ICData::PrintToJSONArray(const JSONArray& jsarray, |
JSONObject jsobj(&jsarray); |
jsobj.AddProperty("name", String::Handle(target_name()).ToCString()); |
- // TODO(turnidge): Use AddLocation instead. |
jsobj.AddProperty("tokenPos", token_pos); |
// TODO(rmacnak): Figure out how to stringify DeoptReasons(). |
// jsobj.AddProperty("deoptReasons", ...); |
@@ -12897,6 +12896,35 @@ void ICData::PrintToJSONArray(const JSONArray& jsarray, |
} |
+void ICData::PrintToJSONArrayNew(const JSONArray& jsarray, |
+ intptr_t token_pos, |
+ bool is_static_call) const { |
+ Isolate* isolate = Isolate::Current(); |
+ Class& cls = Class::Handle(); |
+ Function& func = Function::Handle(); |
+ |
+ JSONObject jsobj(&jsarray); |
+ jsobj.AddProperty("name", String::Handle(target_name()).ToCString()); |
+ jsobj.AddProperty("tokenPos", token_pos); |
+ // TODO(rmacnak): Figure out how to stringify DeoptReasons(). |
+ // jsobj.AddProperty("deoptReasons", ...); |
+ |
+ JSONArray cache_entries(&jsobj, "cacheEntries"); |
+ for (intptr_t i = 0; i < NumberOfChecks(); i++) { |
+ JSONObject cache_entry(&cache_entries); |
+ func = GetTargetAt(i); |
+ intptr_t count = GetCountAt(i); |
+ if (!is_static_call) { |
+ intptr_t cid = GetReceiverClassIdAt(i); |
+ cls ^= isolate->class_table()->At(cid); |
+ cache_entry.AddProperty("receiver", cls); |
+ } |
+ cache_entry.AddProperty("target", func); |
+ cache_entry.AddProperty("count", count); |
+ } |
+} |
+ |
+ |
static Token::Kind RecognizeArithmeticOp(const String& name) { |
ASSERT(name.IsSymbol()); |
if (name.raw() == Symbols::Plus().raw()) { |