Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(279)

Side by Side Diff: runtime/vm/object_service.cc

Issue 2606993002: Second try: Fix resolution and canonicalization of typedefs and function types (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 }
246 // Special kinds of functions use indices in their respective lists. 251 // Special kinds of functions use indices in their respective lists.
247 intptr_t id = -1; 252 intptr_t id = -1;
248 const char* selector = NULL; 253 const char* selector = NULL;
249 if (f.IsNonImplicitClosureFunction()) { 254 if (f.IsNonImplicitClosureFunction()) {
250 id = Isolate::Current()->FindClosureIndex(f); 255 id = Isolate::Current()->FindClosureIndex(f);
251 selector = "closures"; 256 selector = "closures";
252 } else if (f.IsImplicitClosureFunction()) { 257 } else if (f.IsImplicitClosureFunction()) {
253 id = cls.FindImplicitClosureFunctionIndex(f); 258 id = cls.FindImplicitClosureFunctionIndex(f);
254 selector = "implicit_closures"; 259 selector = "implicit_closures";
255 } else if (f.IsNoSuchMethodDispatcher() || f.IsInvokeFieldDispatcher()) { 260 } else if (f.IsNoSuchMethodDispatcher() || f.IsInvokeFieldDispatcher()) {
(...skipping 16 matching lines...) Expand all
272 } 277 }
273 // Oddball functions (not known to their owner) fall back to use the object 278 // Oddball functions (not known to their owner) fall back to use the object
274 // id ring. Current known examples are signature functions of closures 279 // id ring. Current known examples are signature functions of closures
275 // and stubs like 'megamorphic_miss'. 280 // and stubs like 'megamorphic_miss'.
276 jsobj.AddServiceId(f); 281 jsobj.AddServiceId(f);
277 } 282 }
278 283
279 284
280 void Function::PrintJSONImpl(JSONStream* stream, bool ref) const { 285 void Function::PrintJSONImpl(JSONStream* stream, bool ref) const {
281 Class& cls = Class::Handle(Owner()); 286 Class& cls = Class::Handle(Owner());
282 ASSERT(!cls.IsNull()); 287 if (!cls.IsNull()) {
283 Error& err = Error::Handle(); 288 Error& err = Error::Handle();
284 err ^= cls.EnsureIsFinalized(Thread::Current()); 289 err ^= cls.EnsureIsFinalized(Thread::Current());
285 ASSERT(err.IsNull()); 290 ASSERT(err.IsNull());
291 } else {
292 ASSERT(IsSignatureFunction());
293 }
286 JSONObject jsobj(stream); 294 JSONObject jsobj(stream);
287 AddCommonObjectProperties(&jsobj, "Function", ref); 295 AddCommonObjectProperties(&jsobj, "Function", ref);
288 AddFunctionServiceId(jsobj, *this, cls); 296 AddFunctionServiceId(jsobj, *this, cls);
289 const String& user_name = String::Handle(UserVisibleName()); 297 const String& user_name = String::Handle(UserVisibleName());
290 const String& vm_name = String::Handle(name()); 298 const String& vm_name = String::Handle(name());
291 AddNameProperties(&jsobj, user_name.ToCString(), vm_name.ToCString()); 299 AddNameProperties(&jsobj, user_name.ToCString(), vm_name.ToCString());
292 const Function& parent = Function::Handle(parent_function()); 300 const Function& parent = Function::Handle(parent_function());
293 if (!parent.IsNull()) { 301 if (!parent.IsNull()) {
294 jsobj.AddProperty("owner", parent); 302 jsobj.AddProperty("owner", parent);
295 } else if (cls.IsTopLevel()) { 303 } else if (!cls.IsNull()) {
296 const Library& library = Library::Handle(cls.library()); 304 if (cls.IsTopLevel()) {
297 jsobj.AddProperty("owner", library); 305 const Library& library = Library::Handle(cls.library());
298 } else { 306 jsobj.AddProperty("owner", library);
299 jsobj.AddProperty("owner", cls); 307 } else {
308 jsobj.AddProperty("owner", cls);
309 }
300 } 310 }
301 311
302 const char* kind_string = Function::KindToCString(kind()); 312 const char* kind_string = Function::KindToCString(kind());
303 jsobj.AddProperty("_kind", kind_string); 313 jsobj.AddProperty("_kind", kind_string);
304 jsobj.AddProperty("static", is_static()); 314 jsobj.AddProperty("static", is_static());
305 jsobj.AddProperty("const", is_const()); 315 jsobj.AddProperty("const", is_const());
306 jsobj.AddProperty("_intrinsic", is_intrinsic()); 316 jsobj.AddProperty("_intrinsic", is_intrinsic());
307 jsobj.AddProperty("_native", is_native()); 317 jsobj.AddProperty("_native", is_native());
308 if (ref) { 318 if (ref) {
309 return; 319 return;
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after
1092 } 1102 }
1093 } 1103 }
1094 1104
1095 1105
1096 void AbstractType::PrintJSONImpl(JSONStream* stream, bool ref) const { 1106 void AbstractType::PrintJSONImpl(JSONStream* stream, bool ref) const {
1097 UNREACHABLE(); 1107 UNREACHABLE();
1098 } 1108 }
1099 1109
1100 1110
1101 void Type::PrintJSONImpl(JSONStream* stream, bool ref) const { 1111 void Type::PrintJSONImpl(JSONStream* stream, bool ref) const {
1112 // TODO(regis): Function types are not handled properly.
1102 JSONObject jsobj(stream); 1113 JSONObject jsobj(stream);
1103 PrintSharedInstanceJSON(&jsobj, ref); 1114 PrintSharedInstanceJSON(&jsobj, ref);
1104 jsobj.AddProperty("kind", "Type"); 1115 jsobj.AddProperty("kind", "Type");
1105 if (HasResolvedTypeClass()) { 1116 if (HasResolvedTypeClass()) {
1106 const Class& type_cls = Class::Handle(type_class()); 1117 const Class& type_cls = Class::Handle(type_class());
1107 if (type_cls.CanonicalType() == raw()) { 1118 if (type_cls.CanonicalType() == raw()) {
1108 intptr_t cid = type_cls.id(); 1119 intptr_t cid = type_cls.id();
1109 jsobj.AddFixedServiceId("classes/%" Pd "/types/%d", cid, 0); 1120 jsobj.AddFixedServiceId("classes/%" Pd "/types/%d", cid, 0);
1110 } else { 1121 } else {
1111 jsobj.AddServiceId(*this); 1122 jsobj.AddServiceId(*this);
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
1579 jsobj.AddProperty("mirrorReferent", referent_handle); 1590 jsobj.AddProperty("mirrorReferent", referent_handle);
1580 } 1591 }
1581 1592
1582 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 1593 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
1583 Instance::PrintJSONImpl(stream, ref); 1594 Instance::PrintJSONImpl(stream, ref);
1584 } 1595 }
1585 1596
1586 #endif 1597 #endif
1587 1598
1588 } // namespace dart 1599 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698