Index: src/frames.h |
diff --git a/src/frames.h b/src/frames.h |
index a5355a4e8cd76bf0513b37801eb65b5f82b90ccc..b56fc9ac23df47622eb4b0ce7856becaa0cf3264 100644 |
--- a/src/frames.h |
+++ b/src/frames.h |
@@ -98,23 +98,25 @@ class StackHandler BASE_EMBEDDED { |
DISALLOW_IMPLICIT_CONSTRUCTORS(StackHandler); |
}; |
-#define STACK_FRAME_TYPE_LIST(V) \ |
- V(ENTRY, EntryFrame) \ |
- V(ENTRY_CONSTRUCT, EntryConstructFrame) \ |
- V(EXIT, ExitFrame) \ |
- V(JAVA_SCRIPT, JavaScriptFrame) \ |
- V(OPTIMIZED, OptimizedFrame) \ |
- V(WASM_COMPILED, WasmCompiledFrame) \ |
- V(WASM_TO_JS, WasmToJsFrame) \ |
- V(JS_TO_WASM, JsToWasmFrame) \ |
- V(WASM_INTERPRETER_ENTRY, WasmInterpreterEntryFrame) \ |
- V(INTERPRETED, InterpretedFrame) \ |
- V(STUB, StubFrame) \ |
- V(STUB_FAILURE_TRAMPOLINE, StubFailureTrampolineFrame) \ |
- V(INTERNAL, InternalFrame) \ |
- V(CONSTRUCT, ConstructFrame) \ |
- V(ARGUMENTS_ADAPTOR, ArgumentsAdaptorFrame) \ |
- V(BUILTIN, BuiltinFrame) \ |
+#define STACK_FRAME_TYPE_LIST(V) \ |
+ V(ENTRY, EntryFrame) \ |
+ V(ENTRY_CONSTRUCT, EntryConstructFrame) \ |
+ V(EXIT, ExitFrame) \ |
+ V(JAVA_SCRIPT, JavaScriptFrame) \ |
+ V(OPTIMIZED, OptimizedFrame) \ |
+ V(WASM_COMPILED, WasmCompiledFrame) \ |
+ V(WASM_TO_JS, WasmToJsFrame) \ |
+ V(JS_TO_WASM, JsToWasmFrame) \ |
+ V(WASM_INTERPRETER_ENTRY, WasmInterpreterEntryFrame) \ |
+ V(INTERPRETED, InterpretedFrame) \ |
+ V(STUB, StubFrame) \ |
+ V(STUB_FAILURE_TRAMPOLINE, StubFailureTrampolineFrame) \ |
+ V(BUILTIN_CONTINUATION, BuiltinContinuationFrame) \ |
+ V(JAVA_SCRIPT_BUILTIN_CONTINUATION, JavaScriptBuiltinContinuationFrame) \ |
+ V(INTERNAL, InternalFrame) \ |
+ V(CONSTRUCT, ConstructFrame) \ |
+ V(ARGUMENTS_ADAPTOR, ArgumentsAdaptorFrame) \ |
+ V(BUILTIN, BuiltinFrame) \ |
V(BUILTIN_EXIT, BuiltinExitFrame) |
// Every pointer in a frame has a slot id. On 32-bit platforms, doubles consume |
@@ -359,6 +361,15 @@ class ConstructFrameConstants : public TypedFrameConstants { |
DEFINE_TYPED_FRAME_SIZES(4); |
}; |
+class BuiltinContinuationFrameConstants : public TypedFrameConstants { |
+ public: |
+ // FP-relative. |
+ static const int kFunctionOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(0); |
+ static const int kBuiltinOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(1); |
+ static const int kArgCOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(2); |
+ DEFINE_TYPED_FRAME_SIZES(2); |
+}; |
+ |
class StubFailureTrampolineFrameConstants : public InternalFrameConstants { |
public: |
static const int kArgumentsArgumentsOffset = |
@@ -525,6 +536,12 @@ class StackFrame BASE_EMBEDDED { |
bool is_stub_failure_trampoline() const { |
return type() == STUB_FAILURE_TRAMPOLINE; |
} |
+ bool is_builtin_continuation() const { |
+ return type() == BUILTIN_CONTINUATION; |
+ } |
+ bool is_java_script_builtin_continuation() const { |
+ return type() == JAVA_SCRIPT_BUILTIN_CONTINUATION; |
+ } |
bool is_construct() const { return type() == CONSTRUCT; } |
bool is_builtin_exit() const { return type() == BUILTIN_EXIT; } |
virtual bool is_standard() const { return false; } |
@@ -532,7 +549,8 @@ class StackFrame BASE_EMBEDDED { |
bool is_java_script() const { |
Type type = this->type(); |
return (type == JAVA_SCRIPT) || (type == OPTIMIZED) || |
- (type == INTERPRETED) || (type == BUILTIN); |
+ (type == INTERPRETED) || (type == BUILTIN) || |
+ (type == JAVA_SCRIPT_BUILTIN_CONTINUATION); |
} |
bool is_wasm() const { |
Type type = this->type(); |
@@ -1460,6 +1478,40 @@ class ConstructFrame: public InternalFrame { |
friend class StackFrameIteratorBase; |
}; |
+class BuiltinContinuationFrame : public InternalFrame { |
+ public: |
+ Type type() const override { return BUILTIN_CONTINUATION; } |
+ |
+ static BuiltinContinuationFrame* cast(StackFrame* frame) { |
+ DCHECK(frame->is_builtin_continuation()); |
+ return static_cast<BuiltinContinuationFrame*>(frame); |
+ } |
+ |
+ protected: |
+ inline explicit BuiltinContinuationFrame(StackFrameIteratorBase* iterator); |
+ |
+ private: |
+ friend class StackFrameIteratorBase; |
+}; |
+ |
+class JavaScriptBuiltinContinuationFrame : public JavaScriptFrame { |
+ public: |
+ Type type() const override { return JAVA_SCRIPT_BUILTIN_CONTINUATION; } |
+ |
+ static JavaScriptBuiltinContinuationFrame* cast(StackFrame* frame) { |
+ DCHECK(frame->is_java_script_builtin_continuation()); |
+ return static_cast<JavaScriptBuiltinContinuationFrame*>(frame); |
+ } |
+ |
+ int ComputeParametersCount() const override; |
+ |
+ protected: |
+ inline explicit JavaScriptBuiltinContinuationFrame( |
+ StackFrameIteratorBase* iterator); |
+ |
+ private: |
+ friend class StackFrameIteratorBase; |
+}; |
class StackFrameIteratorBase BASE_EMBEDDED { |
public: |