Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(268)

Side by Side Diff: src/frames.cc

Issue 2623773004: [wasm] Introduce WasmToInterpreterFrame (Closed)
Patch Set: Replace StackFrame::WASM occurences in platform-specific code Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/frames.h" 5 #include "src/frames.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 // linkage are actually generated with TurboFan currently, so 461 // linkage are actually generated with TurboFan currently, so
462 // this is sound). 462 // this is sound).
463 return OPTIMIZED; 463 return OPTIMIZED;
464 } 464 }
465 return BUILTIN; 465 return BUILTIN;
466 case Code::FUNCTION: 466 case Code::FUNCTION:
467 return JAVA_SCRIPT; 467 return JAVA_SCRIPT;
468 case Code::OPTIMIZED_FUNCTION: 468 case Code::OPTIMIZED_FUNCTION:
469 return OPTIMIZED; 469 return OPTIMIZED;
470 case Code::WASM_FUNCTION: 470 case Code::WASM_FUNCTION:
471 return WASM; 471 return WASM_COMPILED;
472 case Code::WASM_TO_JS_FUNCTION: 472 case Code::WASM_TO_JS_FUNCTION:
473 return WASM_TO_JS; 473 return WASM_TO_JS;
474 case Code::JS_TO_WASM_FUNCTION: 474 case Code::JS_TO_WASM_FUNCTION:
475 return JS_TO_WASM; 475 return JS_TO_WASM;
476 case Code::WASM_TO_INTERPRETER:
477 return WASM_TO_INTERPRETER;
476 default: 478 default:
477 // All other types should have an explicit marker 479 // All other types should have an explicit marker
478 break; 480 break;
479 } 481 }
480 } else { 482 } else {
481 return NONE; 483 return NONE;
482 } 484 }
483 } 485 }
484 486
485 DCHECK(marker->IsSmi()); 487 DCHECK(marker->IsSmi());
486 StackFrame::Type candidate = 488 StackFrame::Type candidate =
487 static_cast<StackFrame::Type>(Smi::cast(marker)->value()); 489 static_cast<StackFrame::Type>(Smi::cast(marker)->value());
488 switch (candidate) { 490 switch (candidate) {
489 case ENTRY: 491 case ENTRY:
490 case ENTRY_CONSTRUCT: 492 case ENTRY_CONSTRUCT:
491 case EXIT: 493 case EXIT:
492 case BUILTIN_EXIT: 494 case BUILTIN_EXIT:
493 case STUB: 495 case STUB:
494 case STUB_FAILURE_TRAMPOLINE: 496 case STUB_FAILURE_TRAMPOLINE:
495 case INTERNAL: 497 case INTERNAL:
496 case CONSTRUCT: 498 case CONSTRUCT:
497 case ARGUMENTS_ADAPTOR: 499 case ARGUMENTS_ADAPTOR:
498 case WASM_TO_JS: 500 case WASM_TO_JS:
499 case WASM: 501 case WASM_COMPILED:
500 return candidate; 502 return candidate;
501 case JS_TO_WASM: 503 case JS_TO_WASM:
502 case JAVA_SCRIPT: 504 case JAVA_SCRIPT:
503 case OPTIMIZED: 505 case OPTIMIZED:
504 case INTERPRETED: 506 case INTERPRETED:
505 default: 507 default:
506 // Unoptimized and optimized JavaScript frames, including 508 // Unoptimized and optimized JavaScript frames, including
507 // interpreted frames, should never have a StackFrame::Type 509 // interpreted frames, should never have a StackFrame::Type
508 // marker. If we find one, we're likely being called from the 510 // marker. If we find one, we're likely being called from the
509 // profiler in a bogus stack frame. 511 // profiler in a bogus stack frame.
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 } 755 }
754 756
755 757
756 void StandardFrame::SetCallerFp(Address caller_fp) { 758 void StandardFrame::SetCallerFp(Address caller_fp) {
757 Memory::Address_at(fp() + StandardFrameConstants::kCallerFPOffset) = 759 Memory::Address_at(fp() + StandardFrameConstants::kCallerFPOffset) =
758 caller_fp; 760 caller_fp;
759 } 761 }
760 762
761 bool StandardFrame::IsConstructor() const { return false; } 763 bool StandardFrame::IsConstructor() const { return false; }
762 764
765 void StandardFrame::Summarize(List<FrameSummary>* functions,
766 FrameSummary::Mode mode) const {
767 // This should only be called on frames which override this method.
768 UNREACHABLE();
769 }
770
763 void StandardFrame::IterateCompiledFrame(ObjectVisitor* v) const { 771 void StandardFrame::IterateCompiledFrame(ObjectVisitor* v) const {
764 // Make sure that we're not doing "safe" stack frame iteration. We cannot 772 // Make sure that we're not doing "safe" stack frame iteration. We cannot
765 // possibly find pointers in optimized frames in that state. 773 // possibly find pointers in optimized frames in that state.
766 DCHECK(can_access_heap_objects()); 774 DCHECK(can_access_heap_objects());
767 775
768 // Compute the safepoint information. 776 // Compute the safepoint information.
769 unsigned stack_slots = 0; 777 unsigned stack_slots = 0;
770 SafepointEntry safepoint_entry; 778 SafepointEntry safepoint_entry;
771 Code* code = StackFrame::GetSafepointData( 779 Code* code = StackFrame::GetSafepointData(
772 isolate(), pc(), &safepoint_entry, &stack_slots); 780 isolate(), pc(), &safepoint_entry, &stack_slots);
(...skipping 11 matching lines...) Expand all
784 case ENTRY_CONSTRUCT: 792 case ENTRY_CONSTRUCT:
785 case EXIT: 793 case EXIT:
786 case BUILTIN_EXIT: 794 case BUILTIN_EXIT:
787 case STUB_FAILURE_TRAMPOLINE: 795 case STUB_FAILURE_TRAMPOLINE:
788 case ARGUMENTS_ADAPTOR: 796 case ARGUMENTS_ADAPTOR:
789 case STUB: 797 case STUB:
790 case INTERNAL: 798 case INTERNAL:
791 case CONSTRUCT: 799 case CONSTRUCT:
792 case JS_TO_WASM: 800 case JS_TO_WASM:
793 case WASM_TO_JS: 801 case WASM_TO_JS:
794 case WASM: 802 case WASM_COMPILED:
803 case WASM_TO_INTERPRETER:
795 frame_header_size = TypedFrameConstants::kFixedFrameSizeFromFp; 804 frame_header_size = TypedFrameConstants::kFixedFrameSizeFromFp;
796 break; 805 break;
797 case JAVA_SCRIPT: 806 case JAVA_SCRIPT:
798 case OPTIMIZED: 807 case OPTIMIZED:
799 case INTERPRETED: 808 case INTERPRETED:
800 case BUILTIN: 809 case BUILTIN:
801 // These frame types have a context, but they are actually stored 810 // These frame types have a context, but they are actually stored
802 // in the place on the stack that one finds the frame type. 811 // in the place on the stack that one finds the frame type.
803 UNREACHABLE(); 812 UNREACHABLE();
804 break; 813 break;
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 IsConstructor(), mode); 975 IsConstructor(), mode);
967 functions->Add(summary); 976 functions->Add(summary);
968 } 977 }
969 978
970 JSFunction* JavaScriptFrame::function() const { 979 JSFunction* JavaScriptFrame::function() const {
971 return JSFunction::cast(function_slot_object()); 980 return JSFunction::cast(function_slot_object());
972 } 981 }
973 982
974 Object* JavaScriptFrame::receiver() const { return GetParameter(-1); } 983 Object* JavaScriptFrame::receiver() const { return GetParameter(-1); }
975 984
976 Script* JavaScriptFrame::script() const {
977 return Script::cast(function()->shared()->script());
978 }
979
980 Object* JavaScriptFrame::context() const { 985 Object* JavaScriptFrame::context() const {
981 const int offset = StandardFrameConstants::kContextOffset; 986 const int offset = StandardFrameConstants::kContextOffset;
982 Object* maybe_result = Memory::Object_at(fp() + offset); 987 Object* maybe_result = Memory::Object_at(fp() + offset);
983 DCHECK(!maybe_result->IsSmi()); 988 DCHECK(!maybe_result->IsSmi());
984 return maybe_result; 989 return maybe_result;
985 } 990 }
986 991
992 Script* JavaScriptFrame::script() const {
993 return Script::cast(function()->shared()->script());
994 }
995
987 int JavaScriptFrame::LookupExceptionHandlerInTable( 996 int JavaScriptFrame::LookupExceptionHandlerInTable(
988 int* stack_depth, HandlerTable::CatchPrediction* prediction) { 997 int* stack_depth, HandlerTable::CatchPrediction* prediction) {
989 DCHECK_EQ(0, LookupCode()->handler_table()->length()); 998 DCHECK_EQ(0, LookupCode()->handler_table()->length());
990 DCHECK(!LookupCode()->is_optimized_code()); 999 DCHECK(!LookupCode()->is_optimized_code());
991 return -1; 1000 return -1;
992 } 1001 }
993 1002
994 void JavaScriptFrame::PrintFunctionAndOffset(JSFunction* function, 1003 void JavaScriptFrame::PrintFunctionAndOffset(JSFunction* function,
995 AbstractCode* code, 1004 AbstractCode* code,
996 int code_offset, FILE* file, 1005 int code_offset, FILE* file,
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 function_(function), 1136 function_(function),
1128 abstract_code_(abstract_code), 1137 abstract_code_(abstract_code),
1129 code_offset_(code_offset), 1138 code_offset_(code_offset),
1130 is_constructor_(is_constructor) { 1139 is_constructor_(is_constructor) {
1131 DCHECK(abstract_code->IsBytecodeArray() || 1140 DCHECK(abstract_code->IsBytecodeArray() ||
1132 Code::cast(abstract_code)->kind() != Code::OPTIMIZED_FUNCTION || 1141 Code::cast(abstract_code)->kind() != Code::OPTIMIZED_FUNCTION ||
1133 CannotDeoptFromAsmCode(Code::cast(abstract_code), function) || 1142 CannotDeoptFromAsmCode(Code::cast(abstract_code), function) ||
1134 mode == kApproximateSummary); 1143 mode == kApproximateSummary);
1135 } 1144 }
1136 1145
1137 FrameSummary FrameSummary::GetFirst(JavaScriptFrame* frame) { 1146 FrameSummary FrameSummary::GetFirst(StandardFrame* frame) {
1138 List<FrameSummary> frames(FLAG_max_inlining_levels + 1); 1147 List<FrameSummary> frames(FLAG_max_inlining_levels + 1);
1139 frame->Summarize(&frames); 1148 frame->Summarize(&frames);
1140 return frames.first(); 1149 return frames.first();
1141 } 1150 }
1142 1151
1143 void FrameSummary::Print() { 1152 void FrameSummary::Print() {
1144 PrintF("receiver: "); 1153 PrintF("receiver: ");
1145 receiver_->ShortPrint(); 1154 receiver_->ShortPrint();
1146 PrintF("\nfunction: "); 1155 PrintF("\nfunction: ");
1147 function_->shared()->DebugName()->ShortPrint(); 1156 function_->shared()->DebugName()->ShortPrint();
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
1515 return reinterpret_cast<Code*>(code); 1524 return reinterpret_cast<Code*>(code);
1516 } 1525 }
1517 1526
1518 1527
1519 void StackFrame::PrintIndex(StringStream* accumulator, 1528 void StackFrame::PrintIndex(StringStream* accumulator,
1520 PrintMode mode, 1529 PrintMode mode,
1521 int index) { 1530 int index) {
1522 accumulator->Add((mode == OVERVIEW) ? "%5d: " : "[%d]: ", index); 1531 accumulator->Add((mode == OVERVIEW) ? "%5d: " : "[%d]: ", index);
1523 } 1532 }
1524 1533
1525 void WasmFrame::Print(StringStream* accumulator, PrintMode mode, 1534 void WasmCompiledFrame::Print(StringStream* accumulator, PrintMode mode,
1526 int index) const { 1535 int index) const {
1527 PrintIndex(accumulator, mode, index); 1536 PrintIndex(accumulator, mode, index);
1528 accumulator->Add("WASM ["); 1537 accumulator->Add("WASM [");
1529 Script* script = this->script(); 1538 Script* script = this->script();
1530 accumulator->PrintName(script->name()); 1539 accumulator->PrintName(script->name());
1531 int pc = static_cast<int>(this->pc() - LookupCode()->instruction_start()); 1540 int pc = static_cast<int>(this->pc() - LookupCode()->instruction_start());
1532 Vector<const uint8_t> raw_func_name; 1541 Vector<const uint8_t> raw_func_name;
1533 Object* instance_or_undef = this->wasm_instance(); 1542 Object* instance_or_undef = this->wasm_instance();
1534 if (instance_or_undef->IsUndefined(this->isolate())) { 1543 if (instance_or_undef->IsUndefined(this->isolate())) {
1535 raw_func_name = STATIC_CHAR_VECTOR("<undefined>"); 1544 raw_func_name = STATIC_CHAR_VECTOR("<undefined>");
1536 } else { 1545 } else {
1537 raw_func_name = WasmInstanceObject::cast(instance_or_undef) 1546 raw_func_name = WasmInstanceObject::cast(instance_or_undef)
1538 ->compiled_module() 1547 ->compiled_module()
1539 ->GetRawFunctionName(this->function_index()); 1548 ->GetRawFunctionName(this->function_index());
1540 } 1549 }
1541 const int kMaxPrintedFunctionName = 64; 1550 const int kMaxPrintedFunctionName = 64;
1542 char func_name[kMaxPrintedFunctionName + 1]; 1551 char func_name[kMaxPrintedFunctionName + 1];
1543 int func_name_len = std::min(kMaxPrintedFunctionName, raw_func_name.length()); 1552 int func_name_len = std::min(kMaxPrintedFunctionName, raw_func_name.length());
1544 memcpy(func_name, raw_func_name.start(), func_name_len); 1553 memcpy(func_name, raw_func_name.start(), func_name_len);
1545 func_name[func_name_len] = '\0'; 1554 func_name[func_name_len] = '\0';
1546 accumulator->Add("], function #%u ('%s'), pc=%p, pos=%d\n", 1555 accumulator->Add("], function #%u ('%s'), pc=%p, pos=%d\n",
1547 this->function_index(), func_name, pc, this->position()); 1556 this->function_index(), func_name, pc, this->position());
1548 if (mode != OVERVIEW) accumulator->Add("\n"); 1557 if (mode != OVERVIEW) accumulator->Add("\n");
1549 } 1558 }
1550 1559
1551 Code* WasmFrame::unchecked_code() const { 1560 Code* WasmCompiledFrame::unchecked_code() const {
1552 return static_cast<Code*>(isolate()->FindCodeObject(pc())); 1561 return isolate()->FindCodeObject(pc());
1553 } 1562 }
1554 1563
1555 void WasmFrame::Iterate(ObjectVisitor* v) const { IterateCompiledFrame(v); } 1564 void WasmCompiledFrame::Iterate(ObjectVisitor* v) const {
1565 IterateCompiledFrame(v);
1566 }
1556 1567
1557 Address WasmFrame::GetCallerStackPointer() const { 1568 Address WasmCompiledFrame::GetCallerStackPointer() const {
1558 return fp() + ExitFrameConstants::kCallerSPOffset; 1569 return fp() + ExitFrameConstants::kCallerSPOffset;
1559 } 1570 }
1560 1571
1561 WasmInstanceObject* WasmFrame::wasm_instance() const { 1572 WasmInstanceObject* WasmCompiledFrame::wasm_instance() const {
1562 WasmInstanceObject* obj = wasm::GetOwningWasmInstance(LookupCode()); 1573 WasmInstanceObject* obj = wasm::GetOwningWasmInstance(LookupCode());
1563 // This is a live stack frame; it must have a live instance. 1574 // This is a live stack frame; it must have a live instance.
1564 DCHECK_NOT_NULL(obj); 1575 DCHECK_NOT_NULL(obj);
1565 return obj; 1576 return obj;
1566 } 1577 }
1567 1578
1568 uint32_t WasmFrame::function_index() const { 1579 uint32_t WasmCompiledFrame::function_index() const {
1569 FixedArray* deopt_data = LookupCode()->deoptimization_data(); 1580 FixedArray* deopt_data = LookupCode()->deoptimization_data();
1570 DCHECK(deopt_data->length() == 2); 1581 DCHECK(deopt_data->length() == 2);
1571 return Smi::cast(deopt_data->get(1))->value(); 1582 return Smi::cast(deopt_data->get(1))->value();
1572 } 1583 }
1573 1584
1574 Script* WasmFrame::script() const { 1585 Script* WasmCompiledFrame::script() const {
1575 Handle<JSObject> instance(JSObject::cast(wasm_instance()), isolate()); 1586 return wasm_instance()->compiled_module()->script();
1576 return *wasm::GetScript(instance);
1577 } 1587 }
1578 1588
1579 int WasmFrame::position() const { 1589 int WasmCompiledFrame::position() const {
1580 int position = StandardFrame::position(); 1590 int position = StandardFrame::position();
1581 if (wasm_instance()->compiled_module()->is_asm_js()) { 1591 if (wasm_instance()->compiled_module()->is_asm_js()) {
1582 Handle<WasmCompiledModule> compiled_module( 1592 Handle<WasmCompiledModule> compiled_module(
1583 WasmInstanceObject::cast(wasm_instance())->compiled_module(), 1593 WasmInstanceObject::cast(wasm_instance())->compiled_module(),
1584 isolate()); 1594 isolate());
1585 DCHECK_LE(0, position); 1595 DCHECK_LE(0, position);
1586 position = WasmCompiledModule::GetAsmJsSourcePosition( 1596 position = WasmCompiledModule::GetAsmJsSourcePosition(
1587 compiled_module, function_index(), static_cast<uint32_t>(position), 1597 compiled_module, function_index(), static_cast<uint32_t>(position),
1588 at_to_number_conversion()); 1598 at_to_number_conversion());
1589 } 1599 }
1590 return position; 1600 return position;
1591 } 1601 }
1592 1602
1593 bool WasmFrame::at_to_number_conversion() const { 1603 void WasmCompiledFrame::Summarize(List<FrameSummary>* functions,
1604 FrameSummary::Mode mode) const {
1605 // TODO(clemensh): Implement.
1606 }
1607
1608 bool WasmCompiledFrame::at_to_number_conversion() const {
1594 // Check whether our callee is a WASM_TO_JS frame, and this frame is at the 1609 // Check whether our callee is a WASM_TO_JS frame, and this frame is at the
1595 // ToNumber conversion call. 1610 // ToNumber conversion call.
1596 Address callee_pc = reinterpret_cast<Address>(this->callee_pc()); 1611 Address callee_pc = reinterpret_cast<Address>(this->callee_pc());
1597 Code* code = callee_pc ? isolate()->FindCodeObject(callee_pc) : nullptr; 1612 Code* code = callee_pc ? isolate()->FindCodeObject(callee_pc) : nullptr;
1598 if (!code || code->kind() != Code::WASM_TO_JS_FUNCTION) return false; 1613 if (!code || code->kind() != Code::WASM_TO_JS_FUNCTION) return false;
1599 int offset = static_cast<int>(callee_pc - code->instruction_start()); 1614 int offset = static_cast<int>(callee_pc - code->instruction_start());
1600 int pos = AbstractCode::cast(code)->SourcePosition(offset); 1615 int pos = AbstractCode::cast(code)->SourcePosition(offset);
1601 DCHECK(pos == 0 || pos == 1); 1616 DCHECK(pos == 0 || pos == 1);
1602 // The imported call has position 0, ToNumber has position 1. 1617 // The imported call has position 0, ToNumber has position 1.
1603 return !!pos; 1618 return !!pos;
1604 } 1619 }
1605 1620
1606 int WasmFrame::LookupExceptionHandlerInTable(int* stack_slots) { 1621 int WasmCompiledFrame::LookupExceptionHandlerInTable(int* stack_slots) {
1607 DCHECK_NOT_NULL(stack_slots); 1622 DCHECK_NOT_NULL(stack_slots);
1608 Code* code = LookupCode(); 1623 Code* code = LookupCode();
1609 HandlerTable* table = HandlerTable::cast(code->handler_table()); 1624 HandlerTable* table = HandlerTable::cast(code->handler_table());
1610 int pc_offset = static_cast<int>(pc() - code->entry()); 1625 int pc_offset = static_cast<int>(pc() - code->entry());
1611 *stack_slots = code->stack_slots(); 1626 *stack_slots = code->stack_slots();
1612 return table->LookupReturn(pc_offset); 1627 return table->LookupReturn(pc_offset);
1613 } 1628 }
1614 1629
1630 void WasmToInterpreterFrame::Iterate(ObjectVisitor* v) const {
1631 IterateCompiledFrame(v);
1632 }
1633
1634 void WasmToInterpreterFrame::Print(StringStream* accumulator, PrintMode mode,
1635 int index) const {
1636 PrintIndex(accumulator, mode, index);
1637 accumulator->Add("WASM TO INTERPRETER [");
1638 Script* script = this->script();
1639 accumulator->PrintName(script->name());
1640 accumulator->Add("]");
1641 if (mode != OVERVIEW) accumulator->Add("\n");
1642 }
1643
1644 void WasmToInterpreterFrame::Summarize(List<FrameSummary>* functions,
1645 FrameSummary::Mode mode) const {
1646 // TODO(clemensh): Implement this.
1647 }
1648
1649 Code* WasmToInterpreterFrame::unchecked_code() const {
1650 return isolate()->FindCodeObject(pc());
1651 }
1652
1653 WasmInstanceObject* WasmToInterpreterFrame::wasm_instance() const {
1654 WasmInstanceObject* ret = wasm::GetOwningWasmInstance(LookupCode());
1655 // This is a live stack frame, there must be a live wasm instance available.
1656 DCHECK_NOT_NULL(ret);
1657 return ret;
1658 }
1659
1660 Script* WasmToInterpreterFrame::script() const {
1661 return wasm_instance()->compiled_module()->script();
1662 }
1663
1664 int WasmToInterpreterFrame::position() const {
1665 // TODO(clemensh): Implement this.
1666 return 0;
1667 }
1668
1669 Address WasmToInterpreterFrame::GetCallerStackPointer() const {
1670 return fp() + ExitFrameConstants::kCallerSPOffset;
1671 }
1672
1615 namespace { 1673 namespace {
1616 1674
1617 1675
1618 void PrintFunctionSource(StringStream* accumulator, SharedFunctionInfo* shared, 1676 void PrintFunctionSource(StringStream* accumulator, SharedFunctionInfo* shared,
1619 Code* code) { 1677 Code* code) {
1620 if (FLAG_max_stack_trace_source_length != 0 && code != NULL) { 1678 if (FLAG_max_stack_trace_source_length != 0 && code != NULL) {
1621 std::ostringstream os; 1679 std::ostringstream os;
1622 os << "--------- s o u r c e c o d e ---------\n" 1680 os << "--------- s o u r c e c o d e ---------\n"
1623 << SourceCodeOf(shared, FLAG_max_stack_trace_source_length) 1681 << SourceCodeOf(shared, FLAG_max_stack_trace_source_length)
1624 << "\n-----------------------------------------\n"; 1682 << "\n-----------------------------------------\n";
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
2043 for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { 2101 for (StackFrameIterator it(isolate); !it.done(); it.Advance()) {
2044 StackFrame* frame = AllocateFrameCopy(it.frame(), zone); 2102 StackFrame* frame = AllocateFrameCopy(it.frame(), zone);
2045 list.Add(frame, zone); 2103 list.Add(frame, zone);
2046 } 2104 }
2047 return list.ToVector(); 2105 return list.ToVector();
2048 } 2106 }
2049 2107
2050 2108
2051 } // namespace internal 2109 } // namespace internal
2052 } // namespace v8 2110 } // namespace v8
OLDNEW
« src/frames.h ('K') | « src/frames.h ('k') | src/frames-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698