v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
d8.h
Go to the documentation of this file.
1// Copyright 2012 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_D8_D8_H_
6#define V8_D8_D8_H_
7
8#include <iterator>
9#include <map>
10#include <memory>
11#include <optional>
12#include <queue>
13#include <string>
14#include <unordered_map>
15#include <unordered_set>
16#include <vector>
17
19#include "include/v8-isolate.h"
20#include "include/v8-script.h"
22#include "src/base/once.h"
28
29namespace v8 {
30
31class BackingStore;
32class CompiledWasmModule;
33class D8Console;
34class Message;
35class TryCatch;
36
38
39namespace internal {
40class CancelableTaskManager;
41} // namespace internal
42
43struct DynamicImportData;
44
45// A single counter in a counter collection.
46class Counter {
47 public:
48 static const int kMaxNameSize = 64;
49 void Bind(const char* name, bool histogram);
50 // TODO(12482): Return pointer to an atomic.
51 int* ptr() {
52 static_assert(sizeof(int) == sizeof(count_));
53 return reinterpret_cast<int*>(&count_);
54 }
55 int count() const { return count_.load(std::memory_order_relaxed); }
56 int sample_total() const {
57 return sample_total_.load(std::memory_order_relaxed);
58 }
59 bool is_histogram() const { return is_histogram_; }
60 void AddSample(int32_t sample);
61
62 private:
63 std::atomic<int> count_;
64 std::atomic<int> sample_total_;
67};
68
69// A set of counters and associated information. An instance of this
70// class is stored directly in the memory-mapped counters file if
71// the --map-counters options is used
73 public:
76
77 private:
78 static const unsigned kMaxCounters = 512;
79 uint32_t magic_number_;
80 uint32_t max_counters_;
84};
85
86using CounterMap = std::unordered_map<std::string, Counter*>;
87
89 public:
91 : next_semaphore_(0),
93 thread_(nullptr),
94 argv_(nullptr),
96 end_offset_(0) {}
97
99
100 void Begin(char** argv, int offset) {
101 argv_ = const_cast<const char**>(argv);
103 }
104
105 void End(int offset) { end_offset_ = offset; }
106
107 // Returns true on success, false if an uncaught exception was thrown.
108 bool Execute(Isolate* isolate);
109
111 void WaitForThread(const i::ParkedScope& parked);
112 void JoinThread(const i::ParkedScope& parked);
113
114 private:
116 public:
117 explicit IsolateThread(SourceGroup* group);
118
119 void Run() override { group_->ExecuteInThread(); }
120
121 private:
123 };
124
125 void ExecuteInThread();
126
130
131 void ExitShell(int exit_code);
132
133 const char** argv_;
136};
137
139 public:
140 SerializationData() = default;
143
144 uint8_t* data() { return data_.get(); }
145 size_t size() { return size_; }
146 const std::vector<std::shared_ptr<v8::BackingStore>>& backing_stores() {
147 return backing_stores_;
148 }
149 const std::vector<std::shared_ptr<v8::BackingStore>>& sab_backing_stores() {
150 return sab_backing_stores_;
151 }
152 const std::vector<CompiledWasmModule>& compiled_wasm_modules() {
154 }
155 const std::optional<v8::SharedValueConveyor>& shared_value_conveyor() {
157 }
158
159 private:
160 struct DataDeleter {
161 void operator()(uint8_t* p) const { base::Free(p); }
162 };
163
164 std::unique_ptr<uint8_t, DataDeleter> data_;
165 size_t size_ = 0;
166 std::vector<std::shared_ptr<v8::BackingStore>> backing_stores_;
167 std::vector<std::shared_ptr<v8::BackingStore>> sab_backing_stores_;
168 std::vector<CompiledWasmModule> compiled_wasm_modules_;
169 std::optional<v8::SharedValueConveyor> shared_value_conveyor_;
170
171 private:
172 friend class Serializer;
173};
174
176 public:
177 void Enqueue(std::unique_ptr<SerializationData> data);
178 bool Dequeue(std::unique_ptr<SerializationData>* data);
179 bool IsEmpty();
180 void Clear();
181
182 private:
184 std::vector<std::unique_ptr<SerializationData>> data_;
185};
186
187class Worker : public std::enable_shared_from_this<Worker> {
188 public:
190
191 explicit Worker(Isolate* parent_isolate, const char* script,
192 bool flush_denormals);
193 ~Worker();
194
195 // Post a message to the worker. The worker will take ownership of the
196 // SerializationData. This function should only be called by the thread that
197 // created the Worker.
198 void PostMessage(std::unique_ptr<SerializationData> data);
199 // Synchronously retrieve messages from the worker's outgoing message queue.
200 // If there is no message in the queue, block until a message is available.
201 // If there are no messages in the queue and the worker is no longer running,
202 // return nullptr.
203 // This function should only be called by the thread that created the Worker.
204 std::unique_ptr<SerializationData> GetMessage(Isolate* requester);
205 // Synchronously retrieve messages from the worker's outgoing message queue.
206 // If there is no message in the queue, or the worker is no longer running,
207 // return nullptr.
208 // This function should only be called by the thread that created the Worker.
209 std::unique_ptr<SerializationData> TryGetMessage();
210 // Terminate the worker's event loop. Messages from the worker that have been
211 // queued can still be read via GetMessage().
212 // This function can be called by any thread.
213 void Terminate();
214 // Terminate and join the thread.
215 // This function can be called by any thread.
216 void TerminateAndWaitForThread(const i::ParkedScope& parked);
217
218 // Start running the given worker in another thread.
219 static bool StartWorkerThread(Isolate* requester,
220 std::shared_ptr<Worker> worker,
222
223 // Enters State::kTerminated for the Worker and resets the task runner.
225 bool IsTerminated() const { return state_ == State::kTerminated; }
226
227 // Returns the Worker instance for this thread.
228 static Worker* GetCurrentWorker();
229
230 private:
231 friend class ProcessMessageTask;
232 friend class TerminateTask;
233
234 enum class State {
235 kReady,
237 kRunning,
240 };
241 bool is_running() const;
242
243 void ProcessMessage(std::unique_ptr<SerializationData> data);
244 void ProcessMessages();
245
246 class WorkerThread : public base::Thread {
247 public:
248 explicit WorkerThread(std::shared_ptr<Worker> worker,
250 : base::Thread(base::Thread::Options("WorkerThread", priority)),
251 worker_(std::move(worker)) {}
252
253 void Run() override;
254
255 private:
256 std::shared_ptr<Worker> worker_;
257 };
258
259 void ExecuteInThread();
261 static void ImportScripts(const v8::FunctionCallbackInfo<v8::Value>& info);
262 static void Close(const v8::FunctionCallbackInfo<v8::Value>& info);
263
264 static void SetCurrentWorker(Worker* worker);
265
268
270 char* script_;
272 std::atomic<State> state_;
273 bool is_joined_ = false;
274 // For signalling that the worker has started.
276
277 // For posting tasks to the worker
278 std::shared_ptr<TaskRunner> task_runner_;
280
281 // Protects reading / writing task_runner_. (The TaskRunner itself doesn't
282 // need locking, but accessing the Worker's data member does.)
284
285 // The isolate should only be accessed by the worker itself, or when holding
286 // the worker_mutex_ and after checking the worker state.
287 Isolate* isolate_ = nullptr;
289
290 // Only accessed by the worker thread.
292};
293
295 public:
296 explicit PerIsolateData(Isolate* isolate);
297
299
300 inline static PerIsolateData* Get(Isolate* isolate) {
301 return reinterpret_cast<PerIsolateData*>(isolate->GetData(0));
302 }
303
305 public:
306 explicit RealmScope(Isolate* isolate, const Global<Context>& context);
307 ~RealmScope();
308
309 private:
311 };
312
313 // Contrary to RealmScope (which creates a new Realm), ExplicitRealmScope
314 // allows for entering an existing Realm, as specified by its index.
316 public:
317 explicit ExplicitRealmScope(PerIsolateData* data, int index);
319
320 Local<Context> context() const;
321
322 private:
327 };
328
330
333 Local<Value> exception);
335
336 // Keep track of DynamicImportData so we can properly free it on shutdown
337 // when LEAK_SANITIZER is active.
340
343
346
348 void RegisterWorker(std::shared_ptr<Worker> worker);
349 void SubscribeWorkerOnMessage(const std::shared_ptr<Worker>& worker,
350 Local<Context> context,
352 std::pair<Local<Context>, Local<Function>> GetWorkerOnMessage(
353 const std::shared_ptr<Worker>& worker) const;
354 void UnregisterWorker(const std::shared_ptr<Worker>& worker);
355
356 private:
357 friend class Shell;
358 friend class RealmScope;
366 std::vector<std::tuple<Global<Promise>, Global<Message>, Global<Value>>>
369#if defined(LEAK_SANITIZER)
370 std::unordered_set<DynamicImportData*> import_data_;
371#endif
374 // Track workers and their callbacks separately, so that we know both which
375 // workers are still registered, and which of them have callbacks. We can't
376 // rely on Shell::running_workers_ or worker.IsTerminated(), because these are
377 // set concurrently and may race with callback subscription.
378 std::set<std::shared_ptr<Worker>> registered_workers_;
379 std::map<std::shared_ptr<Worker>,
380 std::pair<Global<Context>, Global<Function>>>
382
384 int arg_offset);
385 int RealmFind(Local<Context> context);
386};
387
389
391 public:
397
399
400 // In analogy to Flag::CheckFlagChange() in src/flags/flag.cc, only allow
401 // repeated flags for identical boolean values. We allow exceptions for flags
402 // with enum-like arguments since their conflicts can also be specified
403 // completely.
404 template <class T,
405 bool kAllowIdenticalAssignment = std::is_same<T, bool>::value>
407 public:
408 DisallowReassignment(const char* name, T value)
409 : name_(name), value_(value) {}
410
411 operator T() const { return value_; }
412 T get() const { return value_; }
415 if (kAllowIdenticalAssignment) {
416 if (specified_ && value_ != value) {
417 FATAL("Contradictory values for d8 flag --%s", name_);
418 }
419 } else {
420 if (specified_) {
421 FATAL("Repeated specification of d8 flag --%s", name_);
422 }
423 }
424 }
425 value_ = value;
426 specified_ = true;
427 return *this;
428 }
429 void Overwrite(T value) { value_ = value; }
430
431 private:
432 const char* name_;
434 bool specified_ = false;
435 };
436
439 "fuzzilli-coverage-statistics", false};
441 "fuzzilli-enable-builtins-coverage", false};
443 false};
445 false};
446 DisallowReassignment<bool> omit_quit = {"omit-quit", false};
448 "wait-for-background-tasks", true};
449 DisallowReassignment<bool> simulate_errors = {"simulate-errors", false};
452 bool test_shell = false;
455 DisallowReassignment<bool> dump_counters = {"dump-counters", false};
456 DisallowReassignment<bool> dump_counters_nvp = {"dump-counters-nvp", false};
458 "dump-system-memory-stats", false};
460 "ignore-unhandled-promises", false};
461 DisallowReassignment<bool> mock_arraybuffer_allocator = {
462 "mock-arraybuffer-allocator", false};
463 DisallowReassignment<size_t> mock_arraybuffer_allocator_limit = {
464 "mock-arraybuffer-allocator-limit", 0};
466 "multi-mapped-mock-allocator", false};
467 DisallowReassignment<bool> enable_inspector = {"enable-inspector", false};
473 DisallowReassignment<bool> streaming_compile = {"streaming-compile", false};
475 nullptr};
479 DisallowReassignment<bool> trace_enabled = {"trace-enabled", false};
483#ifdef V8_OS_LINUX
484 // Allow linux perf to be started and stopped by performance.mark and
485 // performance.measure, respectively.
486 DisallowReassignment<bool> scope_linux_perf_to_mark_measure = {
487 "scope-linux-perf-to-mark-measure", false};
488 DisallowReassignment<int> perf_ctl_fd = {"perf-ctl-fd", -1};
489 DisallowReassignment<int> perf_ack_fd = {"perf-ack-fd", -1};
490#endif
492 "disable-in-process-stack-traces", false};
493 DisallowReassignment<int> read_from_tcp_port = {"read-from-tcp-port", -1};
494 DisallowReassignment<bool> enable_os_system = {"enable-os-system", false};
495 DisallowReassignment<bool> quiet_load = {"quiet-load", false};
496 DisallowReassignment<bool> apply_priority = {"apply-priority", true};
498 DisallowReassignment<bool> stress_delay_tasks = {"stress-delay-tasks", false};
499 std::vector<const char*> arguments;
501 DisallowReassignment<bool> cpu_profiler = {"cpu-profiler", false};
502 DisallowReassignment<bool> cpu_profiler_print = {"cpu-profiler-print", false};
504 "fuzzy-module-file-extensions", true};
506 "enable-system-instrumentation", false};
507 DisallowReassignment<bool> enable_etw_stack_walking = {
508 "enable-etw-stack-walking", false};
509 // Applies to JSON deserialization.
510 DisallowReassignment<bool> stress_deserialize = {"stress-deserialize", false};
511 DisallowReassignment<bool> compile_only = {"compile-only", false};
513#if V8_ENABLE_WEBASSEMBLY
514 DisallowReassignment<bool> wasm_trap_handler = {"wasm-trap-handler", true};
515#endif // V8_ENABLE_WEBASSEMBLY
516 DisallowReassignment<bool> expose_fast_api = {"expose-fast-api", false};
517 DisallowReassignment<bool> flush_denormals = {"flush-denormals", false};
519 1 * i::MB};
520};
521
522class Shell : public i::AllStatic {
523 public:
524 enum PrintResult : bool { kPrintResult = true, kNoPrintResult = false };
534
535 // Boolean return values (for any method below) typically denote "success".
536 // We return `false` on uncaught exceptions, except for termination
537 // exceptions.
538 static bool ExecuteString(Isolate* isolate, Local<String> source,
539 Local<String> name,
540 ReportExceptions report_exceptions,
541 Global<Value>* out_result = nullptr);
542 static bool ExecuteModule(Isolate* isolate, const char* file_name);
543 static bool LoadJSON(Isolate* isolate, const char* file_name);
544 static void ReportException(Isolate* isolate, Local<Message> message,
545 Local<Value> exception);
546 static void ReportException(Isolate* isolate, const TryCatch& try_catch);
547 static MaybeLocal<String> ReadFile(Isolate* isolate, const char* name,
548 bool should_throw = true);
549 static std::unique_ptr<base::OS::MemoryMappedFile> ReadFileData(
550 Isolate* isolate, const char* name, bool should_throw = true);
552 const char* name);
554 static int RunMain(Isolate* isolate, bool last_run);
555 static int Main(int argc, char* argv[]);
556 static void Exit(int exit_code);
557 static void OnExit(Isolate* isolate, bool dispose);
558 static void CollectGarbage(Isolate* isolate);
559 static bool EmptyMessageQueues(Isolate* isolate);
560 static bool CompleteMessageLoop(Isolate* isolate);
561 static bool FinishExecuting(Isolate* isolate, const Global<Context>& context);
562
563 static bool HandleUnhandledPromiseRejections(Isolate* isolate);
564
565 static std::unique_ptr<SerializationData> SerializeValue(
566 Isolate* isolate, Local<Value> value, Local<Value> transfer);
568 Isolate* isolate, std::unique_ptr<SerializationData> data);
569 static int* LookupCounter(const char* name);
570 static void* CreateHistogram(const char* name, int min, int max,
571 size_t buckets);
572 static void AddHistogramSample(void* histogram, int sample);
573 static void MapCounters(v8::Isolate* isolate, const char* name);
574
575 static double GetTimestamp();
577 double performance_timestamp);
578
581 static void PerformanceMeasure(
583 static void PerformanceMeasureMemory(
585
586 static void RealmCurrent(const v8::FunctionCallbackInfo<v8::Value>& info);
587 static void RealmOwner(const v8::FunctionCallbackInfo<v8::Value>& info);
588 static void RealmGlobal(const v8::FunctionCallbackInfo<v8::Value>& info);
589 static void RealmCreate(const v8::FunctionCallbackInfo<v8::Value>& info);
590 static void RealmNavigate(const v8::FunctionCallbackInfo<v8::Value>& info);
593 static void RealmDetachGlobal(
595 static void RealmDispose(const v8::FunctionCallbackInfo<v8::Value>& info);
596 static void RealmSwitch(const v8::FunctionCallbackInfo<v8::Value>& info);
597 static void RealmEval(const v8::FunctionCallbackInfo<v8::Value>& info);
598 static void RealmSharedGet(Local<Name> property,
599 const PropertyCallbackInfo<Value>& info);
600 static void RealmSharedSet(Local<Name> property, Local<Value> value,
601 const PropertyCallbackInfo<void>& info);
602
603 static void LogGetAndStop(const v8::FunctionCallbackInfo<v8::Value>& info);
604 static void TestVerifySourcePositions(
606
607 static void InstallConditionalFeatures(
609 static void EnableJSPI(const v8::FunctionCallbackInfo<v8::Value>& info);
610 static void SetFlushDenormals(
612
613 static void AsyncHooksCreateHook(
615 static void AsyncHooksExecutionAsyncId(
617 static void AsyncHooksTriggerAsyncId(
619
621
624
625 static void SerializerSerialize(
627 static void SerializerDeserialize(
629
632 static void ProfilerTriggerSample(
634
635 static bool HasOnProfileEndListener(Isolate* isolate);
636
637 static void TriggerOnProfileEndListener(Isolate* isolate,
638 std::string profile);
639
640 static void ResetOnProfileEndListener(Isolate* isolate);
641
642 static void Print(const v8::FunctionCallbackInfo<v8::Value>& info);
643 static void PrintErr(const v8::FunctionCallbackInfo<v8::Value>& info);
644 static void WriteStdout(const v8::FunctionCallbackInfo<v8::Value>& info);
648 static void Quit(const v8::FunctionCallbackInfo<v8::Value>& info);
649 static void TerminateNow(const v8::FunctionCallbackInfo<v8::Value>& info);
650 static void ScheduleTermination(
652 static void Version(const v8::FunctionCallbackInfo<v8::Value>& info);
653 static void WriteFile(const v8::FunctionCallbackInfo<v8::Value>& info);
654 static void ReadFile(const v8::FunctionCallbackInfo<v8::Value>& info);
657 static char* ReadChars(const char* name, int* size_out);
659 const char* name);
660 static void ReadBuffer(const v8::FunctionCallbackInfo<v8::Value>& info);
661 static Local<String> ReadFromStdin(Isolate* isolate);
662 static void ReadLine(const v8::FunctionCallbackInfo<v8::Value>& info);
663 static void WriteChars(const char* name, uint8_t* buffer, size_t buffer_size);
664 static void ExecuteFile(const v8::FunctionCallbackInfo<v8::Value>& info);
665 static void SetTimeout(const v8::FunctionCallbackInfo<v8::Value>& info);
666 static void ReadCodeTypeAndArguments(
667 const v8::FunctionCallbackInfo<v8::Value>& info, int index,
668 CodeType* code_type, Local<Value>* arguments = nullptr);
670 Local<Value> arguments,
671 Local<String>* source,
672 Isolate* isolate);
674 const v8::FunctionCallbackInfo<v8::Value>& info, int index,
675 CodeType default_type);
676 static void WorkerNew(const v8::FunctionCallbackInfo<v8::Value>& info);
677 static void WorkerPostMessage(
680 static void WorkerOnMessageGetter(
682 static void WorkerOnMessageSetter(
685 static void WorkerTerminateAndWait(
687 // The OS object on the global object contains methods for performing
688 // operating system calls:
689 //
690 // os.system("program_name", ["arg1", "arg2", ...], timeout1, timeout2) will
691 // run the command, passing the arguments to the program. The standard output
692 // of the program will be picked up and returned as a multiline string. If
693 // timeout1 is present then it should be a number. -1 indicates no timeout
694 // and a positive number is used as a timeout in milliseconds that limits the
695 // time spent waiting between receiving output characters from the program.
696 // timeout2, if present, should be a number indicating the limit in
697 // milliseconds on the total running time of the program. Exceptions are
698 // thrown on timeouts or other errors or if the exit status of the program
699 // indicates an error.
700 static void System(const v8::FunctionCallbackInfo<v8::Value>& info);
701
702 // os.chdir(dir) changes directory to the given directory. Throws an
703 // exception/ on error.
705
706 // os.setenv(variable, value) sets an environment variable. Repeated calls to
707 // this method leak memory due to the API of setenv in the standard C library.
710
711 // os.umask(alue) calls the umask system call and returns the old umask.
712 static void SetUMask(const v8::FunctionCallbackInfo<v8::Value>& info);
713
714 // os.mkdirp(name, mask) creates a directory. The mask (if present) is anded
715 // with the current umask. Intermediate directories are created if necessary.
716 // An exception is not thrown if the directory already exists. Analogous to
717 // the "mkdir -p" command.
718 static void MakeDirectory(const v8::FunctionCallbackInfo<v8::Value>& info);
720
721#ifdef V8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA
722 static void GetContinuationPreservedEmbedderData(
724#endif // V8_ENABLE_CONTINUATION_PRESERVER_EMBEDDER_DATA
725
726 static void GetExtrasBindingObject(
728
730 Local<Context> context, Local<Data> host_defined_options,
731 Local<Value> resource_name, Local<String> specifier,
732 Local<FixedArray> import_attributes);
734 Local<Context> context, Local<Data> host_defined_options,
735 Local<Value> resource_name, Local<String> specifier,
736 ModuleImportPhase phase, Local<FixedArray> import_attributes);
737
743 Local<Module> module,
744 Local<Object> meta);
746 Local<Context> initiator_context);
747
748#ifdef V8_FUZZILLI
749 static void Fuzzilli(const v8::FunctionCallbackInfo<v8::Value>& info);
750#endif // V8_FUZZILLI
751
752 // Data is of type DynamicImportData*. We use void* here to be able
753 // to conform with MicrotaskCallback interface and enqueue this
754 // function in the microtask queue.
755 static void DoHostImportModuleDynamically(void* data);
756 static void AddOSMethods(v8::Isolate* isolate,
757 Local<ObjectTemplate> os_template);
758
759 static const char* kPrompt;
762
763 static void SetWaitUntilDone(Isolate* isolate, bool value);
764
765 static char* ReadCharsFromTcpPort(const char* name, int* size_out);
766
767 static void set_script_executed() { script_executed_.store(true); }
768 static bool use_interactive_shell() {
769 return (options.interactive_shell || !script_executed_.load()) &&
770 !options.test_shell;
771 }
772
773 static void update_script_size(int size) {
774 if (size > 0) valid_fuzz_script_.store(true);
775 }
776 static bool is_valid_fuzz_script() { return valid_fuzz_script_.load(); }
777
778 static void WaitForRunningWorkers(const i::ParkedScope& parked);
779 static void AddRunningWorker(std::shared_ptr<Worker> worker);
780 static void RemoveRunningWorker(const std::shared_ptr<Worker>& worker);
781
782 static void Initialize(Isolate* isolate, D8Console* console,
783 bool isOnMainThread = true);
784
785 static void PromiseRejectCallback(v8::PromiseRejectMessage reject_message);
786
787 private:
788 static inline int DeserializationRunCount() {
789 return options.stress_deserialize ? 1000 : 1;
790 }
791
795
797 static std::map<Isolate*, std::pair<Global<Function>, Global<Context>>>
799
800 static const char* stringify_source_;
803 // We statically allocate a set of local counters to be used if we
804 // don't want to store the stats in a memory-mapped file
810
811 static base::LazyMutex workers_mutex_; // Guards the following members.
813 static std::unordered_set<std::shared_ptr<Worker>> running_workers_;
814
815 // Multiple isolates may update these flags concurrently.
816 static std::atomic<bool> script_executed_;
817 static std::atomic<bool> valid_fuzz_script_;
818
820 // Append LCOV coverage data to file.
821 static void WriteLcovData(v8::Isolate* isolate, const char* file);
822 static Counter* GetCounter(const char* name, bool is_histogram);
823 static Local<String> Stringify(Isolate* isolate, Local<Value> value);
824 static void RunShell(Isolate* isolate);
825 static bool RunMainIsolate(Isolate* isolate, bool keep_context_alive);
826 static bool SetOptions(int argc, char* argv[]);
827
829
832 Isolate* isolate, Local<FunctionTemplate> event_target);
843 Isolate* isolate);
844
846 const v8::FunctionCallbackInfo<v8::Value>& info, int index,
847 v8::MaybeLocal<Value> global_object);
849 int index);
850
852 v8::Local<v8::Module> origin_module, v8::Local<v8::Context> context,
853 const std::string& file_name, ModuleType module_type);
856 const std::string& file_name,
857 ModuleType module_type);
858
860 Local<Module> module);
861
862 template <class T>
863 static MaybeLocal<T> CompileString(Isolate* isolate, Local<Context> context,
864 Local<String> source,
865 const ScriptOrigin& origin);
866
868 Local<Value> name);
869 static void StoreInCodeCache(Isolate* isolate, Local<Value> name,
870 const ScriptCompiler::CachedData* data);
871 // We may have multiple isolates running concurrently, so the access to
872 // the isolate_status_ needs to be concurrency-safe.
874 static std::map<Isolate*, bool> isolate_status_;
875 static std::map<Isolate*, int> isolate_running_streaming_tasks_;
876
878 static std::map<std::string, std::unique_ptr<ScriptCompiler::CachedData>>
880 static std::atomic<int> unhandled_promise_rejections_;
881};
882
884 public:
885 static void SimulateErrors();
886
887 private:
888 static void ControlFlowViolation();
889 static void DCheck();
890 static void Fatal();
891 static void ObservableDifference();
892 static void UndefinedBehavior();
893 static void UseAfterFree();
894 static void UseOfUninitializedValue();
895};
896
897} // namespace v8
898
899#endif // V8_D8_D8_H_
#define T
uint32_t max_name_size_
Definition d8.h:81
Counter counters_[kMaxCounters]
Definition d8.h:83
uint32_t max_counters_
Definition d8.h:80
uint32_t magic_number_
Definition d8.h:79
Counter * GetNextCounter()
Definition d8.cc:3738
uint32_t counters_in_use_
Definition d8.h:82
static const unsigned kMaxCounters
Definition d8.h:78
bool is_histogram() const
Definition d8.h:59
char name_[kMaxNameSize]
Definition d8.h:66
int sample_total() const
Definition d8.h:56
static const int kMaxNameSize
Definition d8.h:48
std::atomic< int > sample_total_
Definition d8.h:64
int * ptr()
Definition d8.h:51
int count() const
Definition d8.h:55
void Bind(const char *name, bool histogram)
Definition d8.cc:3719
bool is_histogram_
Definition d8.h:65
std::atomic< int > count_
Definition d8.h:63
void AddSample(int32_t sample)
Definition d8.cc:3726
static void ControlFlowViolation()
Definition d8.cc:4588
static void ObservableDifference()
Definition d8.cc:4604
static void UseAfterFree()
Definition d8.cc:4615
static void Fatal()
Definition d8.cc:4599
static void UseOfUninitializedValue()
Definition d8.cc:4624
static void UndefinedBehavior()
Definition d8.cc:4609
static void SimulateErrors()
Definition d8.cc:4560
static void DCheck()
Definition d8.cc:4594
PerIsolateData * data_
Definition d8.h:310
std::pair< Local< Context >, Local< Function > > GetWorkerOnMessage(const std::shared_ptr< Worker > &worker) const
Definition d8.cc:1991
Local< FunctionTemplate > GetDomNodeCtor() const
Definition d8.cc:1956
void UnregisterWorker(const std::shared_ptr< Worker > &worker)
Definition d8.cc:2000
void AddDynamicImportData(DynamicImportData *)
Definition d8.cc:1936
AsyncHooks * GetAsyncHooks()
Definition d8.h:329
static PerIsolateData * Get(Isolate *isolate)
Definition d8.h:300
void SubscribeWorkerOnMessage(const std::shared_ptr< Worker > &worker, Local< Context > context, Local< Function > callback)
Definition d8.cc:1974
Global< Context > * realms_
Definition d8.h:363
std::set< std::shared_ptr< Worker > > registered_workers_
Definition d8.h:378
Isolate * isolate_
Definition d8.h:359
void SetDomNodeCtor(Local< FunctionTemplate > ctor)
Definition d8.cc:1960
Global< Value > realm_shared_
Definition d8.h:364
Global< FunctionTemplate > test_api_object_ctor_
Definition d8.h:372
void RemoveUnhandledPromise(Local< Promise > promise)
Definition d8.cc:1894
AsyncHooks * async_hooks_wrapper_
Definition d8.h:368
bool HasRunningSubscribedWorkers()
Definition d8.cc:1964
bool ignore_unhandled_promises_
Definition d8.h:365
void RegisterWorker(std::shared_ptr< Worker > worker)
Definition d8.cc:1970
Global< FunctionTemplate > dom_node_ctor_
Definition d8.h:373
int realm_current_
Definition d8.h:361
int RealmFind(Local< Context > context)
Definition d8.cc:2039
int realm_switch_
Definition d8.h:362
PerIsolateData(Isolate *isolate)
Definition d8.cc:1873
void DeleteDynamicImportData(DynamicImportData *)
Definition d8.cc:1941
int realm_count_
Definition d8.h:360
void AddUnhandledPromise(Local< Promise > promise, Local< Message > message, Local< Value > exception)
Definition d8.cc:1907
Local< FunctionTemplate > GetTestApiObjectCtor() const
Definition d8.cc:1948
int RealmIndexOrThrow(const v8::FunctionCallbackInfo< v8::Value > &info, int arg_offset)
Definition d8.cc:2046
std::map< std::shared_ptr< Worker >, std::pair< Global< Context >, Global< Function > > > worker_message_callbacks_
Definition d8.h:381
std::vector< std::tuple< Global< Promise >, Global< Message >, Global< Value > > > unhandled_promises_
Definition d8.h:367
void SetTestApiObjectCtor(Local< FunctionTemplate > ctor)
Definition d8.cc:1952
int HandleUnhandledPromiseRejections()
Definition d8.cc:1917
base::Mutex mutex_
Definition d8.h:183
std::vector< std::unique_ptr< SerializationData > > data_
Definition d8.h:184
void Enqueue(std::unique_ptr< SerializationData > data)
Definition d8.cc:5159
bool Dequeue(std::unique_ptr< SerializationData > *data)
Definition d8.cc:5164
const std::vector< std::shared_ptr< v8::BackingStore > > & backing_stores()
Definition d8.h:146
const std::optional< v8::SharedValueConveyor > & shared_value_conveyor()
Definition d8.h:155
const std::vector< std::shared_ptr< v8::BackingStore > > & sab_backing_stores()
Definition d8.h:149
SerializationData(const SerializationData &)=delete
std::vector< std::shared_ptr< v8::BackingStore > > backing_stores_
Definition d8.h:166
size_t size()
Definition d8.h:145
std::unique_ptr< uint8_t, DataDeleter > data_
Definition d8.h:164
const std::vector< CompiledWasmModule > & compiled_wasm_modules()
Definition d8.h:152
std::vector< CompiledWasmModule > compiled_wasm_modules_
Definition d8.h:168
SerializationData & operator=(const SerializationData &)=delete
std::optional< v8::SharedValueConveyor > shared_value_conveyor_
Definition d8.h:169
std::vector< std::shared_ptr< v8::BackingStore > > sab_backing_stores_
Definition d8.h:167
uint8_t * data()
Definition d8.h:144
SerializationData()=default
DisallowReassignment & operator=(T value)
Definition d8.h:413
DisallowReassignment(const char *name, T value)
Definition d8.h:408
DisallowReassignment< bool > dump_system_memory_stats
Definition d8.h:457
DisallowReassignment< bool > quiet_load
Definition d8.h:495
DisallowReassignment< const char * > trace_config
Definition d8.h:481
DisallowReassignment< int > thread_pool_size
Definition d8.h:497
DisallowReassignment< bool > enable_inspector
Definition d8.h:467
DisallowReassignment< bool > fuzzilli_coverage_statistics
Definition d8.h:438
DisallowReassignment< const char * > d8_path
Definition d8.h:437
DisallowReassignment< bool > flush_denormals
Definition d8.h:517
DisallowReassignment< bool > disable_in_process_stack_traces
Definition d8.h:491
DisallowReassignment< CodeCacheOptions, true > code_cache_options
Definition d8.h:471
DisallowReassignment< bool > trace_enabled
Definition d8.h:479
DisallowReassignment< bool > cpu_profiler_print
Definition d8.h:502
@ kProduceCache
Definition d8.h:394
@ kProduceCacheAfterExecute
Definition d8.h:395
@ kNoProduceCache
Definition d8.h:393
DisallowReassignment< bool > omit_quit
Definition d8.h:446
DisallowReassignment< bool > fuzzilli_enable_builtins_coverage
Definition d8.h:440
DisallowReassignment< bool > wait_for_background_tasks
Definition d8.h:447
DisallowReassignment< bool > invoke_weak_callbacks
Definition d8.h:444
~ShellOptions()
Definition d8.h:398
DisallowReassignment< size_t > max_serializer_memory
Definition d8.h:518
DisallowReassignment< const char * > icu_data_file
Definition d8.h:476
DisallowReassignment< bool > no_fail
Definition d8.h:454
DisallowReassignment< bool > streaming_compile
Definition d8.h:473
DisallowReassignment< bool > stress_deserialize
Definition d8.h:510
DisallowReassignment< int > read_from_tcp_port
Definition d8.h:493
DisallowReassignment< bool > multi_mapped_mock_allocator
Definition d8.h:465
DisallowReassignment< const char * > trace_path
Definition d8.h:480
DisallowReassignment< bool > dump_counters_nvp
Definition d8.h:456
DisallowReassignment< bool > enable_os_system
Definition d8.h:494
DisallowReassignment< const char * > lcov_file
Definition d8.h:482
DisallowReassignment< bool > compile_only
Definition d8.h:511
DisallowReassignment< bool > expose_fast_api
Definition d8.h:516
DisallowReassignment< bool > expected_to_throw
Definition d8.h:453
DisallowReassignment< SourceGroup * > isolate_sources
Definition d8.h:474
DisallowReassignment< int > repeat_compile
Definition d8.h:512
bool test_shell
Definition d8.h:452
DisallowReassignment< bool > send_idle_notification
Definition d8.h:442
DisallowReassignment< bool > include_arguments
Definition d8.h:500
DisallowReassignment< bool > apply_priority
Definition d8.h:496
DisallowReassignment< bool > enable_system_instrumentation
Definition d8.h:505
DisallowReassignment< v8::ScriptCompiler::CompileOptions, true > compile_options
Definition d8.h:470
DisallowReassignment< bool > fuzzy_module_file_extensions
Definition d8.h:503
DisallowReassignment< bool > simulate_errors
Definition d8.h:449
DisallowReassignment< int > stress_runs
Definition d8.h:450
DisallowReassignment< bool > stress_delay_tasks
Definition d8.h:498
std::vector< const char * > arguments
Definition d8.h:499
int num_isolates
Definition d8.h:468
DisallowReassignment< bool > ignore_unhandled_promises
Definition d8.h:459
DisallowReassignment< bool > dump_counters
Definition d8.h:455
DisallowReassignment< const char * > icu_locale
Definition d8.h:477
DisallowReassignment< bool > cpu_profiler
Definition d8.h:501
DisallowReassignment< bool > interactive_shell
Definition d8.h:451
DisallowReassignment< const char * > snapshot_blob
Definition d8.h:478
static void RealmCurrent(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2274
static void InstallConditionalFeatures(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2665
static void WriteChars(const char *name, uint8_t *buffer, size_t buffer_size)
Definition d8.cc:4755
static void WriteStdout(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2926
static int Main(int argc, char *argv[])
Definition d8.cc:6492
static CounterCollection * counters_
Definition d8.h:806
CodeType
Definition d8.h:533
static void WorkerTerminateAndWait(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3551
static MaybeLocal< Promise > HostImportModuleDynamically(Local< Context > context, Local< Data > host_defined_options, Local< Value > resource_name, Local< String > specifier, Local< FixedArray > import_attributes)
Definition d8.cc:1471
static MaybeLocal< Context > CreateEvaluationContext(Isolate *isolate)
Definition d8.cc:4308
static void AddHistogramSample(void *histogram, int sample)
Definition d8.cc:3798
static base::OS::MemoryMappedFile * counters_file_
Definition d8.h:807
static void AddOSMethods(v8::Isolate *isolate, Local< ObjectTemplate > os_template)
Definition d8-posix.cc:747
static bool is_valid_fuzz_script()
Definition d8.h:776
static void update_script_size(int size)
Definition d8.h:773
static std::map< Isolate *, std::pair< Global< Function >, Global< Context > > > profiler_end_callback_
Definition d8.h:798
static void RealmGlobal(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2311
static Local< ObjectTemplate > CreatePerformanceTemplate(Isolate *isolate)
Definition d8.cc:4015
static std::map< Isolate *, bool > isolate_status_
Definition d8.h:874
static void RealmCreate(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2381
static void PerformanceMark(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2115
static Global< Function > stringify_function_
Definition d8.h:794
ProcessMessageQueue
Definition d8.h:529
@ kProcessMessageQueue
Definition d8.h:530
@ kNoProcessMessageQueue
Definition d8.h:531
static void ScheduleTermination(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3626
static bool ExecuteModule(Isolate *isolate, const char *file_name)
Definition d8.cc:1739
static std::unique_ptr< base::OS::MemoryMappedFile > ReadFileData(Isolate *isolate, const char *name, bool should_throw=true)
Definition d8.cc:4719
static std::map< std::string, std::unique_ptr< ScriptCompiler::CachedData > > cached_code_map_
Definition d8.h:879
static Local< FunctionTemplate > CreateLeafInterfaceTypeTemplate(Isolate *isolate)
Definition d8-test.cc:1962
static MaybeLocal< Value > DeserializeValue(Isolate *isolate, std::unique_ptr< SerializationData > data)
Definition d8.cc:6424
static Local< FunctionTemplate > CreateEventTargetTemplate(Isolate *isolate)
Definition d8.cc:3849
static void PerformanceMeasure(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2160
static Local< ObjectTemplate > CreateD8Template(Isolate *isolate)
Definition d8.cc:4058
static void WorkerOnMessageGetter(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3498
static void ProfilerTriggerSample(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2851
static base::LazyMutex cached_code_mutex_
Definition d8.h:877
static char * ReadChars(const char *name, int *size_out)
Definition d8.cc:4632
static void ReadCodeTypeAndArguments(const v8::FunctionCallbackInfo< v8::Value > &info, int index, CodeType *code_type, Local< Value > *arguments=nullptr)
Definition d8.cc:3138
static void CreateWasmMemoryMapDescriptor(const v8::FunctionCallbackInfo< v8::Value > &info)
static void WriteLcovData(v8::Isolate *isolate, const char *file)
Definition d8.cc:4398
static std::map< Isolate *, int > isolate_running_streaming_tasks_
Definition d8.h:875
static void RealmDetachGlobal(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2430
static void AsyncHooksExecutionAsyncId(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2709
static std::unordered_set< std::shared_ptr< Worker > > running_workers_
Definition d8.h:813
static bool RunMainIsolate(Isolate *isolate, bool keep_context_alive)
Definition d8.cc:6002
static void ResetOnProfileEndListener(Isolate *isolate)
Definition d8.cc:2834
static void SetFlushDenormals(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2677
static Local< ObjectTemplate > CreateRealmTemplate(Isolate *isolate)
Definition d8.cc:4029
static base::OnceType quit_once_
Definition d8.h:793
static void WorkerPostMessage(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3344
static void PerformanceMeasureMemory(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2246
static void RealmSharedGet(Local< Name > property, const PropertyCallbackInfo< Value > &info)
Definition d8.cc:2513
static void EnableDebugger(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2729
static void System(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8-posix.cc:417
static void WaitForRunningWorkers(const i::ParkedScope &parked)
Definition d8.cc:6442
static void MakeDirectory(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8-posix.cc:569
static void * CreateHistogram(const char *name, int min, int max, size_t buckets)
Definition d8.cc:3793
static void NodeTypeCallback(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3825
static void WorkerTerminate(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3541
static void SerializerSerialize(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2768
PrintResult
Definition d8.h:524
@ kNoPrintResult
Definition d8.h:524
@ kPrintResult
Definition d8.h:524
static void NotifyDone(const v8::FunctionCallbackInfo< v8::Value > &info)
static bool ExecuteString(Isolate *isolate, Local< String > source, Local< String > name, ReportExceptions report_exceptions, Global< Value > *out_result=nullptr)
Definition d8.cc:934
static int RunMain(Isolate *isolate, bool last_run)
Definition d8.cc:5929
static MaybeLocal< PrimitiveArray > ReadLines(Isolate *isolate, const char *name)
Definition d8.cc:4659
static void RealmSharedSet(Local< Name > property, Local< Value > value, const PropertyCallbackInfo< void > &info)
Definition d8.cc:2522
static void AsyncHooksTriggerAsyncId(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2718
static void ReadBuffer(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:4689
static void RealmSwitch(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2463
static void HostInitializeImportMetaObject(Local< Context > context, Local< Module > module, Local< Object > meta)
Definition d8.cc:1508
static Local< ObjectTemplate > CreateTestRunnerTemplate(Isolate *isolate)
Definition d8.cc:4005
static void ModuleResolutionSuccessCallback(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:1426
static bool allow_new_workers_
Definition d8.h:812
static int DeserializationRunCount()
Definition d8.h:788
static void UnsetEnvironment(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8-posix.cc:630
static void Quit(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3635
static void AsyncHooksCreateHook(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2700
static void WriteFile(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2939
static bool use_interactive_shell()
Definition d8.h:768
static MaybeLocal< Context > HostCreateShadowRealmContext(Local< Context > initiator_context)
Definition d8.cc:1525
static void Version(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3641
static void SetWaitUntilDone(Isolate *isolate, bool value)
static void RunShell(Isolate *isolate)
Definition d8.cc:4762
static void TestVerifySourcePositions(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2569
static base::LazyMutex workers_mutex_
Definition d8.h:811
static void SetPromiseHooks(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2737
static MaybeLocal< Object > FetchModuleSource(v8::Local< v8::Module > origin_module, v8::Local< v8::Context > context, const std::string &file_name, ModuleType module_type)
Definition d8.cc:1179
static std::atomic< bool > valid_fuzz_script_
Definition d8.h:817
static base::Mutex counter_mutex_
Definition d8.h:802
static Local< ObjectTemplate > CreateOSTemplate(Isolate *isolate)
Definition d8.cc:3944
static const base::TimeTicks kInitialTicks
Definition d8.h:809
static void DoHostImportModuleDynamically(void *data)
Definition d8.cc:1595
static base::Mutex profiler_end_callback_lock_
Definition d8.h:796
static Counter * GetCounter(const char *name, bool is_histogram)
Definition d8.cc:3758
static void TriggerOnProfileEndListener(Isolate *isolate, std::string profile)
Definition d8.cc:2862
static void SetEnvironment(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8-posix.cc:609
static Local< FunctionTemplate > CreateNodeTemplates(Isolate *isolate, Local< FunctionTemplate > event_target)
Definition d8.cc:3855
static bool FunctionAndArgumentsToString(Local< Function > function, Local< Value > arguments, Local< String > *source, Isolate *isolate)
Definition d8.cc:3176
static void OnExit(Isolate *isolate, bool dispose)
Definition d8.cc:4459
static void RemoveRunningWorker(const std::shared_ptr< Worker > &worker)
Definition d8.cc:6436
static bool SetOptions(int argc, char *argv[])
Definition d8.cc:5655
static void RealmDispose(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2448
static MaybeLocal< Context > CreateRealm(const v8::FunctionCallbackInfo< v8::Value > &info, int index, v8::MaybeLocal< Value > global_object)
Definition d8.cc:2333
static Local< FunctionTemplate > CreateWorkerTemplate(Isolate *isolate)
Definition d8.cc:3957
static void ReadLine(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:4713
static void SetUMask(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8-posix.cc:511
static void SerializerDeserialize(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2791
static bool LoadJSON(Isolate *isolate, const char *file_name)
Definition d8.cc:1839
static Local< ObjectTemplate > CreateAsyncHookTemplate(Isolate *isolate)
Definition d8.cc:3992
static void WorkerOnMessageSetter(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3517
static int * LookupCounter(const char *name)
Definition d8.cc:3788
static void PerformanceNow(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2108
static MaybeLocal< String > ReadFile(Isolate *isolate, const char *name, bool should_throw=true)
Definition d8.cc:4739
static CounterCollection local_counters_
Definition d8.h:805
static void WriteIgnitionDispatchCountersFile(v8::Isolate *isolate)
Definition d8.cc:4353
static CounterMap * counter_map_
Definition d8.h:801
static void LogGetAndStop(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2530
static uint64_t GetTracingTimestampFromPerformanceTimestamp(double performance_timestamp)
Definition d8.cc:2073
static base::LazyMutex isolate_status_lock_
Definition d8.h:873
static bool HandleUnhandledPromiseRejections(Isolate *isolate)
Definition d8.cc:6144
static void QuitOnce(v8::FunctionCallbackInfo< v8::Value > *info)
Definition d8.cc:3569
static double GetTimestamp()
Definition d8.cc:2065
static void RemoveDirectory(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8-posix.cc:594
static char * ReadCharsFromTcpPort(const char *name, int *size_out)
Definition d8-posix.cc:645
static void Exit(int exit_code)
static bool HasOnProfileEndListener(Isolate *isolate)
Definition d8.cc:2829
static void EnableJSPI(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2671
static void SetTimeout(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3113
static void set_script_executed()
Definition d8.h:767
static MaybeLocal< Module > FetchModuleTree(v8::Local< v8::Module > origin_module, v8::Local< v8::Context > context, const std::string &file_name, ModuleType module_type)
Definition d8.cc:1233
ReportExceptions
Definition d8.h:525
@ kReportExceptions
Definition d8.h:526
@ kNoReportExceptions
Definition d8.h:527
static std::atomic< bool > script_executed_
Definition d8.h:816
static Global< Context > evaluation_context_
Definition d8.h:792
static bool CompleteMessageLoop(Isolate *isolate)
Definition d8.cc:6102
static void Initialize(Isolate *isolate, D8Console *console, bool isOnMainThread=true)
Definition d8.cc:4273
static const char * kPrompt
Definition d8.h:759
static void ExecuteFile(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3059
static void ChangeDirectory(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8-posix.cc:493
static Local< String > Stringify(Isolate *isolate, Local< Value > value)
Definition d8.cc:3804
static std::unique_ptr< SerializationData > SerializeValue(Isolate *isolate, Local< Value > value, Local< Value > transfer)
Definition d8.cc:6412
static void CollectGarbage(Isolate *isolate)
Definition d8.cc:6040
static std::atomic< int > unhandled_promise_rejections_
Definition d8.h:880
static ArrayBuffer::Allocator * array_buffer_allocator
Definition d8.h:761
static void TerminateNow(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3615
static void RealmCreateAllowCrossRealmAccess(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2388
static Local< FunctionTemplate > CreateTestFastCApiTemplate(Isolate *isolate)
Definition d8-test.cc:1474
static void StoreInCodeCache(Isolate *isolate, Local< Value > name, const ScriptCompiler::CachedData *data)
Definition d8.cc:580
static void RealmEval(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2473
static void RealmOwner(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2284
static MaybeLocal< String > ReadSource(const v8::FunctionCallbackInfo< v8::Value > &info, int index, CodeType default_type)
Definition d8.cc:3225
static void DisableDebugger(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2733
static void RealmNavigate(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2400
static void AddRunningWorker(std::shared_ptr< Worker > worker)
Definition d8.cc:6431
static void ProfilerSetOnProfileEndListener(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2814
static MaybeLocal< Promise > HostImportModuleWithPhaseDynamically(Local< Context > context, Local< Data > host_defined_options, Local< Value > resource_name, Local< String > specifier, ModuleImportPhase phase, Local< FixedArray > import_attributes)
Definition d8.cc:1480
static base::LazyMutex context_mutex_
Definition d8.h:808
static Local< ObjectTemplate > CreateGlobalTemplate(Isolate *isolate)
Definition d8.cc:3891
static ScriptCompiler::CachedData * LookupCodeCache(Isolate *isolate, Local< Value > name)
Definition d8.cc:560
static void DisposeRealm(const v8::FunctionCallbackInfo< v8::Value > &info, int index)
Definition d8.cc:2367
static MaybeLocal< Value > JSONModuleEvaluationSteps(Local< Context > context, Local< Module > module)
Definition d8.cc:1367
static const char * stringify_source_
Definition d8.h:800
static ShellOptions options
Definition d8.h:760
static void ModuleResolutionFailureCallback(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:1450
static void ReportException(Isolate *isolate, Local< Message > message, Local< Value > exception)
Definition d8.cc:3648
static void Print(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2918
static void WaitUntilDone(const v8::FunctionCallbackInfo< v8::Value > &info)
static void PrintErr(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:2922
static void WorkerGetMessage(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3370
static void MapCounters(v8::Isolate *isolate, const char *name)
Definition d8.cc:3743
static bool EmptyMessageQueues(Isolate *isolate)
Definition d8.cc:6139
static void GetExtrasBindingObject(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3132
static void WorkerNew(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:3271
static Local< String > ReadFromStdin(Isolate *isolate)
Definition d8.cc:3019
static bool FinishExecuting(Isolate *isolate, const Global< Context > &context)
Definition d8.cc:6127
static MaybeLocal< T > CompileString(Isolate *isolate, Local< Context > context, Local< String > source, const ScriptOrigin &origin)
Definition d8.cc:687
void Run() override
Definition d8.h:119
IsolateThread(SourceGroup *group)
Definition d8.cc:5087
SourceGroup * group_
Definition d8.h:122
void JoinThread(const i::ParkedScope &parked)
Definition d8.cc:5153
void Begin(char **argv, int offset)
Definition d8.h:100
base::Thread * thread_
Definition d8.h:129
void ExitShell(int exit_code)
void End(int offset)
Definition d8.h:105
i::ParkingSemaphore next_semaphore_
Definition d8.h:127
void StartExecuteInThread()
Definition d8.cc:5140
SourceGroup()
Definition d8.h:90
int end_offset_
Definition d8.h:135
const char ** argv_
Definition d8.h:133
void ExecuteInThread()
Definition d8.cc:5090
int begin_offset_
Definition d8.h:134
i::ParkingSemaphore done_semaphore_
Definition d8.h:128
bool Execute(Isolate *isolate)
Definition d8.cc:4988
void WaitForThread(const i::ParkedScope &parked)
Definition d8.cc:5148
WorkerThread(std::shared_ptr< Worker > worker, base::Thread::Priority priority)
Definition d8.h:248
void Run() override
Definition d8.cc:5219
std::shared_ptr< Worker > worker_
Definition d8.h:256
i::CancelableTaskManager * task_manager_
Definition d8.h:279
char * script_
Definition d8.h:270
bool flush_denormals_
Definition d8.h:271
std::shared_ptr< TaskRunner > task_runner_
Definition d8.h:278
void ExecuteInThread()
Definition d8.cc:5391
std::unique_ptr< SerializationData > TryGetMessage()
Definition d8.cc:5283
base::Thread * thread_
Definition d8.h:269
void ProcessMessage(std::unique_ptr< SerializationData > data)
Definition d8.cc:5324
i::ParkingSemaphore started_semaphore_
Definition d8.h:275
bool IsTerminated() const
Definition d8.h:225
bool is_joined_
Definition d8.h:273
base::Mutex worker_mutex_
Definition d8.h:283
static void Close(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:5567
Worker(Isolate *parent_isolate, const char *script, bool flush_denormals)
Definition d8.cc:5184
Global< Context > context_
Definition d8.h:291
static void PostMessageOut(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:5536
void PostMessage(std::unique_ptr< SerializationData > data)
Definition d8.cc:5247
void EnterTerminatedState()
Definition d8.cc:5316
std::atomic< State > state_
Definition d8.h:272
i::ParkingSemaphore out_semaphore_
Definition d8.h:266
Isolate * isolate_
Definition d8.h:287
void Terminate()
Definition d8.cc:5303
static bool StartWorkerThread(Isolate *requester, std::shared_ptr< Worker > worker, base::Thread::Priority priority)
Definition d8.cc:5203
std::unique_ptr< SerializationData > GetMessage(Isolate *requester)
Definition d8.cc:5271
static constexpr i::ExternalPointerTag kManagedTag
Definition d8.h:189
static void SetCurrentWorker(Worker *worker)
Definition d8.cc:5383
void TerminateAndWaitForThread(const i::ParkedScope &parked)
Definition d8.cc:5291
~Worker()
Definition d8.cc:5192
bool is_running() const
Definition d8.cc:5201
SerializationDataQueue out_queue_
Definition d8.h:267
void ProcessMessages()
Definition d8.cc:5364
static void ImportScripts(const v8::FunctionCallbackInfo< v8::Value > &info)
Definition d8.cc:5563
Isolate * parent_isolate_
Definition d8.h:288
static Worker * GetCurrentWorker()
Definition d8.cc:5389
Thread(const Options &options)
Priority priority() const
Definition platform.h:623
int32_t offset
TNode< Context > context
TNode< Object > callback
size_t priority
STL namespace.
std::atomic< uint8_t > OnceType
Definition once.h:67
void Free(void *memory)
Definition memory.h:63
ModuleType
Definition d8.h:37
std::unordered_map< std::string, Counter * > CounterMap
Definition d8.h:86
void(*)(PromiseRejectMessage message) PromiseRejectCallback
Definition v8-promise.h:170
bool check_d8_flag_contradictions
Definition d8.cc:556
Local< String >(*)(Isolate *isolate, const char *name) WasmLoadSourceMapCallback
ModuleImportPhase
#define FATAL(...)
Definition logging.h:47
void operator()(uint8_t *p) const
Definition d8.h:161
#define V8_NODISCARD
Definition v8config.h:693
std::unique_ptr< ValueMirror > value