| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 private: | 81 private: |
| 82 const Address limit_; | 82 const Address limit_; |
| 83 StackHandler* handler_; | 83 StackHandler* handler_; |
| 84 }; | 84 }; |
| 85 | 85 |
| 86 | 86 |
| 87 // ------------------------------------------------------------------------- | 87 // ------------------------------------------------------------------------- |
| 88 | 88 |
| 89 | 89 |
| 90 #define INITIALIZE_SINGLETON(type, field) field##_(this), | 90 #define INITIALIZE_SINGLETON(type, field) field##_(this), |
| 91 StackFrameIterator::StackFrameIterator() | |
| 92 : isolate_(Isolate::Current()), | |
| 93 STACK_FRAME_TYPE_LIST(INITIALIZE_SINGLETON) | |
| 94 frame_(NULL), handler_(NULL), | |
| 95 thread_(isolate_->thread_local_top()), | |
| 96 fp_(NULL), sp_(NULL), advance_(&StackFrameIterator::AdvanceWithHandler) { | |
| 97 Reset(); | |
| 98 } | |
| 99 StackFrameIterator::StackFrameIterator(Isolate* isolate) | 91 StackFrameIterator::StackFrameIterator(Isolate* isolate) |
| 100 : isolate_(isolate), | 92 : isolate_(isolate), |
| 101 STACK_FRAME_TYPE_LIST(INITIALIZE_SINGLETON) | 93 STACK_FRAME_TYPE_LIST(INITIALIZE_SINGLETON) |
| 102 frame_(NULL), handler_(NULL), | 94 frame_(NULL), handler_(NULL), |
| 103 thread_(isolate_->thread_local_top()), | 95 thread_(isolate_->thread_local_top()), |
| 104 fp_(NULL), sp_(NULL), advance_(&StackFrameIterator::AdvanceWithHandler) { | 96 fp_(NULL), sp_(NULL), advance_(&StackFrameIterator::AdvanceWithHandler) { |
| 105 Reset(); | 97 Reset(); |
| 106 } | 98 } |
| 107 StackFrameIterator::StackFrameIterator(Isolate* isolate, ThreadLocalTop* t) | 99 StackFrameIterator::StackFrameIterator(Isolate* isolate, ThreadLocalTop* t) |
| 108 : isolate_(isolate), | 100 : isolate_(isolate), |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 } | 195 } |
| 204 return result; | 196 return result; |
| 205 | 197 |
| 206 #undef FRAME_TYPE_CASE | 198 #undef FRAME_TYPE_CASE |
| 207 } | 199 } |
| 208 | 200 |
| 209 | 201 |
| 210 // ------------------------------------------------------------------------- | 202 // ------------------------------------------------------------------------- |
| 211 | 203 |
| 212 | 204 |
| 213 StackTraceFrameIterator::StackTraceFrameIterator() { | |
| 214 if (!done() && !IsValidFrame()) Advance(); | |
| 215 } | |
| 216 | |
| 217 | |
| 218 StackTraceFrameIterator::StackTraceFrameIterator(Isolate* isolate) | 205 StackTraceFrameIterator::StackTraceFrameIterator(Isolate* isolate) |
| 219 : JavaScriptFrameIterator(isolate) { | 206 : JavaScriptFrameIterator(isolate) { |
| 220 if (!done() && !IsValidFrame()) Advance(); | 207 if (!done() && !IsValidFrame()) Advance(); |
| 221 } | 208 } |
| 222 | 209 |
| 223 | 210 |
| 224 void StackTraceFrameIterator::Advance() { | 211 void StackTraceFrameIterator::Advance() { |
| 225 while (true) { | 212 while (true) { |
| 226 JavaScriptFrameIterator::Advance(); | 213 JavaScriptFrameIterator::Advance(); |
| 227 if (done()) return; | 214 if (done()) return; |
| (...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 776 int offset = static_cast<int>(pc() - code_pointer->address()); | 763 int offset = static_cast<int>(pc() - code_pointer->address()); |
| 777 FrameSummary summary(receiver(), | 764 FrameSummary summary(receiver(), |
| 778 JSFunction::cast(function()), | 765 JSFunction::cast(function()), |
| 779 code_pointer, | 766 code_pointer, |
| 780 offset, | 767 offset, |
| 781 IsConstructor()); | 768 IsConstructor()); |
| 782 functions->Add(summary); | 769 functions->Add(summary); |
| 783 } | 770 } |
| 784 | 771 |
| 785 | 772 |
| 786 void JavaScriptFrame::PrintTop(FILE* file, | 773 void JavaScriptFrame::PrintTop(Isolate* isolate, |
| 774 FILE* file, |
| 787 bool print_args, | 775 bool print_args, |
| 788 bool print_line_number) { | 776 bool print_line_number) { |
| 789 // constructor calls | 777 // constructor calls |
| 790 HandleScope scope; | 778 HandleScope scope(isolate); |
| 791 AssertNoAllocation no_allocation; | 779 AssertNoAllocation no_allocation; |
| 792 JavaScriptFrameIterator it; | 780 JavaScriptFrameIterator it(isolate); |
| 793 while (!it.done()) { | 781 while (!it.done()) { |
| 794 if (it.frame()->is_java_script()) { | 782 if (it.frame()->is_java_script()) { |
| 795 JavaScriptFrame* frame = it.frame(); | 783 JavaScriptFrame* frame = it.frame(); |
| 796 if (frame->IsConstructor()) PrintF(file, "new "); | 784 if (frame->IsConstructor()) PrintF(file, "new "); |
| 797 // function name | 785 // function name |
| 798 Object* maybe_fun = frame->function(); | 786 Object* maybe_fun = frame->function(); |
| 799 if (maybe_fun->IsJSFunction()) { | 787 if (maybe_fun->IsJSFunction()) { |
| 800 JSFunction* fun = JSFunction::cast(maybe_fun); | 788 JSFunction* fun = JSFunction::cast(maybe_fun); |
| 801 fun->PrintName(); | 789 fun->PrintName(); |
| 802 Code* js_code = frame->unchecked_code(); | 790 Code* js_code = frame->unchecked_code(); |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1077 void StackFrame::PrintIndex(StringStream* accumulator, | 1065 void StackFrame::PrintIndex(StringStream* accumulator, |
| 1078 PrintMode mode, | 1066 PrintMode mode, |
| 1079 int index) { | 1067 int index) { |
| 1080 accumulator->Add((mode == OVERVIEW) ? "%5d: " : "[%d]: ", index); | 1068 accumulator->Add((mode == OVERVIEW) ? "%5d: " : "[%d]: ", index); |
| 1081 } | 1069 } |
| 1082 | 1070 |
| 1083 | 1071 |
| 1084 void JavaScriptFrame::Print(StringStream* accumulator, | 1072 void JavaScriptFrame::Print(StringStream* accumulator, |
| 1085 PrintMode mode, | 1073 PrintMode mode, |
| 1086 int index) const { | 1074 int index) const { |
| 1087 HandleScope scope; | 1075 HandleScope scope(isolate()); |
| 1088 Object* receiver = this->receiver(); | 1076 Object* receiver = this->receiver(); |
| 1089 Object* function = this->function(); | 1077 Object* function = this->function(); |
| 1090 | 1078 |
| 1091 accumulator->PrintSecurityTokenIfChanged(function); | 1079 accumulator->PrintSecurityTokenIfChanged(function); |
| 1092 PrintIndex(accumulator, mode, index); | 1080 PrintIndex(accumulator, mode, index); |
| 1093 Code* code = NULL; | 1081 Code* code = NULL; |
| 1094 if (IsConstructor()) accumulator->Add("new "); | 1082 if (IsConstructor()) accumulator->Add("new "); |
| 1095 accumulator->PrintFunction(function, receiver, &code); | 1083 accumulator->PrintFunction(function, receiver, &code); |
| 1096 | 1084 |
| 1097 // Get scope information for nicer output, if possible. If code is NULL, or | 1085 // Get scope information for nicer output, if possible. If code is NULL, or |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1493 } | 1481 } |
| 1494 | 1482 |
| 1495 switch (frame->type()) { | 1483 switch (frame->type()) { |
| 1496 STACK_FRAME_TYPE_LIST(FRAME_TYPE_CASE) | 1484 STACK_FRAME_TYPE_LIST(FRAME_TYPE_CASE) |
| 1497 default: UNREACHABLE(); | 1485 default: UNREACHABLE(); |
| 1498 } | 1486 } |
| 1499 #undef FRAME_TYPE_CASE | 1487 #undef FRAME_TYPE_CASE |
| 1500 return NULL; | 1488 return NULL; |
| 1501 } | 1489 } |
| 1502 | 1490 |
| 1503 Vector<StackFrame*> CreateStackMap(Zone* zone) { | 1491 Vector<StackFrame*> CreateStackMap(Isolate* isolate, Zone* zone) { |
| 1504 ZoneList<StackFrame*> list(10, zone); | 1492 ZoneList<StackFrame*> list(10, zone); |
| 1505 for (StackFrameIterator it; !it.done(); it.Advance()) { | 1493 for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { |
| 1506 StackFrame* frame = AllocateFrameCopy(it.frame(), zone); | 1494 StackFrame* frame = AllocateFrameCopy(it.frame(), zone); |
| 1507 list.Add(frame, zone); | 1495 list.Add(frame, zone); |
| 1508 } | 1496 } |
| 1509 return list.ToVector(); | 1497 return list.ToVector(); |
| 1510 } | 1498 } |
| 1511 | 1499 |
| 1512 | 1500 |
| 1513 } } // namespace v8::internal | 1501 } } // namespace v8::internal |
| OLD | NEW |