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 |