| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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/object.h" | 5 #include "vm/object.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
| 10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 5284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5295 ASSERT(IsRedirectingFactory()); | 5295 ASSERT(IsRedirectingFactory()); |
| 5296 const Object& obj = Object::Handle(raw_ptr()->data_); | 5296 const Object& obj = Object::Handle(raw_ptr()->data_); |
| 5297 ASSERT(!obj.IsNull()); | 5297 ASSERT(!obj.IsNull()); |
| 5298 return RedirectionData::Cast(obj).type(); | 5298 return RedirectionData::Cast(obj).type(); |
| 5299 } | 5299 } |
| 5300 | 5300 |
| 5301 | 5301 |
| 5302 const char* Function::KindToCString(RawFunction::Kind kind) { | 5302 const char* Function::KindToCString(RawFunction::Kind kind) { |
| 5303 switch (kind) { | 5303 switch (kind) { |
| 5304 case RawFunction::kRegularFunction: | 5304 case RawFunction::kRegularFunction: |
| 5305 return "kRegularFunction"; | 5305 return "RegularFunction"; |
| 5306 break; | 5306 break; |
| 5307 case RawFunction::kClosureFunction: | 5307 case RawFunction::kClosureFunction: |
| 5308 return "kClosureFunction"; | 5308 return "ClosureFunction"; |
| 5309 break; | 5309 break; |
| 5310 case RawFunction::kSignatureFunction: | 5310 case RawFunction::kSignatureFunction: |
| 5311 return "kSignatureFunction"; | 5311 return "SignatureFunction"; |
| 5312 break; | 5312 break; |
| 5313 case RawFunction::kGetterFunction: | 5313 case RawFunction::kGetterFunction: |
| 5314 return "kGetterFunction"; | 5314 return "GetterFunction"; |
| 5315 break; | 5315 break; |
| 5316 case RawFunction::kSetterFunction: | 5316 case RawFunction::kSetterFunction: |
| 5317 return "kSetterFunction"; | 5317 return "SetterFunction"; |
| 5318 break; | 5318 break; |
| 5319 case RawFunction::kConstructor: | 5319 case RawFunction::kConstructor: |
| 5320 return "kConstructor"; | 5320 return "Constructor"; |
| 5321 break; | 5321 break; |
| 5322 case RawFunction::kImplicitGetter: | 5322 case RawFunction::kImplicitGetter: |
| 5323 return "kImplicitGetter"; | 5323 return "ImplicitGetter"; |
| 5324 break; | 5324 break; |
| 5325 case RawFunction::kImplicitSetter: | 5325 case RawFunction::kImplicitSetter: |
| 5326 return "kImplicitSetter"; | 5326 return "ImplicitSetter"; |
| 5327 break; | 5327 break; |
| 5328 case RawFunction::kImplicitStaticFinalGetter: | 5328 case RawFunction::kImplicitStaticFinalGetter: |
| 5329 return "kImplicitStaticFinalGetter"; | 5329 return "ImplicitStaticFinalGetter"; |
| 5330 break; | 5330 break; |
| 5331 case RawFunction::kMethodExtractor: | 5331 case RawFunction::kMethodExtractor: |
| 5332 return "kMethodExtractor"; | 5332 return "MethodExtractor"; |
| 5333 break; | 5333 break; |
| 5334 case RawFunction::kNoSuchMethodDispatcher: | 5334 case RawFunction::kNoSuchMethodDispatcher: |
| 5335 return "kNoSuchMethodDispatcher"; | 5335 return "NoSuchMethodDispatcher"; |
| 5336 break; | 5336 break; |
| 5337 case RawFunction::kInvokeFieldDispatcher: | 5337 case RawFunction::kInvokeFieldDispatcher: |
| 5338 return "kInvokeFieldDispatcher"; | 5338 return "InvokeFieldDispatcher"; |
| 5339 break; | 5339 break; |
| 5340 case RawFunction::kIrregexpFunction: | 5340 case RawFunction::kIrregexpFunction: |
| 5341 return "kIrregexpFunction"; | 5341 return "IrregexpFunction"; |
| 5342 break; | 5342 break; |
| 5343 default: | 5343 default: |
| 5344 UNREACHABLE(); | 5344 UNREACHABLE(); |
| 5345 return NULL; | 5345 return NULL; |
| 5346 } | 5346 } |
| 5347 } | 5347 } |
| 5348 | 5348 |
| 5349 | 5349 |
| 5350 void Function::SetRedirectionType(const Type& type) const { | 5350 void Function::SetRedirectionType(const Type& type) const { |
| 5351 ASSERT(IsFactory()); | 5351 ASSERT(IsFactory()); |
| (...skipping 886 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6238 return result.raw(); | 6238 return result.raw(); |
| 6239 } | 6239 } |
| 6240 | 6240 |
| 6241 RawFunction* Function::ImplicitClosureFunction() const { | 6241 RawFunction* Function::ImplicitClosureFunction() const { |
| 6242 // Return the existing implicit closure function if any. | 6242 // Return the existing implicit closure function if any. |
| 6243 if (implicit_closure_function() != Function::null()) { | 6243 if (implicit_closure_function() != Function::null()) { |
| 6244 return implicit_closure_function(); | 6244 return implicit_closure_function(); |
| 6245 } | 6245 } |
| 6246 ASSERT(!IsSignatureFunction() && !IsClosureFunction()); | 6246 ASSERT(!IsSignatureFunction() && !IsClosureFunction()); |
| 6247 // Create closure function. | 6247 // Create closure function. |
| 6248 const String& closure_name = String::Handle(name()); | 6248 const String& closure_name = Symbols::ImplicitClosure(); |
| 6249 const Function& closure_function = Function::Handle( | 6249 const Function& closure_function = Function::Handle( |
| 6250 NewClosureFunction(closure_name, *this, token_pos())); | 6250 NewClosureFunction(closure_name, *this, token_pos())); |
| 6251 | 6251 |
| 6252 // Set closure function's context scope. | 6252 // Set closure function's context scope. |
| 6253 ContextScope& context_scope = ContextScope::Handle(); | 6253 ContextScope& context_scope = ContextScope::Handle(); |
| 6254 if (is_static()) { | 6254 if (is_static()) { |
| 6255 context_scope = ContextScope::New(0); | 6255 context_scope = ContextScope::New(0); |
| 6256 } else { | 6256 } else { |
| 6257 context_scope = LocalScope::CreateImplicitClosureScope(*this); | 6257 context_scope = LocalScope::CreateImplicitClosureScope(*this); |
| 6258 } | 6258 } |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6572 const String& suffix = String::Handle(PrettyName()); | 6572 const String& suffix = String::Handle(PrettyName()); |
| 6573 return String::Concat(tmp, suffix); | 6573 return String::Concat(tmp, suffix); |
| 6574 } | 6574 } |
| 6575 | 6575 |
| 6576 | 6576 |
| 6577 RawString* Function::QualifiedUserVisibleName() const { | 6577 RawString* Function::QualifiedUserVisibleName() const { |
| 6578 String& tmp = String::Handle(); | 6578 String& tmp = String::Handle(); |
| 6579 const Class& cls = Class::Handle(Owner()); | 6579 const Class& cls = Class::Handle(Owner()); |
| 6580 | 6580 |
| 6581 if (IsClosureFunction()) { | 6581 if (IsClosureFunction()) { |
| 6582 if (IsLocalFunction() && !IsImplicitClosureFunction()) { | 6582 if (IsLocalFunction()) { |
| 6583 const Function& parent = Function::Handle(parent_function()); | 6583 const Function& parent = Function::Handle(parent_function()); |
| 6584 tmp = parent.QualifiedUserVisibleName(); | 6584 tmp = parent.QualifiedUserVisibleName(); |
| 6585 } else { | 6585 } else { |
| 6586 return UserVisibleName(); | 6586 return UserVisibleName(); |
| 6587 } | 6587 } |
| 6588 } else { | 6588 } else { |
| 6589 if (cls.IsTopLevel()) { | 6589 if (cls.IsTopLevel()) { |
| 6590 return UserVisibleName(); | 6590 return UserVisibleName(); |
| 6591 } else { | 6591 } else { |
| 6592 tmp = cls.UserVisibleName(); | 6592 tmp = cls.UserVisibleName(); |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6811 ASSERT(!cls.IsNull()); | 6811 ASSERT(!cls.IsNull()); |
| 6812 Error& err = Error::Handle(); | 6812 Error& err = Error::Handle(); |
| 6813 err ^= cls.EnsureIsFinalized(Isolate::Current()); | 6813 err ^= cls.EnsureIsFinalized(Isolate::Current()); |
| 6814 ASSERT(err.IsNull()); | 6814 ASSERT(err.IsNull()); |
| 6815 JSONObject jsobj(stream); | 6815 JSONObject jsobj(stream); |
| 6816 AddTypeProperties(&jsobj, "Function", JSONType(), ref); | 6816 AddTypeProperties(&jsobj, "Function", JSONType(), ref); |
| 6817 jsobj.AddProperty("id", GetFunctionServiceId(*this, cls)); | 6817 jsobj.AddProperty("id", GetFunctionServiceId(*this, cls)); |
| 6818 const String& user_name = String::Handle(PrettyName()); | 6818 const String& user_name = String::Handle(PrettyName()); |
| 6819 const String& vm_name = String::Handle(name()); | 6819 const String& vm_name = String::Handle(name()); |
| 6820 AddNameProperties(&jsobj, user_name, vm_name); | 6820 AddNameProperties(&jsobj, user_name, vm_name); |
| 6821 if (cls.IsTopLevel()) { | |
| 6822 const Library& library = Library::Handle(cls.library()); | |
| 6823 jsobj.AddProperty("owningLibrary", library); | |
| 6824 } else { | |
| 6825 jsobj.AddProperty("owningClass", cls); | |
| 6826 } | |
| 6827 const Function& parent = Function::Handle(parent_function()); | 6821 const Function& parent = Function::Handle(parent_function()); |
| 6828 if (!parent.IsNull()) { | 6822 if (!parent.IsNull()) { |
| 6829 jsobj.AddProperty("parent", parent); | 6823 jsobj.AddProperty("owner", parent); |
| 6824 } else if (cls.IsTopLevel()) { |
| 6825 const Library& library = Library::Handle(cls.library()); |
| 6826 jsobj.AddProperty("owner", library); |
| 6827 } else { |
| 6828 jsobj.AddProperty("owner", cls); |
| 6830 } | 6829 } |
| 6830 |
| 6831 const char* kind_string = Function::KindToCString(kind()); | 6831 const char* kind_string = Function::KindToCString(kind()); |
| 6832 jsobj.AddProperty("kind", kind_string); | 6832 jsobj.AddProperty("kind", kind_string); |
| 6833 if (ref) { | 6833 if (ref) { |
| 6834 return; | 6834 return; |
| 6835 } | 6835 } |
| 6836 jsobj.AddProperty("static", is_static()); | 6836 jsobj.AddProperty("static", is_static()); |
| 6837 jsobj.AddProperty("const", is_const()); | 6837 jsobj.AddProperty("const", is_const()); |
| 6838 jsobj.AddProperty("optimizable", is_optimizable()); | 6838 Code& code = Code::Handle(CurrentCode()); |
| 6839 jsobj.AddProperty("inlinable", CanBeInlined()); | 6839 if (!code.IsNull()) { |
| 6840 jsobj.AddProperty("unoptimizedCode", Object::Handle(unoptimized_code())); | 6840 jsobj.AddProperty("code", code); |
| 6841 jsobj.AddProperty("usageCounter", usage_counter()); | 6841 } |
| 6842 jsobj.AddProperty("optimizedCallSiteCount", optimized_call_site_count()); | 6842 jsobj.AddProperty("_optimizable", is_optimizable()); |
| 6843 jsobj.AddProperty("code", Object::Handle(CurrentCode())); | 6843 jsobj.AddProperty("_inlinable", CanBeInlined()); |
| 6844 jsobj.AddProperty("deoptimizations", | 6844 code = unoptimized_code(); |
| 6845 if (!code.IsNull()) { |
| 6846 jsobj.AddProperty("_unoptimizedCode", code); |
| 6847 } |
| 6848 jsobj.AddProperty("_usageCounter", usage_counter()); |
| 6849 jsobj.AddProperty("_optimizedCallSiteCount", optimized_call_site_count()); |
| 6850 jsobj.AddProperty("_deoptimizations", |
| 6845 static_cast<intptr_t>(deoptimization_counter())); | 6851 static_cast<intptr_t>(deoptimization_counter())); |
| 6846 | 6852 |
| 6847 const Script& script = Script::Handle(this->script()); | 6853 const Script& script = Script::Handle(this->script()); |
| 6848 if (!script.IsNull()) { | 6854 if (!script.IsNull()) { |
| 6849 jsobj.AddProperty("script", script); | 6855 jsobj.AddProperty("script", script); |
| 6850 jsobj.AddProperty("tokenPos", token_pos()); | 6856 jsobj.AddProperty("tokenPos", token_pos()); |
| 6851 jsobj.AddProperty("endTokenPos", end_token_pos()); | 6857 jsobj.AddProperty("endTokenPos", end_token_pos()); |
| 6852 } | 6858 } |
| 6853 } | 6859 } |
| 6854 | 6860 |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7183 } | 7189 } |
| 7184 | 7190 |
| 7185 AbstractType& declared_type = AbstractType::Handle(type()); | 7191 AbstractType& declared_type = AbstractType::Handle(type()); |
| 7186 jsobj.AddProperty("declaredType", declared_type); | 7192 jsobj.AddProperty("declaredType", declared_type); |
| 7187 jsobj.AddProperty("static", is_static()); | 7193 jsobj.AddProperty("static", is_static()); |
| 7188 jsobj.AddProperty("final", is_final()); | 7194 jsobj.AddProperty("final", is_final()); |
| 7189 jsobj.AddProperty("const", is_const()); | 7195 jsobj.AddProperty("const", is_const()); |
| 7190 if (ref) { | 7196 if (ref) { |
| 7191 return; | 7197 return; |
| 7192 } | 7198 } |
| 7193 jsobj.AddProperty("guardNullable", is_nullable()); | 7199 jsobj.AddProperty("_guardNullable", is_nullable()); |
| 7194 if (guarded_cid() == kIllegalCid) { | 7200 if (guarded_cid() == kIllegalCid) { |
| 7195 jsobj.AddProperty("guardClass", "unknown"); | 7201 jsobj.AddProperty("_guardClass", "unknown"); |
| 7196 } else if (guarded_cid() == kDynamicCid) { | 7202 } else if (guarded_cid() == kDynamicCid) { |
| 7197 jsobj.AddProperty("guardClass", "dynamic"); | 7203 jsobj.AddProperty("_guardClass", "dynamic"); |
| 7198 } else { | 7204 } else { |
| 7199 ClassTable* table = Isolate::Current()->class_table(); | 7205 ClassTable* table = Isolate::Current()->class_table(); |
| 7200 ASSERT(table->IsValidIndex(guarded_cid())); | 7206 ASSERT(table->IsValidIndex(guarded_cid())); |
| 7201 cls ^= table->At(guarded_cid()); | 7207 cls ^= table->At(guarded_cid()); |
| 7202 jsobj.AddProperty("guardClass", cls); | 7208 jsobj.AddProperty("_guardClass", cls); |
| 7203 } | 7209 } |
| 7204 if (guarded_list_length() == kUnknownFixedLength) { | 7210 if (guarded_list_length() == kUnknownFixedLength) { |
| 7205 jsobj.AddProperty("guardLength", "unknown"); | 7211 jsobj.AddProperty("_guardLength", "unknown"); |
| 7206 } else if (guarded_list_length() == kNoFixedLength) { | 7212 } else if (guarded_list_length() == kNoFixedLength) { |
| 7207 jsobj.AddProperty("guardLength", "variable"); | 7213 jsobj.AddProperty("_guardLength", "variable"); |
| 7208 } else { | 7214 } else { |
| 7209 jsobj.AddProperty("guardLength", guarded_list_length()); | 7215 jsobj.AddProperty("_guardLength", guarded_list_length()); |
| 7210 } | 7216 } |
| 7211 const Class& origin_cls = Class::Handle(origin()); | 7217 const Class& origin_cls = Class::Handle(origin()); |
| 7212 const Script& script = Script::Handle(origin_cls.script()); | 7218 const Script& script = Script::Handle(origin_cls.script()); |
| 7213 if (!script.IsNull()) { | 7219 if (!script.IsNull()) { |
| 7214 jsobj.AddProperty("script", script); | 7220 jsobj.AddProperty("script", script); |
| 7215 jsobj.AddProperty("tokenPos", token_pos()); | 7221 jsobj.AddProperty("tokenPos", token_pos()); |
| 7216 } | 7222 } |
| 7217 } | 7223 } |
| 7218 | 7224 |
| 7219 | 7225 |
| (...skipping 1289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8509 ASSERT(!encoded_url.IsNull()); | 8515 ASSERT(!encoded_url.IsNull()); |
| 8510 const Library& lib = Library::Handle(FindLibrary()); | 8516 const Library& lib = Library::Handle(FindLibrary()); |
| 8511 intptr_t lib_index = (lib.IsNull()) ? -1 : lib.index(); | 8517 intptr_t lib_index = (lib.IsNull()) ? -1 : lib.index(); |
| 8512 jsobj.AddPropertyF("id", "libraries/%" Pd "/scripts/%s", | 8518 jsobj.AddPropertyF("id", "libraries/%" Pd "/scripts/%s", |
| 8513 lib_index, encoded_url.ToCString()); | 8519 lib_index, encoded_url.ToCString()); |
| 8514 jsobj.AddPropertyStr("name", name); | 8520 jsobj.AddPropertyStr("name", name); |
| 8515 jsobj.AddProperty("kind", GetKindAsCString()); | 8521 jsobj.AddProperty("kind", GetKindAsCString()); |
| 8516 if (ref) { | 8522 if (ref) { |
| 8517 return; | 8523 return; |
| 8518 } | 8524 } |
| 8519 jsobj.AddProperty("owningLibrary", lib); | 8525 jsobj.AddProperty("library", lib); |
| 8520 const String& source = String::Handle(Source()); | 8526 const String& source = String::Handle(Source()); |
| 8521 jsobj.AddPropertyStr("source", source); | 8527 jsobj.AddPropertyStr("source", source); |
| 8522 | 8528 |
| 8523 // Print the line number table | 8529 // Print the line number table |
| 8524 { | 8530 { |
| 8525 JSONArray tokenPosTable(&jsobj, "tokenPosTable"); | 8531 JSONArray tokenPosTable(&jsobj, "tokenPosTable"); |
| 8526 | 8532 |
| 8527 const GrowableObjectArray& lineNumberArray = | 8533 const GrowableObjectArray& lineNumberArray = |
| 8528 GrowableObjectArray::Handle(GenerateLineNumberArray()); | 8534 GrowableObjectArray::Handle(GenerateLineNumberArray()); |
| 8529 Object& value = Object::Handle(); | 8535 Object& value = Object::Handle(); |
| (...skipping 3999 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12529 const Object& obj = Object::Handle(owner()); | 12535 const Object& obj = Object::Handle(owner()); |
| 12530 return obj.IsFunction(); | 12536 return obj.IsFunction(); |
| 12531 } | 12537 } |
| 12532 | 12538 |
| 12533 | 12539 |
| 12534 void Code::PrintJSONImpl(JSONStream* stream, bool ref) const { | 12540 void Code::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 12535 JSONObject jsobj(stream); | 12541 JSONObject jsobj(stream); |
| 12536 AddTypeProperties(&jsobj, "Code", JSONType(), ref); | 12542 AddTypeProperties(&jsobj, "Code", JSONType(), ref); |
| 12537 jsobj.AddPropertyF("id", "code/%" Px64"-%" Px "", compile_timestamp(), | 12543 jsobj.AddPropertyF("id", "code/%" Px64"-%" Px "", compile_timestamp(), |
| 12538 EntryPoint()); | 12544 EntryPoint()); |
| 12539 jsobj.AddPropertyF("start", "%" Px "", EntryPoint()); | 12545 const String& user_name = String::Handle(PrettyName()); |
| 12540 jsobj.AddPropertyF("end", "%" Px "", EntryPoint() + Size()); | 12546 const String& vm_name = String::Handle(Name()); |
| 12541 jsobj.AddProperty("optimized", is_optimized()); | 12547 AddNameProperties(&jsobj, user_name, vm_name); |
| 12542 jsobj.AddProperty("alive", is_alive()); | |
| 12543 const Object& obj = Object::Handle(owner()); | |
| 12544 const bool is_stub = IsStubCode() || IsAllocationStubCode(); | 12548 const bool is_stub = IsStubCode() || IsAllocationStubCode(); |
| 12545 if (is_stub) { | 12549 if (is_stub) { |
| 12546 jsobj.AddProperty("kind", "Stub"); | 12550 jsobj.AddProperty("kind", "Stub"); |
| 12547 } else { | 12551 } else { |
| 12548 jsobj.AddProperty("kind", "Dart"); | 12552 jsobj.AddProperty("kind", "Dart"); |
| 12549 } | 12553 } |
| 12550 const String& user_name = String::Handle(PrettyName()); | 12554 jsobj.AddProperty("_optimized", is_optimized()); |
| 12551 const String& vm_name = String::Handle(Name()); | 12555 if (ref) { |
| 12552 AddNameProperties(&jsobj, user_name, vm_name); | 12556 return; |
| 12557 } |
| 12558 const Object& obj = Object::Handle(owner()); |
| 12553 if (obj.IsFunction()) { | 12559 if (obj.IsFunction()) { |
| 12554 jsobj.AddProperty("function", obj); | 12560 jsobj.AddProperty("function", obj); |
| 12555 } else { | 12561 } else { |
| 12556 // Generate a fake function reference. | 12562 // Generate a fake function reference. |
| 12557 JSONObject func(&jsobj, "function"); | 12563 JSONObject func(&jsobj, "function"); |
| 12558 func.AddProperty("type", "@Function"); | 12564 func.AddProperty("type", "@Function"); |
| 12559 func.AddProperty("kind", "Stub"); | 12565 func.AddProperty("kind", "Stub"); |
| 12560 func.AddProperty("name", user_name.ToCString()); | 12566 func.AddProperty("name", user_name.ToCString()); |
| 12561 AddNameProperties(&func, user_name, vm_name); | 12567 AddNameProperties(&func, user_name, vm_name); |
| 12562 } | 12568 } |
| 12563 if (ref) { | 12569 jsobj.AddPropertyF("_startAddress", "%" Px "", EntryPoint()); |
| 12564 return; | 12570 jsobj.AddPropertyF("_endAddress", "%" Px "", EntryPoint() + Size()); |
| 12565 } | 12571 jsobj.AddProperty("_alive", is_alive()); |
| 12566 const Array& array = Array::Handle(ObjectPool()); | 12572 const Array& array = Array::Handle(ObjectPool()); |
| 12567 jsobj.AddProperty("objectPool", array); | 12573 jsobj.AddProperty("_objectPool", array); |
| 12568 { | 12574 { |
| 12569 JSONArray jsarr(&jsobj, "disassembly"); | 12575 JSONArray jsarr(&jsobj, "_disassembly"); |
| 12570 if (is_alive()) { | 12576 if (is_alive()) { |
| 12571 // Only disassemble alive code objects. | 12577 // Only disassemble alive code objects. |
| 12572 DisassembleToJSONStream formatter(jsarr); | 12578 DisassembleToJSONStream formatter(jsarr); |
| 12573 Disassemble(&formatter); | 12579 Disassemble(&formatter); |
| 12574 } | 12580 } |
| 12575 } | 12581 } |
| 12576 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); | 12582 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); |
| 12577 if (!descriptors.IsNull()) { | 12583 if (!descriptors.IsNull()) { |
| 12578 JSONObject desc(&jsobj, "descriptors"); | 12584 JSONObject desc(&jsobj, "_descriptors"); |
| 12579 descriptors.PrintToJSONObject(&desc, false); | 12585 descriptors.PrintToJSONObject(&desc, false); |
| 12580 } | 12586 } |
| 12581 const Array& inlined_function_table = Array::Handle(inlined_id_to_function()); | 12587 const Array& inlined_function_table = Array::Handle(inlined_id_to_function()); |
| 12582 if (!inlined_function_table.IsNull()) { | 12588 if (!inlined_function_table.IsNull()) { |
| 12583 JSONArray inlined_functions(&jsobj, "inlinedFunctions"); | 12589 JSONArray inlined_functions(&jsobj, "_inlinedFunctions"); |
| 12584 Function& function = Function::Handle(); | 12590 Function& function = Function::Handle(); |
| 12585 for (intptr_t i = 0; i < inlined_function_table.Length(); i++) { | 12591 for (intptr_t i = 0; i < inlined_function_table.Length(); i++) { |
| 12586 function ^= inlined_function_table.At(i); | 12592 function ^= inlined_function_table.At(i); |
| 12587 ASSERT(!function.IsNull()); | 12593 ASSERT(!function.IsNull()); |
| 12588 inlined_functions.AddValue(function); | 12594 inlined_functions.AddValue(function); |
| 12589 } | 12595 } |
| 12590 } | 12596 } |
| 12591 const Array& intervals = Array::Handle(inlined_intervals()); | 12597 const Array& intervals = Array::Handle(inlined_intervals()); |
| 12592 if (!intervals.IsNull()) { | 12598 if (!intervals.IsNull()) { |
| 12593 Smi& start = Smi::Handle(); | 12599 Smi& start = Smi::Handle(); |
| 12594 Smi& end = Smi::Handle(); | 12600 Smi& end = Smi::Handle(); |
| 12595 Smi& temp_smi = Smi::Handle(); | 12601 Smi& temp_smi = Smi::Handle(); |
| 12596 JSONArray inline_intervals(&jsobj, "inlinedIntervals"); | 12602 JSONArray inline_intervals(&jsobj, "_inlinedIntervals"); |
| 12597 for (intptr_t i = 0; i < intervals.Length() - Code::kInlIntNumEntries; | 12603 for (intptr_t i = 0; i < intervals.Length() - Code::kInlIntNumEntries; |
| 12598 i += Code::kInlIntNumEntries) { | 12604 i += Code::kInlIntNumEntries) { |
| 12599 start ^= intervals.At(i + Code::kInlIntStart); | 12605 start ^= intervals.At(i + Code::kInlIntStart); |
| 12600 if (start.IsNull()) { | 12606 if (start.IsNull()) { |
| 12601 continue; | 12607 continue; |
| 12602 } | 12608 } |
| 12603 end ^= intervals.At(i + Code::kInlIntNumEntries + Code::kInlIntStart); | 12609 end ^= intervals.At(i + Code::kInlIntNumEntries + Code::kInlIntStart); |
| 12604 | 12610 |
| 12605 // Format: [start, end, inline functions...] | 12611 // Format: [start, end, inline functions...] |
| 12606 JSONArray inline_interval(&inline_intervals); | 12612 JSONArray inline_interval(&inline_intervals); |
| (...skipping 8112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 20719 return tag_label.ToCString(); | 20725 return tag_label.ToCString(); |
| 20720 } | 20726 } |
| 20721 | 20727 |
| 20722 | 20728 |
| 20723 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 20729 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 20724 Instance::PrintJSONImpl(stream, ref); | 20730 Instance::PrintJSONImpl(stream, ref); |
| 20725 } | 20731 } |
| 20726 | 20732 |
| 20727 | 20733 |
| 20728 } // namespace dart | 20734 } // namespace dart |
| OLD | NEW |