mutable
A Database System for Research and Fast Prototyping
Loading...
Searching...
No Matches
V8Engine.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "backend/WebAssembly.hpp"
5#include <v8-inspector.h>
6#include <v8.h>
7
8
9namespace m {
10
11namespace wasm {
12
13namespace detail {
14
16{
17 private:
18 v8::Isolate *isolate_;
20
21 public:
22 WebSocketChannel(v8::Isolate *isolate, WebSocketServer::Connection &conn)
23 : isolate_(isolate)
24 , conn_(conn) {}
25
27
28 private:
29 void sendResponse(int, std::unique_ptr<v8_inspector::StringBuffer> message) override;
30 void sendNotification(std::unique_ptr<v8_inspector::StringBuffer> message) override;
31
32 void flushProtocolNotifications() override {}
33};
34
35struct V8InspectorClientImpl : v8_inspector::V8InspectorClient
36{
37 private:
38 v8::Isolate *isolate_ = nullptr;
40 std::unique_ptr<WebSocketServer::Connection> conn_;
41 std::unique_ptr<WebSocketChannel> channel_;
42 std::unique_ptr<v8_inspector::V8Inspector> inspector_;
43 std::unique_ptr<v8_inspector::V8InspectorSession> session_;
44 std::function<void(void)> code_;
45 bool is_terminated_ = true;
46
47 public:
48 V8InspectorClientImpl(int16_t port, v8::Isolate *isolate);
50
52 session_.reset();
53 channel_.reset();
54 conn_.reset();
55 inspector_.reset();
56 }
57
58 void start(std::function<void(void)> code) {
59 code_ = std::move(code);
60 conn_->listen();
61 }
62
64 void register_context(v8::Local<v8::Context> context);
65
67 void deregister_context(v8::Local<v8::Context> context);
68
69 void on_message(std::string_view sv);
70
72 void runMessageLoopOnPause(int) override;
73
75 void quitMessageLoopOnPause() override { is_terminated_ = true; }
76
78};
79
80void insist(const v8::FunctionCallbackInfo<v8::Value> &info);
81void _throw(const v8::FunctionCallbackInfo<v8::Value> &info);
82void print(const v8::FunctionCallbackInfo<v8::Value> &info);
83void print_memory_consumption(const v8::FunctionCallbackInfo<v8::Value> &info);
84void set_wasm_instance_raw_memory(const v8::FunctionCallbackInfo<v8::Value> &info);
85void read_result_set(const v8::FunctionCallbackInfo<v8::Value> &info);
86template<typename Index, typename V8ValueT, bool IsLower>
87void index_seek(const v8::FunctionCallbackInfo<v8::Value> &info);
88template<typename Index>
89void index_sequential_scan(const v8::FunctionCallbackInfo<v8::Value> &info);
90
91v8::Local<v8::String> mkstr(v8::Isolate &isolate, const std::string &str);
92v8::Local<v8::WasmModuleObject> instantiate(v8::Isolate &isolate, v8::Local<v8::Object> imports);
93v8::Local<v8::Object> create_env(v8::Isolate &isolate, const m::MatchBase &plan);
94v8::Local<v8::String> to_json(v8::Isolate &isolate, v8::Local<v8::Value> val);
95std::string create_js_debug_script(v8::Isolate &isolate, v8::Local<v8::Object> env,
96 const WasmEngine::WasmContext &wasm_context);
97void run_inspector(V8InspectorClientImpl &inspector, v8::Isolate &isolate, v8::Local<v8::Object> env);
98
99}
100
101}
102
103}
void insist(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition: V8Engine.cpp:233
void _throw(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition: V8Engine.cpp:248
v8::Local< v8::Object > create_env(v8::Isolate &isolate, const m::MatchBase &plan)
Definition: V8Engine.cpp:1075
v8::Local< v8::WasmModuleObject > instantiate(v8::Isolate &isolate, v8::Local< v8::Object > imports)
Definition: V8Engine.cpp:1046
std::string create_js_debug_script(v8::Isolate &isolate, v8::Local< v8::Object > env, const WasmEngine::WasmContext &wasm_context)
Definition: V8Engine.cpp:1188
void print_memory_consumption(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition: V8Engine.cpp:281
void set_wasm_instance_raw_memory(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition: V8Engine.cpp:292
v8::Local< v8::String > mkstr(v8::Isolate &isolate, const std::string &str)
Definition: V8Engine.cpp:1041
void index_sequential_scan(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition: V8Engine.cpp:565
void run_inspector(V8InspectorClientImpl &inspector, v8::Isolate &isolate, v8::Local< v8::Object > env)
Definition: V8Engine.cpp:1247
void print(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition: V8Engine.cpp:264
void index_seek(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition: V8Engine.cpp:535
v8::Local< v8::String > to_json(v8::Isolate &isolate, v8::Local< v8::Value > val)
Definition: V8Engine.cpp:1181
void read_result_set(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition: V8Engine.cpp:306
‍mutable namespace
Definition: Backend.hpp:10
A WasmContext holds associated information of a WebAssembly module instance.
Definition: WebAssembly.hpp:27
std::unique_ptr< WebSocketServer::Connection > conn_
Definition: V8Engine.hpp:40
std::function< void(void)> code_
the code to execute in the debugger
Definition: V8Engine.hpp:44
void runMessageLoopOnPause(int) override
Synchronously consume all front end (CDT) debugging messages.
Definition: V8Engine.cpp:213
void quitMessageLoopOnPause() override
Called by V8 when no more inspector messages are pending.
Definition: V8Engine.hpp:75
V8InspectorClientImpl(const V8InspectorClientImpl &)=delete
void register_context(v8::Local< v8::Context > context)
Register the context object in the V8Inspector instance.
Definition: V8Engine.cpp:178
std::unique_ptr< WebSocketChannel > channel_
Definition: V8Engine.hpp:41
std::unique_ptr< v8_inspector::V8InspectorSession > session_
Definition: V8Engine.hpp:43
void on_message(std::string_view sv)
Definition: V8Engine.cpp:189
void start(std::function< void(void)> code)
Definition: V8Engine.hpp:58
void deregister_context(v8::Local< v8::Context > context)
Deregister the context object in the V8Inspector instance.
Definition: V8Engine.cpp:184
std::unique_ptr< v8_inspector::V8Inspector > inspector_
Definition: V8Engine.hpp:42
void sendResponse(int, std::unique_ptr< v8_inspector::StringBuffer > message) override
Definition: V8Engine.cpp:140
void sendNotification(std::unique_ptr< v8_inspector::StringBuffer > message) override
Definition: V8Engine.cpp:147
WebSocketServer::Connection & conn_
Definition: V8Engine.hpp:19
WebSocketChannel(v8::Isolate *isolate, WebSocketServer::Connection &conn)
Definition: V8Engine.hpp:22
WebSocketServer::Connection & connection() const
Definition: V8Engine.hpp:26
void flushProtocolNotifications() override
Definition: V8Engine.hpp:32