#pragma once #include #include "class_handle.h" #include namespace ivm { /** * v8::StackTrace doesn't inherit from v8::Value so it can't be set as a property of an object which * is what we need to do to pass stack traces in an efficent way. So this gets around that. */ class StackTraceHolder : public ClassHandle { private: static void AppendFileLocation(v8::Isolate* isolate, v8::Local frame, std::stringstream& ss); public: v8::Global stack_trace; explicit StackTraceHolder(v8::Local stack_handle); static auto Definition() -> v8::Local; static void AttachStack(v8::Local error, v8::Local stack); static void ChainStack(v8::Local error, v8::Local stack); static auto RenderSingleStack(v8::Local stack_trace) -> std::string; }; } // namespace ivm