OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/debugger.h" | 5 #include "vm/debugger.h" |
6 #include "vm/disassembler.h" | 6 #include "vm/disassembler.h" |
7 #include "vm/object.h" | 7 #include "vm/object.h" |
8 #include "vm/object_store.h" | 8 #include "vm/object_store.h" |
9 #include "vm/stub_code.h" | 9 #include "vm/stub_code.h" |
10 #include "vm/symbols.h" | 10 #include "vm/symbols.h" |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 | 236 |
237 | 237 |
238 void PatchClass::PrintJSONImpl(JSONStream* stream, bool ref) const { | 238 void PatchClass::PrintJSONImpl(JSONStream* stream, bool ref) const { |
239 Object::PrintJSONImpl(stream, ref); | 239 Object::PrintJSONImpl(stream, ref); |
240 } | 240 } |
241 | 241 |
242 | 242 |
243 static void AddFunctionServiceId(const JSONObject& jsobj, | 243 static void AddFunctionServiceId(const JSONObject& jsobj, |
244 const Function& f, | 244 const Function& f, |
245 const Class& cls) { | 245 const Class& cls) { |
246 if (cls.IsNull()) { | |
247 ASSERT(f.IsSignatureFunction()); | |
248 jsobj.AddServiceId(f); | |
249 return; | |
250 } | |
251 // Special kinds of functions use indices in their respective lists. | 246 // Special kinds of functions use indices in their respective lists. |
252 intptr_t id = -1; | 247 intptr_t id = -1; |
253 const char* selector = NULL; | 248 const char* selector = NULL; |
254 if (f.IsNonImplicitClosureFunction()) { | 249 if (f.IsNonImplicitClosureFunction()) { |
255 id = Isolate::Current()->FindClosureIndex(f); | 250 id = Isolate::Current()->FindClosureIndex(f); |
256 selector = "closures"; | 251 selector = "closures"; |
257 } else if (f.IsImplicitClosureFunction()) { | 252 } else if (f.IsImplicitClosureFunction()) { |
258 id = cls.FindImplicitClosureFunctionIndex(f); | 253 id = cls.FindImplicitClosureFunctionIndex(f); |
259 selector = "implicit_closures"; | 254 selector = "implicit_closures"; |
260 } else if (f.IsNoSuchMethodDispatcher() || f.IsInvokeFieldDispatcher()) { | 255 } else if (f.IsNoSuchMethodDispatcher() || f.IsInvokeFieldDispatcher()) { |
(...skipping 16 matching lines...) Expand all Loading... |
277 } | 272 } |
278 // Oddball functions (not known to their owner) fall back to use the object | 273 // Oddball functions (not known to their owner) fall back to use the object |
279 // id ring. Current known examples are signature functions of closures | 274 // id ring. Current known examples are signature functions of closures |
280 // and stubs like 'megamorphic_miss'. | 275 // and stubs like 'megamorphic_miss'. |
281 jsobj.AddServiceId(f); | 276 jsobj.AddServiceId(f); |
282 } | 277 } |
283 | 278 |
284 | 279 |
285 void Function::PrintJSONImpl(JSONStream* stream, bool ref) const { | 280 void Function::PrintJSONImpl(JSONStream* stream, bool ref) const { |
286 Class& cls = Class::Handle(Owner()); | 281 Class& cls = Class::Handle(Owner()); |
287 if (!cls.IsNull()) { | 282 ASSERT(!cls.IsNull()); |
288 Error& err = Error::Handle(); | 283 Error& err = Error::Handle(); |
289 err ^= cls.EnsureIsFinalized(Thread::Current()); | 284 err ^= cls.EnsureIsFinalized(Thread::Current()); |
290 ASSERT(err.IsNull()); | 285 ASSERT(err.IsNull()); |
291 } else { | |
292 ASSERT(IsSignatureFunction()); | |
293 } | |
294 JSONObject jsobj(stream); | 286 JSONObject jsobj(stream); |
295 AddCommonObjectProperties(&jsobj, "Function", ref); | 287 AddCommonObjectProperties(&jsobj, "Function", ref); |
296 AddFunctionServiceId(jsobj, *this, cls); | 288 AddFunctionServiceId(jsobj, *this, cls); |
297 const String& user_name = String::Handle(UserVisibleName()); | 289 const String& user_name = String::Handle(UserVisibleName()); |
298 const String& vm_name = String::Handle(name()); | 290 const String& vm_name = String::Handle(name()); |
299 AddNameProperties(&jsobj, user_name.ToCString(), vm_name.ToCString()); | 291 AddNameProperties(&jsobj, user_name.ToCString(), vm_name.ToCString()); |
300 const Function& parent = Function::Handle(parent_function()); | 292 const Function& parent = Function::Handle(parent_function()); |
301 if (!parent.IsNull()) { | 293 if (!parent.IsNull()) { |
302 jsobj.AddProperty("owner", parent); | 294 jsobj.AddProperty("owner", parent); |
303 } else if (!cls.IsNull()) { | 295 } else if (cls.IsTopLevel()) { |
304 if (cls.IsTopLevel()) { | 296 const Library& library = Library::Handle(cls.library()); |
305 const Library& library = Library::Handle(cls.library()); | 297 jsobj.AddProperty("owner", library); |
306 jsobj.AddProperty("owner", library); | 298 } else { |
307 } else { | 299 jsobj.AddProperty("owner", cls); |
308 jsobj.AddProperty("owner", cls); | |
309 } | |
310 } | 300 } |
311 | 301 |
312 const char* kind_string = Function::KindToCString(kind()); | 302 const char* kind_string = Function::KindToCString(kind()); |
313 jsobj.AddProperty("_kind", kind_string); | 303 jsobj.AddProperty("_kind", kind_string); |
314 jsobj.AddProperty("static", is_static()); | 304 jsobj.AddProperty("static", is_static()); |
315 jsobj.AddProperty("const", is_const()); | 305 jsobj.AddProperty("const", is_const()); |
316 jsobj.AddProperty("_intrinsic", is_intrinsic()); | 306 jsobj.AddProperty("_intrinsic", is_intrinsic()); |
317 jsobj.AddProperty("_native", is_native()); | 307 jsobj.AddProperty("_native", is_native()); |
318 if (ref) { | 308 if (ref) { |
319 return; | 309 return; |
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1102 } | 1092 } |
1103 } | 1093 } |
1104 | 1094 |
1105 | 1095 |
1106 void AbstractType::PrintJSONImpl(JSONStream* stream, bool ref) const { | 1096 void AbstractType::PrintJSONImpl(JSONStream* stream, bool ref) const { |
1107 UNREACHABLE(); | 1097 UNREACHABLE(); |
1108 } | 1098 } |
1109 | 1099 |
1110 | 1100 |
1111 void Type::PrintJSONImpl(JSONStream* stream, bool ref) const { | 1101 void Type::PrintJSONImpl(JSONStream* stream, bool ref) const { |
1112 // TODO(regis): Function types are not handled properly. | |
1113 JSONObject jsobj(stream); | 1102 JSONObject jsobj(stream); |
1114 PrintSharedInstanceJSON(&jsobj, ref); | 1103 PrintSharedInstanceJSON(&jsobj, ref); |
1115 jsobj.AddProperty("kind", "Type"); | 1104 jsobj.AddProperty("kind", "Type"); |
1116 if (HasResolvedTypeClass()) { | 1105 if (HasResolvedTypeClass()) { |
1117 const Class& type_cls = Class::Handle(type_class()); | 1106 const Class& type_cls = Class::Handle(type_class()); |
1118 if (type_cls.CanonicalType() == raw()) { | 1107 if (type_cls.CanonicalType() == raw()) { |
1119 intptr_t cid = type_cls.id(); | 1108 intptr_t cid = type_cls.id(); |
1120 jsobj.AddFixedServiceId("classes/%" Pd "/types/%d", cid, 0); | 1109 jsobj.AddFixedServiceId("classes/%" Pd "/types/%d", cid, 0); |
1121 } else { | 1110 } else { |
1122 jsobj.AddServiceId(*this); | 1111 jsobj.AddServiceId(*this); |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1590 jsobj.AddProperty("mirrorReferent", referent_handle); | 1579 jsobj.AddProperty("mirrorReferent", referent_handle); |
1591 } | 1580 } |
1592 | 1581 |
1593 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 1582 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
1594 Instance::PrintJSONImpl(stream, ref); | 1583 Instance::PrintJSONImpl(stream, ref); |
1595 } | 1584 } |
1596 | 1585 |
1597 #endif | 1586 #endif |
1598 | 1587 |
1599 } // namespace dart | 1588 } // namespace dart |
OLD | NEW |