| Index: runtime/vm/object.cc
|
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
|
| index 6629bf1b74928035c3c638e1d2371b1dc4d1725a..3de3671f6e86d56d2180f3b9c3f2a56d6193d664 100644
|
| --- a/runtime/vm/object.cc
|
| +++ b/runtime/vm/object.cc
|
| @@ -1586,34 +1586,41 @@ static void AddNameProperties(JSONObject* jsobj,
|
| }
|
|
|
|
|
| -static void AddTypeProperties(JSONObject* jsobj,
|
| - const char* user_type,
|
| - const char* vm_type,
|
| - bool ref) {
|
| - bool same_type = (strcmp(user_type, vm_type) == 0);
|
| +void Object::AddCommonObjectProperties(JSONObject* jsobj,
|
| + const char* protocol_type,
|
| + bool ref) const {
|
| + const char* vm_type = JSONType();
|
| + bool same_type = (strcmp(protocol_type, vm_type) == 0);
|
| if (ref) {
|
| - jsobj->AddPropertyF("type", "@%s", user_type);
|
| + jsobj->AddPropertyF("type", "@%s", protocol_type);
|
| } else {
|
| - jsobj->AddProperty("type", user_type);
|
| + jsobj->AddProperty("type", protocol_type);
|
| }
|
| if (!same_type) {
|
| jsobj->AddProperty("_vmType", vm_type);
|
| }
|
| + if (!ref || IsInstance()) {
|
| + // TODO(turnidge): Provide the type arguments here too?
|
| + const Class& cls = Class::Handle(this->clazz());
|
| + jsobj->AddProperty("class", cls);
|
| + }
|
| + if (!ref) {
|
| + if (raw()->IsHeapObject()) {
|
| + jsobj->AddProperty("size", raw()->Size());
|
| + } else {
|
| + jsobj->AddProperty("size", (intptr_t)0);
|
| + }
|
| + }
|
| }
|
|
|
|
|
| void Object::PrintJSON(JSONStream* stream, bool ref) const {
|
| if (IsNull()) {
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Instance", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Instance", ref);
|
| jsobj.AddProperty("kind", "Null");
|
| jsobj.AddFixedServiceId("objects/null");
|
| jsobj.AddProperty("valueAsString", "null");
|
| - if (!ref) {
|
| - const Class& cls = Class::Handle(this->clazz());
|
| - jsobj.AddProperty("class", cls);
|
| - jsobj.AddProperty("size", raw()->Size());
|
| - }
|
| } else {
|
| PrintJSONImpl(stream, ref);
|
| }
|
| @@ -1622,14 +1629,11 @@ void Object::PrintJSON(JSONStream* stream, bool ref) const {
|
|
|
| void Object::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Object", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Object", ref);
|
| jsobj.AddServiceId(*this);
|
| if (ref) {
|
| return;
|
| }
|
| - Class& cls = Class::Handle(this->clazz());
|
| - jsobj.AddProperty("class", cls);
|
| - jsobj.AddProperty("size", raw()->Size());
|
| }
|
|
|
|
|
| @@ -4111,12 +4115,11 @@ const char* Class::ToCString() const {
|
| void Class::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONObject jsobj(stream);
|
| if ((raw() == Class::null()) || (id() == kFreeListElement)) {
|
| - // TODO(turnidge): This is weird. See if there is another way to
|
| - // handle this.
|
| + // TODO(turnidge): This is weird and needs to be changed.
|
| jsobj.AddProperty("type", "null");
|
| return;
|
| }
|
| - AddTypeProperties(&jsobj, "Class", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Class", ref);
|
| jsobj.AddFixedServiceId("classes/%" Pd "", id());
|
| const String& user_name = String::Handle(PrettyName());
|
| const String& vm_name = String::Handle(Name());
|
| @@ -4444,7 +4447,7 @@ void TypeArguments::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| ObjectStore* object_store = isolate->object_store();
|
| const Array& table = Array::Handle(object_store->canonical_type_arguments());
|
| ASSERT(table.Length() > 0);
|
| - AddTypeProperties(&jsobj, "TypeArguments", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "TypeArguments", ref);
|
| jsobj.AddServiceId(*this);
|
| const String& user_name = String::Handle(PrettyName());
|
| const String& vm_name = String::Handle(Name());
|
| @@ -6889,7 +6892,7 @@ void Function::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| err ^= cls.EnsureIsFinalized(Isolate::Current());
|
| ASSERT(err.IsNull());
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Function", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Function", ref);
|
| AddFunctionServiceId(jsobj, *this, cls);
|
| const String& user_name = String::Handle(PrettyName());
|
| const String& vm_name = String::Handle(name());
|
| @@ -7237,7 +7240,7 @@ void Field::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| intptr_t id = cls.FindFieldIndex(*this);
|
| ASSERT(id >= 0);
|
| intptr_t cid = cls.id();
|
| - AddTypeProperties(&jsobj, "Field", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Field", ref);
|
| jsobj.AddFixedServiceId("classes/%" Pd "/fields/%" Pd "", cid, id);
|
| const String& user_name = String::Handle(PrettyName());
|
| const String& vm_name = String::Handle(name());
|
| @@ -8021,16 +8024,13 @@ const char* TokenStream::ToCString() const {
|
|
|
| void TokenStream::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Object", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Object", ref);
|
| // TODO(johnmccutchan): Generate a stable id. TokenStreams hang off
|
| // a Script object but do not have a back reference to generate a stable id.
|
| jsobj.AddServiceId(*this);
|
| if (ref) {
|
| return;
|
| }
|
| - Class& cls = Class::Handle(this->clazz());
|
| - jsobj.AddProperty("class", cls);
|
| - jsobj.AddProperty("size", raw()->Size());
|
| const String& private_key = String::Handle(PrivateKey());
|
| jsobj.AddProperty("privateKey", private_key);
|
| // TODO(johnmccutchan): Add support for printing LiteralTokens and add
|
| @@ -8555,7 +8555,7 @@ RawLibrary* Script::FindLibrary() const {
|
| // See also Dart_ScriptGetTokenInfo.
|
| void Script::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Script", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Script", ref);
|
| const String& uri = String::Handle(url());
|
| ASSERT(!uri.IsNull());
|
| const String& encoded_uri = String::Handle(String::EncodeIRI(uri));
|
| @@ -9906,7 +9906,7 @@ void Library::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| intptr_t id = index();
|
| ASSERT(id >= 0);
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Library", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Library", ref);
|
| jsobj.AddFixedServiceId("libraries/%" Pd "", id);
|
| jsobj.AddProperty("name", library_name);
|
| const String& library_url = String::Handle(url());
|
| @@ -10766,16 +10766,13 @@ const char* PcDescriptors::ToCString() const {
|
|
|
|
|
| void PcDescriptors::PrintToJSONObject(JSONObject* jsobj, bool ref) const {
|
| - AddTypeProperties(jsobj, "Object", JSONType(), ref);
|
| + AddCommonObjectProperties(jsobj, "Object", ref);
|
| // TODO(johnmccutchan): Generate a stable id. PcDescriptors hang off a Code
|
| // object but do not have a back reference to generate an ID.
|
| jsobj->AddServiceId(*this);
|
| if (ref) {
|
| return;
|
| }
|
| - Class& cls = Class::Handle(this->clazz());
|
| - jsobj->AddProperty("class", cls);
|
| - jsobj->AddProperty("size", raw()->Size());
|
| JSONArray members(jsobj, "members");
|
| Iterator iter(*this, RawPcDescriptors::kAnyKind);
|
| while (iter.MoveNext()) {
|
| @@ -11048,16 +11045,13 @@ const char* LocalVarDescriptors::ToCString() const {
|
| void LocalVarDescriptors::PrintJSONImpl(JSONStream* stream,
|
| bool ref) const {
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Object", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Object", ref);
|
| // TODO(johnmccutchan): Generate a stable id. LocalVarDescriptors hang off
|
| // a Code object but do not have a back reference to generate an ID.
|
| jsobj.AddServiceId(*this);
|
| if (ref) {
|
| return;
|
| }
|
| - Class& cls = Class::Handle(this->clazz());
|
| - jsobj.AddProperty("class", cls);
|
| - jsobj.AddProperty("size", raw()->Size());
|
| JSONArray members(&jsobj, "members");
|
| String& var_name = String::Handle();
|
| for (intptr_t i = 0; i < Length(); i++) {
|
| @@ -12728,7 +12722,7 @@ bool Code::IsFunctionCode() const {
|
|
|
| void Code::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Code", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Code", ref);
|
| jsobj.AddFixedServiceId("code/%" Px64"-%" Px "",
|
| compile_timestamp(),
|
| EntryPoint());
|
| @@ -13027,7 +13021,7 @@ void Context::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONObject jsobj(stream);
|
| // TODO(turnidge): Should the user level type for Context be Context
|
| // or Object?
|
| - AddTypeProperties(&jsobj, "Context", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Context", ref);
|
| jsobj.AddServiceId(*this);
|
|
|
| jsobj.AddProperty("length", num_variables());
|
| @@ -13036,19 +13030,14 @@ void Context::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| return;
|
| }
|
|
|
| - Class& cls = Class::Handle(this->clazz());
|
| - jsobj.AddProperty("class", cls);
|
| -
|
| - jsobj.AddProperty("size", raw()->Size());
|
| -
|
| const Context& parent_context = Context::Handle(parent());
|
| jsobj.AddProperty("parent", parent_context);
|
|
|
| JSONArray jsarr(&jsobj, "variables");
|
| - for (intptr_t i = 0; i < num_variables(); i++) {
|
| - const Object& var = Object::Handle(At(i));
|
| + Object& var = Object::Handle();
|
| + for (intptr_t index = 0; index < num_variables(); index++) {
|
| + var = At(index);
|
| JSONObject jselement(&jsarr);
|
| - jselement.AddProperty("index", i);
|
| jselement.AddProperty("value", var);
|
| }
|
| }
|
| @@ -13446,7 +13435,9 @@ const char* ApiError::ToCString() const {
|
|
|
| void ApiError::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Error", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Error", ref);
|
| + jsobj.AddProperty("kind", "InternalError");
|
| + jsobj.AddServiceId(*this);
|
| jsobj.AddProperty("message", ToErrorCString());
|
| }
|
|
|
| @@ -13583,7 +13574,9 @@ const char* LanguageError::ToCString() const {
|
|
|
| void LanguageError::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Error", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Error", ref);
|
| + jsobj.AddProperty("kind", "LanguageError");
|
| + jsobj.AddServiceId(*this);
|
| jsobj.AddProperty("message", ToErrorCString());
|
| }
|
|
|
| @@ -13674,9 +13667,13 @@ const char* UnhandledException::ToCString() const {
|
| void UnhandledException::PrintJSONImpl(JSONStream* stream,
|
| bool ref) const {
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Error", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Error", ref);
|
| + jsobj.AddProperty("kind", "UnhandledException");
|
| + jsobj.AddServiceId(*this);
|
| jsobj.AddProperty("message", ToErrorCString());
|
| -
|
| + if (ref) {
|
| + return;
|
| + }
|
| Instance& instance = Instance::Handle();
|
| instance = exception();
|
| jsobj.AddProperty("exception", instance);
|
| @@ -13718,7 +13715,9 @@ const char* UnwindError::ToCString() const {
|
|
|
| void UnwindError::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONObject jsobj(stream);
|
| - AddTypeProperties(&jsobj, "Error", JSONType(), ref);
|
| + AddCommonObjectProperties(&jsobj, "Error", ref);
|
| + jsobj.AddProperty("kind", "TerminationError");
|
| + jsobj.AddServiceId(*this);
|
| jsobj.AddProperty("message", ToErrorCString());
|
| }
|
|
|
| @@ -14161,21 +14160,13 @@ const char* Instance::ToCString() const {
|
|
|
| void Instance::PrintSharedInstanceJSON(JSONObject* jsobj,
|
| bool ref) const {
|
| - AddTypeProperties(jsobj, "Instance", JSONType(), ref);
|
| - Class& cls = Class::Handle(this->clazz());
|
| - jsobj->AddProperty("class", cls);
|
| - // TODO(turnidge): Provide the type arguments here too.
|
| + AddCommonObjectProperties(jsobj, "Instance", ref);
|
| if (ref) {
|
| return;
|
| }
|
|
|
| - if (raw()->IsHeapObject()) {
|
| - jsobj->AddProperty("size", raw()->Size());
|
| - } else {
|
| - jsobj->AddProperty("size", (intptr_t)0);
|
| - }
|
| -
|
| // Walk the superclass chain, adding all instance fields.
|
| + Class& cls = Class::Handle(this->clazz());
|
| {
|
| Instance& fieldValue = Instance::Handle();
|
| JSONArray jsarr(jsobj, "fields");
|
| @@ -15529,7 +15520,7 @@ void TypeRef::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| if (ref) {
|
| return;
|
| }
|
| - jsobj.AddProperty("type", AbstractType::Handle(type()));
|
| + jsobj.AddProperty("targetType", AbstractType::Handle(type()));
|
| }
|
|
|
|
|
| @@ -15979,7 +15970,7 @@ void BoundedType::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| if (ref) {
|
| return;
|
| }
|
| - jsobj.AddProperty("type", AbstractType::Handle(type()));
|
| + jsobj.AddProperty("targetType", AbstractType::Handle(type()));
|
| jsobj.AddProperty("bound", AbstractType::Handle(bound()));
|
| }
|
|
|
| @@ -19374,11 +19365,8 @@ void Array::PrintJSONImpl(JSONStream* stream, bool ref) const {
|
| JSONArray jsarr(&jsobj, "elements");
|
| Object& element = Object::Handle();
|
| for (intptr_t index = 0; index < Length(); index++) {
|
| - JSONObject jselement(&jsarr);
|
| - jselement.AddProperty("index", index);
|
| -
|
| element = At(index);
|
| - jselement.AddProperty("value", element);
|
| + jsarr.AddValue(element);
|
| }
|
| }
|
| }
|
| @@ -19621,11 +19609,8 @@ void GrowableObjectArray::PrintJSONImpl(JSONStream* stream,
|
| JSONArray jsarr(&jsobj, "elements");
|
| Object& element = Object::Handle();
|
| for (intptr_t index = 0; index < Length(); index++) {
|
| - JSONObject jselement(&jsarr);
|
| - jselement.AddProperty("index", index);
|
| -
|
| element = At(index);
|
| - jselement.AddProperty("value", element);
|
| + jsarr.AddValue(element);
|
| }
|
| }
|
| }
|
|
|