![]() |
v8
9.0.257(node16.0.0)
V8 is Google's open source JavaScript engine
|
Namespaces | |
base | |
debug | |
internal | |
metrics | |
platform | |
Functions | |
constexpr uint32_t | CurrentValueSerializerFormatVersion () |
V8_EXPORT bool | TryHandleWebAssemblyTrapPosix (int sig_code, siginfo_t *info, void *context) |
V8_EXPORT bool | TryHandleWebAssemblyTrapWindows (EXCEPTION_POINTERS *exception) |
void V8_EXPORT | RegisterExtension (std::unique_ptr< Extension >) |
V8_INLINE Local< Primitive > | Undefined (Isolate *isolate) |
V8_INLINE Local< Primitive > | Null (Isolate *isolate) |
V8_INLINE Local< Boolean > | True (Isolate *isolate) |
V8_INLINE Local< Boolean > | False (Isolate *isolate) |
template<class T > | |
Maybe< T > | Nothing () |
template<class T > | |
Maybe< T > | Just (const T &t) |
Maybe< void > | JustVoid () |
V8_INLINE bool | operator== (const TracedReferenceBase &lhs, const TracedReferenceBase &rhs) |
template<typename U > | |
V8_INLINE bool | operator== (const TracedReferenceBase &lhs, const v8::Local< U > &rhs) |
template<typename U > | |
V8_INLINE bool | operator== (const v8::Local< U > &lhs, const TracedReferenceBase &rhs) |
V8_INLINE bool | operator!= (const TracedReferenceBase &lhs, const TracedReferenceBase &rhs) |
template<typename U > | |
V8_INLINE bool | operator!= (const TracedReferenceBase &lhs, const v8::Local< U > &rhs) |
template<typename U > | |
V8_INLINE bool | operator!= (const v8::Local< U > &lhs, const TracedReferenceBase &rhs) |
This file provides additional API on top of the default one for making API calls, which come from embedder C++ functions. The functions are being called directly from optimized code, doing all the necessary typechecks in the compiler itself, instead of on the embedder side. Hence the "fast" in the name. Example usage might look like:
By design, fast calls are limited by the following requirements, which the embedder should enforce themselves:
Due to these limitations, it's not directly possible to report errors by throwing a JS exception or to otherwise do an allocation. There is an alternative way of creating fast calls that supports falling back to the slow call and then performing the necessary allocation. When one creates the fast method by using CFunction::MakeWithFallbackSupport instead of CFunction::Make, the fast callback gets as last parameter an output variable, through which it can request falling back to the slow call. So one might declare their method like:
If the callback wants to signal an error condition or to perform an allocation, it must set options.fallback to true and do an early return from the fast method. Then V8 checks the value of options.fallback and if it's true, falls back to executing the SlowCallback, which is capable of reporting the error (either by throwing a JS exception or logging to the console) or doing the allocation. It's the embedder's responsibility to ensure that the fast callback is idempotent up to the point where error and fallback conditions are checked, because otherwise executing the slow callback might produce visible side-effects twice.
An example for custom embedder type support might employ a way to wrap/ unwrap various C++ types in JSObject instances, e.g:
For instance if {object} is exposed via a global "obj" variable, one could write in JS: function hot_func() { obj.method(42); } and once {hot_func} gets optimized, CustomEmbedderType::FastMethod will be called instead of the slow version, with the following arguments: receiver := the {embedder_object} from above param := 42
Currently supported return types:
pointer to an embedder type
The 64-bit integer types currently have the IDL (unsigned) long long semantics: https://heycam.github.io/webidl/#abstract-opdef-converttoint In the future we'll extend the API to also provide conversions from/to BigInt to preserve full precision. The floating point types currently have the IDL (unrestricted) semantics, which is the only one used by WebGL. We plan to add support also for restricted floats/doubles, similarly to the BigInt conversion policies. We also differ from the specific NaN bit pattern that WebIDL prescribes (https://heycam.github.io/webidl/#es-unrestricted-float) in that Blink passes NaN values as-is, i.e. doesn't normalize them.
To be supported types:
Profiler support for the V8 JavaScript engine.
Support for Persistent containers.
C++11 embedders can use STL containers with Global values, but pre-C++11 does not support the required move semantic and hence may want these container classes.
Compile-time constants.
This header provides access to information about the value serializer at compile time, without declaring or defining any symbols that require linking to V8.
The v8 JavaScript engine.
using AccessorGetterCallback = void (*)(Local<String> property, const PropertyCallbackInfo<Value>& info) |
Accessor[Getter|Setter] are used as callback functions when setting|getting a particular property. See Object and ObjectTemplate's method SetAccessor.
using AccessorNameGetterCallback = void (*)(Local<Name> property, const PropertyCallbackInfo<Value>& info) |
using AccessorNameSetterCallback = void (*)(Local<Name> property, Local<Value> value, const PropertyCallbackInfo<void>& info) |
using AccessorSetterCallback = void (*)(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info) |
using AddCrashKeyCallback = void (*)(CrashKeyId id, const std::string& value) |
using AddHistogramSampleCallback = void (*)(void* histogram, int sample) |
using AllowCodeGenerationFromStringsCallback = bool (*)(Local<Context> context, Local<String> source) |
Callback to check if code generation from strings is allowed. See Context::AllowCodeGenerationFromStrings.
using AllowWasmCodeGenerationCallback = bool (*)(Local<Context> context, Local<String> source) |
using ApiImplementationCallback = void (*)(const FunctionCallbackInfo<Value>&) |
using BackingStoreDeleterCallback = void (*)(void* data, size_t length, void* deleter_data) |
using BeforeCallEnteredCallback = void (*)(Isolate*) |
using CallCompletedCallback = void (*)(Isolate*) |
using CounterLookupCallback = int* (*)(const char* name) |
using CreateHistogramCallback = void* (*)(const char* name, int min, int max, size_t buckets) |
using DcheckErrorCallback = void (*)(const char* file, int line, const char* message) |
using EntropySource = bool (*)(unsigned char* buffer, size_t length) |
using ExtensionCallback = bool (*)(const FunctionCallbackInfo<Value>&) |
using FailedAccessCheckCallback = void (*)(Local<Object> target, AccessType type, Local<Value> data) |
using FatalErrorCallback = void (*)(const char* location, const char* message) |
using FunctionCallback = void (*)(const FunctionCallbackInfo<Value>& info) |
using GCCallback = void (*)(GCType type, GCCallbackFlags flags) |
using GenericNamedPropertyDefinerCallback = void (*)(Local<Name> property, const PropertyDescriptor& desc, const PropertyCallbackInfo<Value>& info) |
Interceptor for defineProperty requests on an object.
Use info.GetReturnValue()
to indicate whether the request was intercepted or not. If the definer successfully intercepts the request, i.e., if the request should not be further executed, call info.GetReturnValue().Set(value)
. If the definer did not intercept the request, i.e., if the request should be handled as if no interceptor is present, do not not call Set()
.
property | The name of the property for which the request was intercepted. |
desc | The property descriptor which is used to define the property if the request is not intercepted. |
info | Information about the intercepted request, such as isolate, receiver, return value, or whether running in ‘'use strict’mode. See PropertyCallbackInfo`. |
See also ObjectTemplate::SetHandler
.
using GenericNamedPropertyDeleterCallback = void (*)(Local<Name> property, const PropertyCallbackInfo<Boolean>& info) |
Interceptor for delete requests on an object.
Use info.GetReturnValue()
to indicate whether the request was intercepted or not. If the deleter successfully intercepts the request, i.e., if the request should not be further executed, call info.GetReturnValue().Set(value)
with a boolean value
. The value
is used as the return value of delete
.
property | The name of the property for which the request was intercepted. |
info | Information about the intercepted request, such as isolate, receiver, return value, or whether running in ‘'use strict’mode. See PropertyCallbackInfo`. |
delete
, i.e., throw in strict mode instead of returning false, use info.ShouldThrowOnError()
to determine if you are in strict mode.See also ObjectTemplate::SetHandler.
using GenericNamedPropertyDescriptorCallback = void (*)(Local<Name> property, const PropertyCallbackInfo<Value>& info) |
Interceptor for getOwnPropertyDescriptor requests on an object.
Use info.GetReturnValue().Set()
to set the return value of the intercepted request. The return value must be an object that can be converted to a PropertyDescriptor, e.g., a v8::value
returned from v8::Object::getOwnPropertyDescriptor
.
property | The name of the property for which the request was intercepted. \info Information about the intercepted request, such as isolate, receiver, return value, or whether running in ‘'use strict’mode. See PropertyCallbackInfo`. |
See also ObjectTemplate::SetHandler
.
using GenericNamedPropertyEnumeratorCallback = void (*)(const PropertyCallbackInfo<Array>& info) |
using GenericNamedPropertyGetterCallback = void (*)(Local<Name> property, const PropertyCallbackInfo<Value>& info) |
Interceptor for get requests on an object.
Use info.GetReturnValue().Set()
to set the return value of the intercepted get request.
property | The name of the property for which the request was intercepted. |
info | Information about the intercepted request, such as isolate, receiver, return value, or whether running in 'use strict ' mode. See PropertyCallbackInfo . |
See also ObjectTemplate::SetHandler
.
using GenericNamedPropertyQueryCallback = void (*)(Local<Name> property, const PropertyCallbackInfo<Integer>& info) |
Intercepts all requests that query the attributes of the property, e.g., getOwnPropertyDescriptor(), propertyIsEnumerable(), and defineProperty().
Use info.GetReturnValue().Set(value)
to set the property attributes. The value is an integer encoding a v8::PropertyAttribute
.
property | The name of the property for which the request was intercepted. |
info | Information about the intercepted request, such as isolate, receiver, return value, or whether running in ‘'use strict’mode. See PropertyCallbackInfo`. |
hasOwnProperty()
can trigger this interceptor depending on the state of the object.See also ObjectTemplate::SetHandler.
using GenericNamedPropertySetterCallback = void (*)(Local<Name> property, Local<Value> value, const PropertyCallbackInfo<Value>& info) |
Interceptor for set requests on an object.
Use info.GetReturnValue()
to indicate whether the request was intercepted or not. If the setter successfully intercepts the request, i.e., if the request should not be further executed, call info.GetReturnValue().Set(value)
. If the setter did not intercept the request, i.e., if the request should be handled as if no interceptor is present, do not not call Set()
.
property | The name of the property for which the request was intercepted. |
value | The value which the property will have if the request is not intercepted. |
info | Information about the intercepted request, such as isolate, receiver, return value, or whether running in ‘'use strict’mode. See PropertyCallbackInfo`. |
See also ObjectTemplate::SetHandler.
using HostImportModuleDynamicallyWithImportAssertionsCallback = MaybeLocal<Promise> (*)(Local<Context> context, Local<ScriptOrModule> referrer, Local<String> specifier, Local<FixedArray> import_assertions) |
HostImportModuleDynamicallyWithImportAssertionsCallback is called when we require the embedder to load a module. This is used as part of the dynamic import syntax.
The referrer contains metadata about the script/module that calls import.
The specifier is the name of the module that should be imported.
The import_assertions are import assertions for this request in the form: [key1, value1, key2, value2, ...] where the keys and values are of type v8::String. Note, unlike the FixedArray passed to ResolveModuleCallback and returned from ModuleRequest::GetImportAssertions(), this array does not contain the source Locations of the assertions.
The embedder must compile, instantiate, evaluate the Module, and obtain its namespace object.
The Promise returned from this function is forwarded to userland JavaScript. The embedder must resolve this promise with the module namespace object. In case of an exception, the embedder must reject this promise with the exception. If the promise creation itself fails (e.g. due to stack overflow), the embedder must propagate that exception by returning an empty MaybeLocal.
using HostInitializeImportMetaObjectCallback = void (*)(Local<Context> context, Local<Module> module, Local<Object> meta) |
HostInitializeImportMetaObjectCallback is called the first time import.meta is accessed for a module. Subsequent access will reuse the same value.
The method combines two implementation-defined abstract operations into one: HostGetImportMetaProperties and HostFinalizeImportMeta.
The embedder should use v8::Object::CreateDataProperty to add properties on the meta object.
using IndexedPropertyDefinerCallback = void (*)(uint32_t index, const PropertyDescriptor& desc, const PropertyCallbackInfo<Value>& info) |
using IndexedPropertyDeleterCallback = void (*)(uint32_t index, const PropertyCallbackInfo<Boolean>& info) |
using IndexedPropertyDescriptorCallback = void (*)(uint32_t index, const PropertyCallbackInfo<Value>& info) |
using IndexedPropertyEnumeratorCallback = void (*)(const PropertyCallbackInfo<Array>& info) |
using IndexedPropertyGetterCallback = void (*)(uint32_t index, const PropertyCallbackInfo<Value>& info) |
using IndexedPropertyQueryCallback = void (*)(uint32_t index, const PropertyCallbackInfo<Integer>& info) |
using IndexedPropertySetterCallback = void (*)(uint32_t index, Local<Value> value, const PropertyCallbackInfo<Value>& info) |
using instead = MaybeLocal<Promise> (*)(Local<Context> context, Local<ScriptOrModule> referrer, Local<String> specifier) |
using InterruptCallback = void (*)(Isolate* isolate, void* data) |
using JitCodeEventHandler = void (*)(const JitCodeEvent* event) |
using LogEventCallback = void (*)(const char* name, int event) |
using MessageCallback = void (*)(Local<Message> message, Local<Value> data) |
using MicrotaskCallback = void (*)(void* data) |
using MicrotasksCompletedCallbackWithData = void (*)(Isolate*, void*) |
using ModifyCodeGenerationFromStringsCallback = ModifyCodeGenerationFromStringsResult (*)(Local<Context> context, Local<Value> source) |
using ModifyCodeGenerationFromStringsCallback2 = ModifyCodeGenerationFromStringsResult (*)(Local<Context> context, Local<Value> source, bool is_code_like) |
using NativeObject = void* |
Definition at line 24 of file v8-profiler.h.
using NearHeapLimitCallback = size_t (*)(void* data, size_t current_heap_limit, size_t initial_heap_limit) |
This callback is invoked when the heap size is close to the heap limit and V8 is likely to abort with out-of-memory error. The callback can extend the heap limit by returning a value that is greater than the current_heap_limit. The initial heap limit is the limit that was set after heap setup.
using OOMErrorCallback = void (*)(const char* location, bool is_heap_oom) |
typedef uintptr_t PersistentContainerValue |
using PrepareStackTraceCallback = MaybeLocal<Value> (*)(Local<Context> context, Local<Value> error, Local<Array> sites) |
PrepareStackTraceCallback is called when the stack property of an error is first accessed. The return value will be used as the stack value. If this callback is registed, the |Error.prepareStackTrace| API will be disabled. |sites| is an array of call sites, specified in https://v8.dev/docs/stack-trace-api
using PromiseHook = void (*)(PromiseHookType type, Local<Promise> promise, Local<Value> parent) |
using PromiseRejectCallback = void (*)(PromiseRejectMessage message) |
using ReturnAddressLocationResolver = uintptr_t (*)(uintptr_t return_addr_location) |
ReturnAddressLocationResolver is used as a callback function when v8 is resolving the location of a return address on the stack. Profilers that change the return address on the stack can use this to resolve the stack location to wherever the profiler stashed the original return address.
return_addr_location | A location on stack where a machine return address resides. |
using SnapshotObjectId = uint32_t |
Definition at line 25 of file v8-profiler.h.
using UniquePersistent = Global<T> |
using WasmExceptionsEnabledCallback = bool (*)(Local<Context> context) |
using WasmLoadSourceMapCallback = Local<String> (*)(Isolate* isolate, const char* name) |
using WasmSimdEnabledCallback = bool (*)(Local<Context> context) |
using WasmStreamingCallback = void (*)(const FunctionCallbackInfo<Value>&) |
enum AccessControl |
Access control specifications.
Some accessors should be accessible across contexts. These accessors have an explicit access control parameter which specifies the kind of cross-context access that should be allowed.
TODO(dcarney): Remove PROHIBITS_OVERWRITING as it is now unused.
Enumerator | |
---|---|
DEFAULT | |
ALL_CAN_READ | |
ALL_CAN_WRITE | |
PROHIBITS_OVERWRITING |
enum AccessType |
|
strong |
enum CodeEventType |
Note that this enum may be extended in the future. Please include a default case if this enum is used in a switch statement.
Enumerator | |
---|---|
kUnknownType |
Definition at line 1040 of file v8-profiler.h.
|
strong |
Enumerator | |
---|---|
kLazyLogging | |
kEagerLogging |
Definition at line 243 of file v8-profiler.h.
enum CpuProfilingMode |
Enumerator | |
---|---|
kLeafNodeLineNumbers | |
kCallerLineNumbers |
Definition at line 224 of file v8-profiler.h.
Enumerator | |
---|---|
kStandardNaming | |
kDebugNaming |
Definition at line 235 of file v8-profiler.h.
|
strong |
Enumerator | |
---|---|
kStarted | |
kAlreadyStarted | |
kErrorTooManyProfilers |
Definition at line 255 of file v8-profiler.h.
|
strong |
enum GCCallbackFlags |
GCCallbackFlags is used to notify additional information about the GC callback.
enum GCType |
Applications can register callback functions which will be called before and after certain garbage collection operations. Allocations are not allowed in the callback functions, you therefore cannot manipulate objects (set or delete properties for example) since it is possible such operations will result in the allocation of objects.
Enumerator | |
---|---|
kGCTypeScavenge | |
kGCTypeMarkSweepCompact | |
kGCTypeIncrementalMarking | |
kGCTypeProcessWeakCallbacks | |
kGCTypeAll |
|
strong |
|
strong |
enum JitCodeEventOptions |
|
strong |
Keys/Properties filter enums:
KeyCollectionMode limits the range of collected properties. kOwnOnly limits the collected properties to the given Object only. kIncludesPrototypes will include all keys of the objects's prototype chain as well.
Enumerator | |
---|---|
kOwnOnly | |
kIncludePrototypes |
|
strong |
|
strong |
Controls how promptly a memory measurement request is executed. By default the measurement is folded with the next scheduled GC which may happen after a while and is forced after some timeout. The kEager mode starts incremental GC right away and is useful for testing. The kLazy mode does not force GC.
Enumerator | |
---|---|
kDefault | |
kEager | |
kLazy |
|
strong |
Controls how the default MeasureMemoryDelegate reports the result of the memory measurement to JS. With kSummary only the total size is reported. With kDetailed the result includes the size of each native context.
Enumerator | |
---|---|
kSummary | |
kDetailed |
|
strong |
Memory pressure level for the MemoryPressureNotification. kNone hints V8 that there is no memory pressure. kModerate hints V8 to speed up incremental garbage collection at the cost of of higher latency due to garbage collection pauses. kCritical hints V8 to free memory as soon as possible. Garbage collection pauses at this level will be large.
Enumerator | |
---|---|
kNone | |
kModerate | |
kCritical |
|
strong |
Policy for running microtasks:
Enumerator | |
---|---|
kExplicit | |
kScoped | |
kAuto |
|
strong |
A flag describing different modes of string creation.
Aside from performance implications there are no differences between the two creation modes.
|
strong |
PromiseHook with type kInit is called when a new promise is created. When a new promise is created as part of the chain in the case of Promise.then or in the intermediate promises created by Promise.{race, all}/AsyncFunctionAwait, we pass the parent promise otherwise we pass undefined.
PromiseHook with type kResolve is called at the beginning of resolve or reject function defined by CreateResolvingFunctions.
PromiseHook with type kBefore is called at the beginning of the PromiseReactionJob.
PromiseHook with type kAfter is called right at the end of the PromiseReactionJob.
Enumerator | |
---|---|
kInit | |
kResolve | |
kBefore | |
kAfter |
enum PromiseRejectEvent |
enum PropertyAttribute |
enum PropertyFilter |
|
strong |
Configuration flags for v8::NamedPropertyHandlerConfiguration or v8::IndexedPropertyHandlerConfiguration.
enum RAILMode : unsigned |
Option flags passed to the SetRAILMode function. See documentation https://developers.google.com/web/tools/chrome-devtools/ profile/evaluate-performance/rail
Enumerator | |
---|---|
PERFORMANCE_RESPONSE | |
PERFORMANCE_ANIMATION | |
PERFORMANCE_IDLE | |
PERFORMANCE_LOAD |
|
strong |
|
strong |
Options for marking whether callbacks may trigger JS-observable side effects. Side-effect-free callbacks are allowlisted during debug evaluation with throwOnSideEffect. It applies when calling a Function, FunctionTemplate, or an Accessor callback. For Interceptors, please see PropertyHandlerFlags's kHasNoSideEffect. Callbacks that only cause side effects to the receiver are allowlisted if invoked on receiver objects that are created within the same debug-evaluate call, as these objects are temporary and the side effect does not escape.
Enumerator | |
---|---|
kHasSideEffect | |
kHasNoSideEffect | |
kHasSideEffectToReceiver |
enum StateTag |
|
strong |
Definition at line 21 of file v8-platform.h.
|
strong |
|
constexpr |
Definition at line 20 of file v8-value-serializer-version.h.
Definition at line 12359 of file v8.h.
References Internals::CheckInitialized(), Internals::GetRoot(), Internals::kFalseValueRootIndex, and V8::Local.
Referenced by Boolean::New().
|
inline |
Definition at line 12341 of file v8.h.
References Internals::CheckInitialized(), Internals::GetRoot(), Internals::kNullValueRootIndex, and V8::Local.
V8_INLINE bool v8::operator!= | ( | const TracedReferenceBase & | lhs, |
const TracedReferenceBase & | rhs | ||
) |
Definition at line 11279 of file v8.h.
References operator==().
V8_INLINE bool v8::operator!= | ( | const TracedReferenceBase & | lhs, |
const v8::Local< U > & | rhs | ||
) |
V8_INLINE bool v8::operator!= | ( | const v8::Local< U > & | lhs, |
const TracedReferenceBase & | rhs | ||
) |
V8_INLINE bool v8::operator== | ( | const TracedReferenceBase & | lhs, |
const TracedReferenceBase & | rhs | ||
) |
Definition at line 11254 of file v8.h.
References TracedReferenceBase::val_.
Referenced by operator!=().
V8_INLINE bool v8::operator== | ( | const TracedReferenceBase & | lhs, |
const v8::Local< U > & | rhs | ||
) |
Definition at line 11264 of file v8.h.
References TracedReferenceBase::val_.
V8_INLINE bool v8::operator== | ( | const v8::Local< U > & | lhs, |
const TracedReferenceBase & | rhs | ||
) |
Definition at line 12350 of file v8.h.
References Internals::CheckInitialized(), Internals::GetRoot(), Internals::kTrueValueRootIndex, and V8::Local.
Referenced by Boolean::New().
V8_EXPORT bool v8::TryHandleWebAssemblyTrapPosix | ( | int | sig_code, |
siginfo_t * | info, | ||
void * | context | ||
) |
This function determines whether a memory access violation has been an out-of-bounds memory access in WebAssembly. If so, it will modify the context parameter and add a return address where the execution can continue after the signal handling, and return true. Otherwise, false will be returned.
The parameters to this function correspond to those passed to a Posix signal handler. Use this function only on Linux and Mac.
sig_code | The signal code, e.g. SIGSEGV. |
info | A pointer to the siginfo_t struct provided to the signal handler. |
context | A pointer to a ucontext_t struct provided to the signal handler. |
V8_EXPORT bool v8::TryHandleWebAssemblyTrapWindows | ( | EXCEPTION_POINTERS * | exception | ) |
This function determines whether a memory access violation has been an out-of-bounds memory access in WebAssembly. If so, it will modify the exception parameter and add a return address where the execution can continue after the exception handling, and return true. Otherwise the return value will be false.
The parameter to this function corresponds to the one passed to a Windows vectored exception handler. Use this function only on Windows.
exception | An EXCEPTION_POINTERS* as provided to the exception handler. |
Definition at line 12332 of file v8.h.
References Internals::CheckInitialized(), Internals::GetRoot(), Internals::kUndefinedValueRootIndex, and V8::Local.