OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/isolate.h" | 5 #include "src/isolate.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 | 8 |
9 #include <fstream> // NOLINT(readability/streams) | 9 #include <fstream> // NOLINT(readability/streams) |
10 #include <sstream> | 10 #include <sstream> |
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 js_frame->Summarize(&frames); | 439 js_frame->Summarize(&frames); |
440 for (int i = frames.length() - 1; i >= 0; i--) { | 440 for (int i = frames.length() - 1; i >= 0; i--) { |
441 Handle<JSFunction> fun = frames[i].function(); | 441 Handle<JSFunction> fun = frames[i].function(); |
442 | 442 |
443 // Filter out internal frames that we do not want to show. | 443 // Filter out internal frames that we do not want to show. |
444 if (!helper.IsVisibleInStackTrace(*fun)) continue; | 444 if (!helper.IsVisibleInStackTrace(*fun)) continue; |
445 helper.CountSloppyFrames(*fun); | 445 helper.CountSloppyFrames(*fun); |
446 | 446 |
447 Handle<Object> recv = frames[i].receiver(); | 447 Handle<Object> recv = frames[i].receiver(); |
448 Handle<AbstractCode> abstract_code = frames[i].abstract_code(); | 448 Handle<AbstractCode> abstract_code = frames[i].abstract_code(); |
| 449 if (frame->type() == StackFrame::BUILTIN) { |
| 450 // Help CallSite::IsConstructor correctly detect hand-written |
| 451 // construct stubs. |
| 452 Code* code = Code::cast(*abstract_code); |
| 453 if (code->is_construct_stub()) { |
| 454 recv = handle(heap()->call_site_constructor_symbol(), this); |
| 455 } |
| 456 } |
449 Handle<Smi> offset(Smi::FromInt(frames[i].code_offset()), this); | 457 Handle<Smi> offset(Smi::FromInt(frames[i].code_offset()), this); |
450 | 458 |
451 elements = MaybeGrow(this, elements, cursor, cursor + 4); | 459 elements = MaybeGrow(this, elements, cursor, cursor + 4); |
452 elements->set(cursor++, *recv); | 460 elements->set(cursor++, *recv); |
453 elements->set(cursor++, *fun); | 461 elements->set(cursor++, *fun); |
454 elements->set(cursor++, *abstract_code); | 462 elements->set(cursor++, *abstract_code); |
455 elements->set(cursor++, *offset); | 463 elements->set(cursor++, *offset); |
456 frames_seen++; | 464 frames_seen++; |
457 } | 465 } |
458 } break; | 466 } break; |
(...skipping 2664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3123 // Then check whether this scope intercepts. | 3131 // Then check whether this scope intercepts. |
3124 if ((flag & intercept_mask_)) { | 3132 if ((flag & intercept_mask_)) { |
3125 intercepted_flags_ |= flag; | 3133 intercepted_flags_ |= flag; |
3126 return true; | 3134 return true; |
3127 } | 3135 } |
3128 return false; | 3136 return false; |
3129 } | 3137 } |
3130 | 3138 |
3131 } // namespace internal | 3139 } // namespace internal |
3132 } // namespace v8 | 3140 } // namespace v8 |
OLD | NEW |