@@ -468,11 +468,13 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator,
468468 case Code::OPTIMIZED_FUNCTION :
469469 return OPTIMIZED ;
470470 case Code::WASM_FUNCTION :
471- return WASM ;
471+ return WASM_COMPILED ;
472472 case Code::WASM_TO_JS_FUNCTION :
473473 return WASM_TO_JS ;
474474 case Code::JS_TO_WASM_FUNCTION :
475475 return JS_TO_WASM ;
476+ case Code::WASM_INTERPRETER_ENTRY :
477+ return WASM_INTERPRETER_ENTRY ;
476478 default :
477479 // All other types should have an explicit marker
478480 break ;
@@ -496,7 +498,7 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator,
496498 case CONSTRUCT :
497499 case ARGUMENTS_ADAPTOR :
498500 case WASM_TO_JS :
499- case WASM :
501+ case WASM_COMPILED :
500502 return candidate;
501503 case JS_TO_WASM :
502504 case JAVA_SCRIPT :
@@ -760,6 +762,12 @@ void StandardFrame::SetCallerFp(Address caller_fp) {
760762
761763bool StandardFrame::IsConstructor () const { return false ; }
762764
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+
763771void StandardFrame::IterateCompiledFrame (ObjectVisitor* v) const {
764772 // Make sure that we're not doing "safe" stack frame iteration. We cannot
765773 // possibly find pointers in optimized frames in that state.
@@ -791,7 +799,8 @@ void StandardFrame::IterateCompiledFrame(ObjectVisitor* v) const {
791799 case CONSTRUCT :
792800 case JS_TO_WASM :
793801 case WASM_TO_JS :
794- case WASM :
802+ case WASM_COMPILED :
803+ case WASM_INTERPRETER_ENTRY :
795804 frame_header_size = TypedFrameConstants::kFixedFrameSizeFromFp ;
796805 break ;
797806 case JAVA_SCRIPT :
@@ -973,17 +982,17 @@ JSFunction* JavaScriptFrame::function() const {
973982
974983Object* JavaScriptFrame::receiver () const { return GetParameter (-1 ); }
975984
976- Script* JavaScriptFrame::script () const {
977- return Script::cast (function ()->shared ()->script ());
978- }
979-
980985Object* JavaScriptFrame::context () const {
981986 const int offset = StandardFrameConstants::kContextOffset ;
982987 Object* maybe_result = Memory::Object_at (fp () + offset);
983988 DCHECK (!maybe_result->IsSmi ());
984989 return maybe_result;
985990}
986991
992+ Script* JavaScriptFrame::script () const {
993+ return Script::cast (function ()->shared ()->script ());
994+ }
995+
987996int JavaScriptFrame::LookupExceptionHandlerInTable (
988997 int * stack_depth, HandlerTable::CatchPrediction* prediction) {
989998 DCHECK_EQ (0 , LookupCode ()->handler_table ()->length ());
@@ -1134,7 +1143,7 @@ FrameSummary::FrameSummary(Object* receiver, JSFunction* function,
11341143 mode == kApproximateSummary );
11351144}
11361145
1137- FrameSummary FrameSummary::GetFirst (JavaScriptFrame * frame) {
1146+ FrameSummary FrameSummary::GetFirst (StandardFrame * frame) {
11381147 List<FrameSummary> frames (FLAG_max_inlining_levels + 1 );
11391148 frame->Summarize (&frames);
11401149 return frames.first ();
@@ -1522,8 +1531,8 @@ void StackFrame::PrintIndex(StringStream* accumulator,
15221531 accumulator->Add ((mode == OVERVIEW ) ? " %5d: " : " [%d]: " , index);
15231532}
15241533
1525- void WasmFrame ::Print (StringStream* accumulator, PrintMode mode,
1526- int index) const {
1534+ void WasmCompiledFrame ::Print (StringStream* accumulator, PrintMode mode,
1535+ int index) const {
15271536 PrintIndex (accumulator, mode, index);
15281537 accumulator->Add (" WASM [" );
15291538 Script* script = this ->script ();
@@ -1543,35 +1552,36 @@ void WasmFrame::Print(StringStream* accumulator, PrintMode mode,
15431552 if (mode != OVERVIEW ) accumulator->Add (" \n " );
15441553}
15451554
1546- Code* WasmFrame ::unchecked_code () const {
1547- return static_cast <Code*>( isolate ()->FindCodeObject (pc () ));
1555+ Code* WasmCompiledFrame ::unchecked_code () const {
1556+ return isolate ()->FindCodeObject (pc ());
15481557}
15491558
1550- void WasmFrame::Iterate (ObjectVisitor* v) const { IterateCompiledFrame (v); }
1559+ void WasmCompiledFrame::Iterate (ObjectVisitor* v) const {
1560+ IterateCompiledFrame (v);
1561+ }
15511562
1552- Address WasmFrame ::GetCallerStackPointer () const {
1563+ Address WasmCompiledFrame ::GetCallerStackPointer () const {
15531564 return fp () + ExitFrameConstants::kCallerSPOffset ;
15541565}
15551566
1556- WasmInstanceObject* WasmFrame ::wasm_instance () const {
1567+ WasmInstanceObject* WasmCompiledFrame ::wasm_instance () const {
15571568 WasmInstanceObject* obj = wasm::GetOwningWasmInstance (LookupCode ());
15581569 // This is a live stack frame; it must have a live instance.
15591570 DCHECK_NOT_NULL (obj);
15601571 return obj;
15611572}
15621573
1563- uint32_t WasmFrame ::function_index () const {
1574+ uint32_t WasmCompiledFrame ::function_index () const {
15641575 FixedArray* deopt_data = LookupCode ()->deoptimization_data ();
15651576 DCHECK (deopt_data->length () == 2 );
15661577 return Smi::cast (deopt_data->get (1 ))->value ();
15671578}
15681579
1569- Script* WasmFrame::script () const {
1570- Handle<JSObject> instance (JSObject::cast (wasm_instance ()), isolate ());
1571- return *wasm::GetScript (instance);
1580+ Script* WasmCompiledFrame::script () const {
1581+ return wasm_instance ()->compiled_module ()->script ();
15721582}
15731583
1574- int WasmFrame ::position () const {
1584+ int WasmCompiledFrame ::position () const {
15751585 int position = StandardFrame::position ();
15761586 if (wasm_instance ()->compiled_module ()->is_asm_js ()) {
15771587 Handle<WasmCompiledModule> compiled_module (
@@ -1585,7 +1595,12 @@ int WasmFrame::position() const {
15851595 return position;
15861596}
15871597
1588- bool WasmFrame::at_to_number_conversion () const {
1598+ void WasmCompiledFrame::Summarize (List<FrameSummary>* functions,
1599+ FrameSummary::Mode mode) const {
1600+ // TODO(clemensh): Implement.
1601+ }
1602+
1603+ bool WasmCompiledFrame::at_to_number_conversion () const {
15891604 // Check whether our callee is a WASM_TO_JS frame, and this frame is at the
15901605 // ToNumber conversion call.
15911606 Address callee_pc = reinterpret_cast <Address>(this ->callee_pc ());
@@ -1598,7 +1613,7 @@ bool WasmFrame::at_to_number_conversion() const {
15981613 return !!pos;
15991614}
16001615
1601- int WasmFrame ::LookupExceptionHandlerInTable (int * stack_slots) {
1616+ int WasmCompiledFrame ::LookupExceptionHandlerInTable (int * stack_slots) {
16021617 DCHECK_NOT_NULL (stack_slots);
16031618 Code* code = LookupCode ();
16041619 HandlerTable* table = HandlerTable::cast (code->handler_table ());
@@ -1607,6 +1622,49 @@ int WasmFrame::LookupExceptionHandlerInTable(int* stack_slots) {
16071622 return table->LookupReturn (pc_offset);
16081623}
16091624
1625+ void WasmInterpreterEntryFrame::Iterate (ObjectVisitor* v) const {
1626+ IterateCompiledFrame (v);
1627+ }
1628+
1629+ void WasmInterpreterEntryFrame::Print (StringStream* accumulator, PrintMode mode,
1630+ int index) const {
1631+ PrintIndex (accumulator, mode, index);
1632+ accumulator->Add (" WASM TO INTERPRETER [" );
1633+ Script* script = this ->script ();
1634+ accumulator->PrintName (script->name ());
1635+ accumulator->Add (" ]" );
1636+ if (mode != OVERVIEW ) accumulator->Add (" \n " );
1637+ }
1638+
1639+ void WasmInterpreterEntryFrame::Summarize (List<FrameSummary>* functions,
1640+ FrameSummary::Mode mode) const {
1641+ // TODO(clemensh): Implement this.
1642+ }
1643+
1644+ Code* WasmInterpreterEntryFrame::unchecked_code () const {
1645+ return isolate ()->FindCodeObject (pc ());
1646+ }
1647+
1648+ WasmInstanceObject* WasmInterpreterEntryFrame::wasm_instance () const {
1649+ WasmInstanceObject* ret = wasm::GetOwningWasmInstance (LookupCode ());
1650+ // This is a live stack frame, there must be a live wasm instance available.
1651+ DCHECK_NOT_NULL (ret);
1652+ return ret;
1653+ }
1654+
1655+ Script* WasmInterpreterEntryFrame::script () const {
1656+ return wasm_instance ()->compiled_module ()->script ();
1657+ }
1658+
1659+ int WasmInterpreterEntryFrame::position () const {
1660+ // TODO(clemensh): Implement this.
1661+ return 0 ;
1662+ }
1663+
1664+ Address WasmInterpreterEntryFrame::GetCallerStackPointer () const {
1665+ return fp () + ExitFrameConstants::kCallerSPOffset ;
1666+ }
1667+
16101668namespace {
16111669
16121670
0 commit comments