summaryrefslogtreecommitdiff
path: root/core/libdeno/internal.h
diff options
context:
space:
mode:
authorRy Dahl <ry@tinyclouds.org>2020-01-05 09:19:29 -0500
committerGitHub <noreply@github.com>2020-01-05 09:19:29 -0500
commit5f1df038fb1462607af3555fa7431c05ca484dce (patch)
tree0e819c1e1ec422b9573abc379c79fcbcc1cbd88c /core/libdeno/internal.h
parentc41280a057c9ca300afe43f2cb4f576e050f8cde (diff)
Replace libdeno with rusty_v8 (#3556)
Diffstat (limited to 'core/libdeno/internal.h')
-rw-r--r--core/libdeno/internal.h206
1 files changed, 0 insertions, 206 deletions
diff --git a/core/libdeno/internal.h b/core/libdeno/internal.h
deleted file mode 100644
index 9669473a1..000000000
--- a/core/libdeno/internal.h
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-#ifndef INTERNAL_H_
-#define INTERNAL_H_
-
-#include <map>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "buffer.h"
-#include "deno.h"
-#include "v8/include/v8.h"
-#include "v8/src/base/logging.h"
-
-namespace deno {
-
-struct ModuleInfo {
- bool main;
- std::string name;
- v8::Persistent<v8::Module> handle;
- std::vector<std::string> import_specifiers;
-
- ModuleInfo(v8::Isolate* isolate, v8::Local<v8::Module> module, bool main_,
- const char* name_, std::vector<std::string> import_specifiers_)
- : main(main_), name(name_), import_specifiers(import_specifiers_) {
- handle.Reset(isolate, module);
- }
-};
-
-// deno_s = Wrapped Isolate.
-class DenoIsolate {
- public:
- explicit DenoIsolate(deno_config config)
- : isolate_(nullptr),
- locker_(nullptr),
- shared_(config.shared),
- current_args_(nullptr),
- snapshot_creator_(nullptr),
- global_import_buf_ptr_(nullptr),
- recv_cb_(config.recv_cb),
- user_data_(nullptr),
- resolve_cb_(nullptr),
- next_dyn_import_id_(0),
- dyn_import_cb_(config.dyn_import_cb),
- has_snapshotted_(false) {
- if (config.load_snapshot.data_ptr) {
- snapshot_.data =
- reinterpret_cast<const char*>(config.load_snapshot.data_ptr);
- snapshot_.raw_size = static_cast<int>(config.load_snapshot.data_len);
- }
- }
-
- ~DenoIsolate() {
- last_exception_handle_.Reset();
- shared_ab_.Reset();
- if (locker_) {
- delete locker_;
- }
- if (snapshot_creator_) {
- // TODO(ry) V8 has a strange assert which prevents a SnapshotCreator from
- // being deallocated if it hasn't created a snapshot yet.
- // https://github.com/v8/v8/blob/73212783fbd534fac76cc4b66aac899c13f71fc8/src/api.cc#L603
- // If that assert is removed, this if guard could be removed.
- // WARNING: There may be false positive LSAN errors here.
- if (has_snapshotted_) {
- delete snapshot_creator_;
- }
- } else {
- isolate_->Dispose();
- }
- }
-
- static inline DenoIsolate* FromIsolate(v8::Isolate* isolate) {
- return static_cast<DenoIsolate*>(isolate->GetData(0));
- }
-
- void AddIsolate(v8::Isolate* isolate);
-
- deno_mod RegisterModule(bool main, const char* name, const char* source);
- void ClearModules();
-
- ModuleInfo* GetModuleInfo(deno_mod id) {
- if (id == 0) {
- return nullptr;
- }
- auto it = mods_.find(id);
- if (it != mods_.end()) {
- return &it->second;
- } else {
- return nullptr;
- }
- }
-
- v8::Isolate* isolate_;
- v8::Locker* locker_;
- deno_buf shared_;
- const v8::FunctionCallbackInfo<v8::Value>* current_args_;
- v8::SnapshotCreator* snapshot_creator_;
- void* global_import_buf_ptr_;
- deno_recv_cb recv_cb_;
- void* user_data_;
-
- std::map<deno_mod, ModuleInfo> mods_;
- std::map<std::string, deno_mod> mods_by_name_;
- deno_resolve_cb resolve_cb_;
-
- deno_dyn_import_id next_dyn_import_id_;
- deno_dyn_import_cb dyn_import_cb_;
- std::map<deno_dyn_import_id, v8::Persistent<v8::Promise::Resolver>>
- dyn_import_map_;
-
- v8::Persistent<v8::Context> context_;
- std::map<int, v8::Persistent<v8::Value>> pending_promise_map_;
- std::string last_exception_;
- v8::Persistent<v8::Value> last_exception_handle_;
- v8::Persistent<v8::Function> recv_;
- v8::StartupData snapshot_;
- v8::Persistent<v8::ArrayBuffer> global_import_buf_;
- v8::Persistent<v8::SharedArrayBuffer> shared_ab_;
- bool has_snapshotted_;
-};
-
-class UserDataScope {
- DenoIsolate* deno_;
- void* prev_data_;
- void* data_; // Not necessary; only for sanity checking.
-
- public:
- UserDataScope(DenoIsolate* deno, void* data) : deno_(deno), data_(data) {
- CHECK(deno->user_data_ == nullptr || deno->user_data_ == data_);
- prev_data_ = deno->user_data_;
- deno->user_data_ = data;
- }
-
- ~UserDataScope() {
- CHECK(deno_->user_data_ == data_);
- deno_->user_data_ = prev_data_;
- }
-};
-
-struct InternalFieldData {
- uint32_t data;
-};
-
-static inline v8::Local<v8::String> v8_str(const char* x) {
- return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), x,
- v8::NewStringType::kNormal)
- .ToLocalChecked();
-}
-
-static inline DenoIsolate* unwrap(Deno* d_) {
- return reinterpret_cast<deno::DenoIsolate*>(d_);
-}
-
-const char* ToCString(const v8::String::Utf8Value& value);
-
-void Print(const v8::FunctionCallbackInfo<v8::Value>& args);
-void Recv(const v8::FunctionCallbackInfo<v8::Value>& args);
-void Send(const v8::FunctionCallbackInfo<v8::Value>& args);
-void EvalContext(const v8::FunctionCallbackInfo<v8::Value>& args);
-void ErrorToJSON(const v8::FunctionCallbackInfo<v8::Value>& args);
-void Shared(v8::Local<v8::Name> property,
- const v8::PropertyCallbackInfo<v8::Value>& info);
-void MessageCallback(v8::Local<v8::Message> message, v8::Local<v8::Value> data);
-void QueueMicrotask(const v8::FunctionCallbackInfo<v8::Value>& args);
-static intptr_t external_references[] = {
- reinterpret_cast<intptr_t>(Print),
- reinterpret_cast<intptr_t>(Recv),
- reinterpret_cast<intptr_t>(Send),
- reinterpret_cast<intptr_t>(EvalContext),
- reinterpret_cast<intptr_t>(ErrorToJSON),
- reinterpret_cast<intptr_t>(Shared),
- reinterpret_cast<intptr_t>(MessageCallback),
- reinterpret_cast<intptr_t>(QueueMicrotask),
- 0};
-
-static const deno_buf empty_buf = {nullptr, 0};
-static const deno_snapshot empty_snapshot = {nullptr, 0};
-
-Deno* NewFromSnapshot(void* user_data, deno_recv_cb cb);
-
-void InitializeContext(v8::Isolate* isolate, v8::Local<v8::Context> context);
-
-void DeserializeInternalFields(v8::Local<v8::Object> holder, int index,
- v8::StartupData payload, void* data);
-
-v8::StartupData SerializeInternalFields(v8::Local<v8::Object> holder, int index,
- void* data);
-
-v8::Local<v8::Uint8Array> ImportBuf(DenoIsolate* d, deno_buf buf);
-
-bool Execute(v8::Local<v8::Context> context, const char* js_filename,
- const char* js_source);
-bool ExecuteMod(v8::Local<v8::Context> context, const char* js_filename,
- const char* js_source, bool resolve_only);
-
-} // namespace deno
-
-extern "C" {
-// This is just to workaround the linker.
-struct deno_s {
- deno::DenoIsolate isolate;
-};
-}
-
-#endif // INTERNAL_H_