| Index: src/debug/debug-interface.h
|
| diff --git a/src/debug/debug-interface.h b/src/debug/debug-interface.h
|
| index 137c2ab6ac363da30aa34714a2829b72abdf082d..6b5cb6221e9c85e3840efe25eae83eb28d04a5fd 100644
|
| --- a/src/debug/debug-interface.h
|
| +++ b/src/debug/debug-interface.h
|
| @@ -12,187 +12,183 @@
|
| #include "src/debug/interface-types.h"
|
|
|
| namespace v8 {
|
| +namespace debug {
|
|
|
| -class DebugInterface {
|
| +/**
|
| + * An event details object passed to the debug event listener.
|
| + */
|
| +class EventDetails : public v8::Debug::EventDetails {
|
| public:
|
| /**
|
| - * An event details object passed to the debug event listener.
|
| + * Event type.
|
| */
|
| - class EventDetails : public v8::Debug::EventDetails {
|
| - public:
|
| - /**
|
| - * Event type.
|
| - */
|
| - virtual v8::DebugEvent GetEvent() const = 0;
|
| -
|
| - /**
|
| - * Access to execution state and event data of the debug event. Don't store
|
| - * these cross callbacks as their content becomes invalid.
|
| - */
|
| - virtual Local<Object> GetExecutionState() const = 0;
|
| - virtual Local<Object> GetEventData() const = 0;
|
| -
|
| - /**
|
| - * Get the context active when the debug event happened. Note this is not
|
| - * the current active context as the JavaScript part of the debugger is
|
| - * running in its own context which is entered at this point.
|
| - */
|
| - virtual Local<Context> GetEventContext() const = 0;
|
| -
|
| - /**
|
| - * Client data passed with the corresponding callback when it was
|
| - * registered.
|
| - */
|
| - virtual Local<Value> GetCallbackData() const = 0;
|
| -
|
| - virtual ~EventDetails() {}
|
| - };
|
| + virtual v8::DebugEvent GetEvent() const = 0;
|
|
|
| /**
|
| - * Debug event callback function.
|
| - *
|
| - * \param event_details object providing information about the debug event
|
| - *
|
| - * A EventCallback does not take possession of the event data,
|
| - * and must not rely on the data persisting after the handler returns.
|
| + * Access to execution state and event data of the debug event. Don't store
|
| + * these cross callbacks as their content becomes invalid.
|
| */
|
| - typedef void (*EventCallback)(const EventDetails& event_details);
|
| -
|
| - static bool SetDebugEventListener(Isolate* isolate, EventCallback that,
|
| - Local<Value> data = Local<Value>());
|
| + virtual Local<Object> GetExecutionState() const = 0;
|
| + virtual Local<Object> GetEventData() const = 0;
|
|
|
| /**
|
| - * Debugger is running in its own context which is entered while debugger
|
| - * messages are being dispatched. This is an explicit getter for this
|
| - * debugger context. Note that the content of the debugger context is subject
|
| - * to change. The Context exists only when the debugger is active, i.e. at
|
| - * least one DebugEventListener or MessageHandler is set.
|
| + * Get the context active when the debug event happened. Note this is not
|
| + * the current active context as the JavaScript part of the debugger is
|
| + * running in its own context which is entered at this point.
|
| */
|
| - static Local<Context> GetDebugContext(Isolate* isolate);
|
| + virtual Local<Context> GetEventContext() const = 0;
|
|
|
| /**
|
| - * Run a JavaScript function in the debugger.
|
| - * \param fun the function to call
|
| - * \param data passed as second argument to the function
|
| - * With this call the debugger is entered and the function specified is called
|
| - * with the execution state as the first argument. This makes it possible to
|
| - * get access to information otherwise not available during normal JavaScript
|
| - * execution e.g. details on stack frames. Receiver of the function call will
|
| - * be the debugger context global object, however this is a subject to change.
|
| - * The following example shows a JavaScript function which when passed to
|
| - * v8::Debug::Call will return the current line of JavaScript execution.
|
| - *
|
| - * \code
|
| - * function frame_source_line(exec_state) {
|
| - * return exec_state.frame(0).sourceLine();
|
| - * }
|
| - * \endcode
|
| + * Client data passed with the corresponding callback when it was
|
| + * registered.
|
| */
|
| - // TODO(dcarney): data arg should be a MaybeLocal
|
| - static MaybeLocal<Value> Call(Local<Context> context,
|
| - v8::Local<v8::Function> fun,
|
| - Local<Value> data = Local<Value>());
|
| + virtual Local<Value> GetCallbackData() const = 0;
|
|
|
| - /**
|
| - * Enable/disable LiveEdit functionality for the given Isolate
|
| - * (default Isolate if not provided). V8 will abort if LiveEdit is
|
| - * unexpectedly used. LiveEdit is enabled by default.
|
| - */
|
| - static void SetLiveEditEnabled(Isolate* isolate, bool enable);
|
| + virtual ~EventDetails() {}
|
| +};
|
|
|
| - // Schedule a debugger break to happen when JavaScript code is run
|
| - // in the given isolate.
|
| - static void DebugBreak(Isolate* isolate);
|
| +/**
|
| + * Debug event callback function.
|
| + *
|
| + * \param event_details object providing information about the debug event
|
| + *
|
| + * A EventCallback does not take possession of the event data,
|
| + * and must not rely on the data persisting after the handler returns.
|
| + */
|
| +typedef void (*EventCallback)(const EventDetails& event_details);
|
| +
|
| +bool SetDebugEventListener(Isolate* isolate, EventCallback that,
|
| + Local<Value> data = Local<Value>());
|
| +
|
| +/**
|
| + * Debugger is running in its own context which is entered while debugger
|
| + * messages are being dispatched. This is an explicit getter for this
|
| + * debugger context. Note that the content of the debugger context is subject
|
| + * to change. The Context exists only when the debugger is active, i.e. at
|
| + * least one DebugEventListener or MessageHandler is set.
|
| + */
|
| +Local<Context> GetDebugContext(Isolate* isolate);
|
| +
|
| +/**
|
| + * Run a JavaScript function in the debugger.
|
| + * \param fun the function to call
|
| + * \param data passed as second argument to the function
|
| + * With this call the debugger is entered and the function specified is called
|
| + * with the execution state as the first argument. This makes it possible to
|
| + * get access to information otherwise not available during normal JavaScript
|
| + * execution e.g. details on stack frames. Receiver of the function call will
|
| + * be the debugger context global object, however this is a subject to change.
|
| + * The following example shows a JavaScript function which when passed to
|
| + * v8::Debug::Call will return the current line of JavaScript execution.
|
| + *
|
| + * \code
|
| + * function frame_source_line(exec_state) {
|
| + * return exec_state.frame(0).sourceLine();
|
| + * }
|
| + * \endcode
|
| + */
|
| +// TODO(dcarney): data arg should be a MaybeLocal
|
| +MaybeLocal<Value> Call(Local<Context> context, v8::Local<v8::Function> fun,
|
| + Local<Value> data = Local<Value>());
|
| +
|
| +/**
|
| + * Enable/disable LiveEdit functionality for the given Isolate
|
| + * (default Isolate if not provided). V8 will abort if LiveEdit is
|
| + * unexpectedly used. LiveEdit is enabled by default.
|
| + */
|
| +void SetLiveEditEnabled(Isolate* isolate, bool enable);
|
| +
|
| +// Schedule a debugger break to happen when JavaScript code is run
|
| +// in the given isolate.
|
| +void DebugBreak(Isolate* isolate);
|
| +
|
| +// Remove scheduled debugger break in given isolate if it has not
|
| +// happened yet.
|
| +void CancelDebugBreak(Isolate* isolate);
|
| +
|
| +/**
|
| + * Returns array of internal properties specific to the value type. Result has
|
| + * the following format: [<name>, <value>,...,<name>, <value>]. Result array
|
| + * will be allocated in the current context.
|
| + */
|
| +MaybeLocal<Array> GetInternalProperties(Isolate* isolate, Local<Value> value);
|
| +
|
| +enum ExceptionBreakState {
|
| + NoBreakOnException = 0,
|
| + BreakOnUncaughtException = 1,
|
| + BreakOnAnyException = 2
|
| +};
|
|
|
| - // Remove scheduled debugger break in given isolate if it has not
|
| - // happened yet.
|
| - static void CancelDebugBreak(Isolate* isolate);
|
| +/**
|
| + * Defines if VM will pause on exceptions or not.
|
| + * If BreakOnAnyExceptions is set then VM will pause on caught and uncaught
|
| + * exception, if BreakOnUncaughtException is set then VM will pause only on
|
| + * uncaught exception, otherwise VM won't stop on any exception.
|
| + */
|
| +void ChangeBreakOnException(Isolate* isolate, ExceptionBreakState state);
|
| +
|
| +enum StepAction {
|
| + StepOut = 0, // Step out of the current function.
|
| + StepNext = 1, // Step to the next statement in the current function.
|
| + StepIn = 2, // Step into new functions invoked or the next statement
|
| + // in the current function.
|
| + StepFrame = 3 // Step into a new frame or return to previous frame.
|
| +};
|
|
|
| - /**
|
| - * Returns array of internal properties specific to the value type. Result has
|
| - * the following format: [<name>, <value>,...,<name>, <value>]. Result array
|
| - * will be allocated in the current context.
|
| - */
|
| - static MaybeLocal<Array> GetInternalProperties(Isolate* isolate,
|
| - Local<Value> value);
|
| +void PrepareStep(Isolate* isolate, StepAction action);
|
| +void ClearStepping(Isolate* isolate);
|
|
|
| - enum ExceptionBreakState {
|
| - NoBreakOnException = 0,
|
| - BreakOnUncaughtException = 1,
|
| - BreakOnAnyException = 2
|
| - };
|
| +/**
|
| + * Native wrapper around v8::internal::Script object.
|
| + */
|
| +class Script {
|
| + public:
|
| + v8::Isolate* GetIsolate() const;
|
| +
|
| + ScriptOriginOptions OriginOptions() const;
|
| + bool WasCompiled() const;
|
| + int Id() const;
|
| + int LineOffset() const;
|
| + int ColumnOffset() const;
|
| + std::vector<int> LineEnds() const;
|
| + MaybeLocal<String> Name() const;
|
| + MaybeLocal<String> SourceURL() const;
|
| + MaybeLocal<String> SourceMappingURL() const;
|
| + MaybeLocal<String> ContextData() const;
|
| + MaybeLocal<String> Source() const;
|
| + bool IsWasm() const;
|
| + bool GetPossibleBreakpoints(const debug::Location& start,
|
| + const debug::Location& end,
|
| + std::vector<debug::Location>* locations) const;
|
|
|
| /**
|
| - * Defines if VM will pause on exceptions or not.
|
| - * If BreakOnAnyExceptions is set then VM will pause on caught and uncaught
|
| - * exception, if BreakOnUncaughtException is set then VM will pause only on
|
| - * uncaught exception, otherwise VM won't stop on any exception.
|
| + * script parameter is a wrapper v8::internal::JSObject for
|
| + * v8::internal::Script.
|
| + * This function gets v8::internal::Script from v8::internal::JSObject and
|
| + * wraps it with DebugInterface::Script.
|
| + * Returns empty local if not called with a valid wrapper of
|
| + * v8::internal::Script.
|
| */
|
| - static void ChangeBreakOnException(Isolate* isolate,
|
| - ExceptionBreakState state);
|
| -
|
| - enum StepAction {
|
| - StepOut = 0, // Step out of the current function.
|
| - StepNext = 1, // Step to the next statement in the current function.
|
| - StepIn = 2, // Step into new functions invoked or the next statement
|
| - // in the current function.
|
| - StepFrame = 3 // Step into a new frame or return to previous frame.
|
| - };
|
| + static MaybeLocal<Script> Wrap(Isolate* isolate,
|
| + v8::Local<v8::Object> script);
|
|
|
| - static void PrepareStep(Isolate* isolate, StepAction action);
|
| - static void ClearStepping(Isolate* isolate);
|
| + private:
|
| + int GetSourcePosition(const debug::Location& location) const;
|
| +};
|
|
|
| - /**
|
| - * Native wrapper around v8::internal::Script object.
|
| - */
|
| - class Script {
|
| - public:
|
| - v8::Isolate* GetIsolate() const;
|
| -
|
| - ScriptOriginOptions OriginOptions() const;
|
| - bool WasCompiled() const;
|
| - int Id() const;
|
| - int LineOffset() const;
|
| - int ColumnOffset() const;
|
| - std::vector<int> LineEnds() const;
|
| - MaybeLocal<String> Name() const;
|
| - MaybeLocal<String> SourceURL() const;
|
| - MaybeLocal<String> SourceMappingURL() const;
|
| - MaybeLocal<String> ContextData() const;
|
| - MaybeLocal<String> Source() const;
|
| - bool IsWasm() const;
|
| - bool GetPossibleBreakpoints(const debug::Location& start,
|
| - const debug::Location& end,
|
| - std::vector<debug::Location>* locations) const;
|
| -
|
| - /**
|
| - * script parameter is a wrapper v8::internal::JSObject for
|
| - * v8::internal::Script.
|
| - * This function gets v8::internal::Script from v8::internal::JSObject and
|
| - * wraps it with DebugInterface::Script.
|
| - * Returns empty local if not called with a valid wrapper of
|
| - * v8::internal::Script.
|
| - */
|
| - static MaybeLocal<Script> Wrap(Isolate* isolate,
|
| - v8::Local<v8::Object> script);
|
| -
|
| - private:
|
| - int GetSourcePosition(const debug::Location& location) const;
|
| - };
|
| -
|
| - static void GetLoadedScripts(Isolate* isolate,
|
| - PersistentValueVector<Script>& scripts);
|
| +void GetLoadedScripts(Isolate* isolate, PersistentValueVector<Script>& scripts);
|
|
|
| - /**
|
| - * Compute the disassembly of a wasm function.
|
| - */
|
| - static debug::WasmDisassembly DisassembleWasmFunction(
|
| - Isolate* isolate, v8::Local<v8::Object> script, int function_index);
|
| +/**
|
| + * Compute the disassembly of a wasm function.
|
| + */
|
| +debug::WasmDisassembly DisassembleWasmFunction(Isolate* isolate,
|
| + v8::Local<v8::Object> script,
|
| + int function_index);
|
|
|
| - static MaybeLocal<UnboundScript> CompileInspectorScript(Isolate* isolate,
|
| - Local<String> source);
|
| -};
|
| +MaybeLocal<UnboundScript> CompileInspectorScript(Isolate* isolate,
|
| + Local<String> source);
|
|
|
| +} // namespace debug
|
| } // namespace v8
|
|
|
| #endif // V8_DEBUG_DEBUG_INTERFACE_H_
|
|
|