[async-await] Unify handling of await closure contexts.
Change the way that the (internal) await closures store the link to the generator object by introducing a dedicated AwaitContext, which stores the generator object into the extension slot (instead of misusing a regular FunctionContext here). Also unify the allocation+initialization of these contexts in the await-related builtins (both for async functions and generators). The rationale behind this is that for (zero-cost) async stack traces, we will need to dig into these contexts and we can do better checking with a dedicated instance type there. As an additional benefit, we save one word per await context, since we just use (the otherwise unused) extension slot to remember the generator object. As yet another benefit we will never accidentally use any of these contexts in the regular scope chain lookups, meaning we can also catch bugs there. And last but not least the objects printing machinery understands these contexts now and can even print the generator object for AwaitContexts for short printing, which is really valuable for debugging. Tbr: ulan@chromium.org Bug: v8:7253, v8:7522, v8:8015 Change-Id: I86955f5701e694e8a10b91ebe5f52705aa90968d Reviewed-on: https://chromium-review.googlesource.com/1249491 Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#56301}
This commit is contained in:
parent
cbd906b48c
commit
9e99297e56
@ -31,26 +31,13 @@ class AsyncFunctionBuiltinsAssembler : public AsyncBuiltinsAssembler {
|
||||
JSGeneratorObject::ResumeMode resume_mode);
|
||||
};
|
||||
|
||||
namespace {
|
||||
|
||||
// Describe fields of Context associated with AsyncFunctionAwait resume
|
||||
// closures.
|
||||
// TODO(jgruber): Refactor to reuse code for upcoming async-generators.
|
||||
class AwaitContext {
|
||||
public:
|
||||
enum Fields { kGeneratorSlot = Context::MIN_CONTEXT_SLOTS, kLength };
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
void AsyncFunctionBuiltinsAssembler::AsyncFunctionAwaitResumeClosure(
|
||||
Node* context, Node* sent_value,
|
||||
JSGeneratorObject::ResumeMode resume_mode) {
|
||||
DCHECK(resume_mode == JSGeneratorObject::kNext ||
|
||||
resume_mode == JSGeneratorObject::kThrow);
|
||||
|
||||
Node* const generator =
|
||||
LoadContextElement(context, AwaitContext::kGeneratorSlot);
|
||||
Node* const generator = LoadContextElement(context, Context::EXTENSION_INDEX);
|
||||
CSA_SLOW_ASSERT(this, HasInstanceType(generator, JS_GENERATOR_OBJECT_TYPE));
|
||||
|
||||
// Inline version of GeneratorPrototypeNext / GeneratorPrototypeReturn with
|
||||
@ -113,11 +100,6 @@ void AsyncFunctionBuiltinsAssembler::AsyncFunctionAwait(
|
||||
CSA_SLOW_ASSERT(this, HasInstanceType(generator, JS_GENERATOR_OBJECT_TYPE));
|
||||
CSA_SLOW_ASSERT(this, HasInstanceType(outer_promise, JS_PROMISE_TYPE));
|
||||
|
||||
ContextInitializer init_closure_context = [&](Node* context) {
|
||||
StoreContextElementNoWriteBarrier(context, AwaitContext::kGeneratorSlot,
|
||||
generator);
|
||||
};
|
||||
|
||||
// TODO(jgruber): AsyncBuiltinsAssembler::Await currently does not reuse
|
||||
// the awaited promise if it is already a promise. Reuse is non-spec compliant
|
||||
// but part of our old behavior gives us a couple of percent
|
||||
@ -130,8 +112,8 @@ void AsyncFunctionBuiltinsAssembler::AsyncFunctionAwait(
|
||||
Goto(&after_debug_hook);
|
||||
BIND(&after_debug_hook);
|
||||
|
||||
Await(context, generator, awaited, outer_promise, AwaitContext::kLength,
|
||||
init_closure_context, Context::ASYNC_FUNCTION_AWAIT_RESOLVE_SHARED_FUN,
|
||||
Await(context, generator, awaited, outer_promise,
|
||||
Context::ASYNC_FUNCTION_AWAIT_RESOLVE_SHARED_FUN,
|
||||
Context::ASYNC_FUNCTION_AWAIT_REJECT_SHARED_FUN,
|
||||
is_predicted_as_caught);
|
||||
|
||||
@ -150,11 +132,6 @@ void AsyncFunctionBuiltinsAssembler::AsyncFunctionAwaitOptimized(
|
||||
CSA_SLOW_ASSERT(this, HasInstanceType(generator, JS_GENERATOR_OBJECT_TYPE));
|
||||
CSA_SLOW_ASSERT(this, HasInstanceType(outer_promise, JS_PROMISE_TYPE));
|
||||
|
||||
ContextInitializer init_closure_context = [&](Node* context) {
|
||||
StoreContextElementNoWriteBarrier(context, AwaitContext::kGeneratorSlot,
|
||||
generator);
|
||||
};
|
||||
|
||||
// TODO(jgruber): AsyncBuiltinsAssembler::Await currently does not reuse
|
||||
// the awaited promise if it is already a promise. Reuse is non-spec compliant
|
||||
// but part of our old behavior gives us a couple of percent
|
||||
@ -167,10 +144,10 @@ void AsyncFunctionBuiltinsAssembler::AsyncFunctionAwaitOptimized(
|
||||
Goto(&after_debug_hook);
|
||||
BIND(&after_debug_hook);
|
||||
|
||||
AwaitOptimized(
|
||||
context, generator, awaited, outer_promise, AwaitContext::kLength,
|
||||
init_closure_context, Context::ASYNC_FUNCTION_AWAIT_RESOLVE_SHARED_FUN,
|
||||
Context::ASYNC_FUNCTION_AWAIT_REJECT_SHARED_FUN, is_predicted_as_caught);
|
||||
AwaitOptimized(context, generator, awaited, outer_promise,
|
||||
Context::ASYNC_FUNCTION_AWAIT_RESOLVE_SHARED_FUN,
|
||||
Context::ASYNC_FUNCTION_AWAIT_REJECT_SHARED_FUN,
|
||||
is_predicted_as_caught);
|
||||
|
||||
// Return outer promise to avoid adding an load of the outer promise before
|
||||
// suspending in BytecodeGenerator.
|
||||
|
@ -25,14 +25,12 @@ class ValueUnwrapContext {
|
||||
|
||||
Node* AsyncBuiltinsAssembler::Await(
|
||||
Node* context, Node* generator, Node* value, Node* outer_promise,
|
||||
int context_length, const ContextInitializer& init_closure_context,
|
||||
Node* on_resolve_context_index, Node* on_reject_context_index,
|
||||
Node* is_predicted_as_caught) {
|
||||
DCHECK_GE(context_length, Context::MIN_CONTEXT_SLOTS);
|
||||
|
||||
Node* const native_context = LoadNativeContext(context);
|
||||
|
||||
static const int kWrappedPromiseOffset = FixedArray::SizeFor(context_length);
|
||||
static const int kWrappedPromiseOffset =
|
||||
FixedArray::SizeFor(Context::MIN_CONTEXT_SLOTS);
|
||||
static const int kThrowawayPromiseOffset =
|
||||
kWrappedPromiseOffset + JSPromise::kSizeWithEmbedderFields;
|
||||
static const int kResolveClosureOffset =
|
||||
@ -45,9 +43,20 @@ Node* AsyncBuiltinsAssembler::Await(
|
||||
Node* const base = AllocateInNewSpace(kTotalSize);
|
||||
Node* const closure_context = base;
|
||||
{
|
||||
// Initialize closure context
|
||||
InitializeFunctionContext(native_context, closure_context, context_length);
|
||||
init_closure_context(closure_context);
|
||||
// Initialize the await context, storing the {generator} as extension.
|
||||
StoreMapNoWriteBarrier(closure_context, RootIndex::kAwaitContextMap);
|
||||
StoreObjectFieldNoWriteBarrier(closure_context, Context::kLengthOffset,
|
||||
SmiConstant(Context::MIN_CONTEXT_SLOTS));
|
||||
Node* const empty_scope_info =
|
||||
LoadContextElement(native_context, Context::SCOPE_INFO_INDEX);
|
||||
StoreContextElementNoWriteBarrier(
|
||||
closure_context, Context::SCOPE_INFO_INDEX, empty_scope_info);
|
||||
StoreContextElementNoWriteBarrier(closure_context, Context::PREVIOUS_INDEX,
|
||||
native_context);
|
||||
StoreContextElementNoWriteBarrier(closure_context, Context::EXTENSION_INDEX,
|
||||
generator);
|
||||
StoreContextElementNoWriteBarrier(
|
||||
closure_context, Context::NATIVE_CONTEXT_INDEX, native_context);
|
||||
}
|
||||
|
||||
// Let promiseCapability be ! NewPromiseCapability(%Promise%).
|
||||
@ -149,11 +158,8 @@ Node* AsyncBuiltinsAssembler::Await(
|
||||
|
||||
Node* AsyncBuiltinsAssembler::AwaitOptimized(
|
||||
Node* context, Node* generator, Node* value, Node* outer_promise,
|
||||
int context_length, const ContextInitializer& init_closure_context,
|
||||
Node* on_resolve_context_index, Node* on_reject_context_index,
|
||||
Node* is_predicted_as_caught) {
|
||||
DCHECK_GE(context_length, Context::MIN_CONTEXT_SLOTS);
|
||||
|
||||
Node* const native_context = LoadNativeContext(context);
|
||||
Node* const promise_fun =
|
||||
LoadContextElement(native_context, Context::PROMISE_FUNCTION_INDEX);
|
||||
@ -161,7 +167,7 @@ Node* AsyncBuiltinsAssembler::AwaitOptimized(
|
||||
CSA_ASSERT(this, IsConstructor(promise_fun));
|
||||
|
||||
static const int kThrowawayPromiseOffset =
|
||||
FixedArray::SizeFor(context_length);
|
||||
FixedArray::SizeFor(Context::MIN_CONTEXT_SLOTS);
|
||||
static const int kResolveClosureOffset =
|
||||
kThrowawayPromiseOffset + JSPromise::kSizeWithEmbedderFields;
|
||||
static const int kRejectClosureOffset =
|
||||
@ -176,9 +182,20 @@ Node* AsyncBuiltinsAssembler::AwaitOptimized(
|
||||
Node* const base = AllocateInNewSpace(kTotalSize);
|
||||
Node* const closure_context = base;
|
||||
{
|
||||
// Initialize closure context
|
||||
InitializeFunctionContext(native_context, closure_context, context_length);
|
||||
init_closure_context(closure_context);
|
||||
// Initialize the await context, storing the {generator} as extension.
|
||||
StoreMapNoWriteBarrier(closure_context, RootIndex::kAwaitContextMap);
|
||||
StoreObjectFieldNoWriteBarrier(closure_context, Context::kLengthOffset,
|
||||
SmiConstant(Context::MIN_CONTEXT_SLOTS));
|
||||
Node* const empty_scope_info =
|
||||
LoadContextElement(native_context, Context::SCOPE_INFO_INDEX);
|
||||
StoreContextElementNoWriteBarrier(
|
||||
closure_context, Context::SCOPE_INFO_INDEX, empty_scope_info);
|
||||
StoreContextElementNoWriteBarrier(closure_context, Context::PREVIOUS_INDEX,
|
||||
native_context);
|
||||
StoreContextElementNoWriteBarrier(closure_context, Context::EXTENSION_INDEX,
|
||||
generator);
|
||||
StoreContextElementNoWriteBarrier(
|
||||
closure_context, Context::NATIVE_CONTEXT_INDEX, native_context);
|
||||
}
|
||||
|
||||
Node* const promise_map =
|
||||
|
@ -16,63 +16,47 @@ class AsyncBuiltinsAssembler : public PromiseBuiltinsAssembler {
|
||||
: PromiseBuiltinsAssembler(state) {}
|
||||
|
||||
protected:
|
||||
typedef std::function<void(Node*)> ContextInitializer;
|
||||
|
||||
// Perform steps to resume generator after `value` is resolved.
|
||||
// `on_reject_context_index` is an index into the Native Context, which should
|
||||
// point to a SharedFunctioninfo instance used to create the closure. The
|
||||
// value following the reject index should be a similar value for the resolve
|
||||
// closure. Returns the Promise-wrapped `value`.
|
||||
Node* Await(Node* context, Node* generator, Node* value, Node* outer_promise,
|
||||
int context_length,
|
||||
const ContextInitializer& init_closure_context,
|
||||
Node* on_resolve_context_index, Node* on_reject_context_index,
|
||||
Node* is_predicted_as_caught);
|
||||
Node* AwaitOptimized(Node* context, Node* generator, Node* value,
|
||||
Node* outer_promise, int context_length,
|
||||
const ContextInitializer& init_closure_context,
|
||||
Node* on_resolve_context_index,
|
||||
Node* outer_promise, Node* on_resolve_context_index,
|
||||
Node* on_reject_context_index,
|
||||
Node* is_predicted_as_caught);
|
||||
Node* Await(Node* context, Node* generator, Node* value, Node* outer_promise,
|
||||
int context_length,
|
||||
const ContextInitializer& init_closure_context,
|
||||
int on_resolve_context_index, int on_reject_context_index,
|
||||
Node* is_predicted_as_caught) {
|
||||
return Await(context, generator, value, outer_promise, context_length,
|
||||
init_closure_context, IntPtrConstant(on_resolve_context_index),
|
||||
return Await(context, generator, value, outer_promise,
|
||||
IntPtrConstant(on_resolve_context_index),
|
||||
IntPtrConstant(on_reject_context_index),
|
||||
is_predicted_as_caught);
|
||||
}
|
||||
Node* AwaitOptimized(Node* context, Node* generator, Node* value,
|
||||
Node* outer_promise, int context_length,
|
||||
const ContextInitializer& init_closure_context,
|
||||
int on_resolve_context_index,
|
||||
Node* outer_promise, int on_resolve_context_index,
|
||||
int on_reject_context_index,
|
||||
Node* is_predicted_as_caught) {
|
||||
return AwaitOptimized(
|
||||
context, generator, value, outer_promise, context_length,
|
||||
init_closure_context, IntPtrConstant(on_resolve_context_index),
|
||||
IntPtrConstant(on_reject_context_index), is_predicted_as_caught);
|
||||
return AwaitOptimized(context, generator, value, outer_promise,
|
||||
IntPtrConstant(on_resolve_context_index),
|
||||
IntPtrConstant(on_reject_context_index),
|
||||
is_predicted_as_caught);
|
||||
}
|
||||
Node* Await(Node* context, Node* generator, Node* value, Node* outer_promise,
|
||||
int context_length,
|
||||
const ContextInitializer& init_closure_context,
|
||||
int on_resolve_context_index, int on_reject_context_index,
|
||||
bool is_predicted_as_caught) {
|
||||
return Await(context, generator, value, outer_promise, context_length,
|
||||
init_closure_context, on_resolve_context_index,
|
||||
on_reject_context_index,
|
||||
return Await(context, generator, value, outer_promise,
|
||||
on_resolve_context_index, on_reject_context_index,
|
||||
BooleanConstant(is_predicted_as_caught));
|
||||
}
|
||||
Node* AwaitOptimized(Node* context, Node* generator, Node* value,
|
||||
Node* outer_promise, int context_length,
|
||||
const ContextInitializer& init_closure_context,
|
||||
int on_resolve_context_index,
|
||||
Node* outer_promise, int on_resolve_context_index,
|
||||
int on_reject_context_index,
|
||||
bool is_predicted_as_caught) {
|
||||
return AwaitOptimized(context, generator, value, outer_promise,
|
||||
context_length, init_closure_context,
|
||||
on_resolve_context_index, on_reject_context_index,
|
||||
BooleanConstant(is_predicted_as_caught));
|
||||
}
|
||||
|
@ -17,13 +17,6 @@ using compiler::Node;
|
||||
|
||||
namespace {
|
||||
|
||||
// Describe fields of Context associated with AsyncGeneratorAwait resume
|
||||
// closures.
|
||||
class AwaitContext {
|
||||
public:
|
||||
enum Fields { kGeneratorSlot = Context::MIN_CONTEXT_SLOTS, kLength };
|
||||
};
|
||||
|
||||
class AsyncGeneratorBuiltinsAssembler : public AsyncBuiltinsAssembler {
|
||||
public:
|
||||
explicit AsyncGeneratorBuiltinsAssembler(CodeAssemblerState* state)
|
||||
@ -225,8 +218,7 @@ Node* AsyncGeneratorBuiltinsAssembler::AllocateAsyncGeneratorRequest(
|
||||
void AsyncGeneratorBuiltinsAssembler::AsyncGeneratorAwaitResumeClosure(
|
||||
Node* context, Node* value,
|
||||
JSAsyncGeneratorObject::ResumeMode resume_mode) {
|
||||
Node* const generator =
|
||||
LoadContextElement(context, AwaitContext::kGeneratorSlot);
|
||||
Node* const generator = LoadContextElement(context, Context::EXTENSION_INDEX);
|
||||
CSA_SLOW_ASSERT(this, TaggedIsAsyncGenerator(generator));
|
||||
|
||||
SetGeneratorNotAwaiting(generator);
|
||||
@ -254,11 +246,6 @@ void AsyncGeneratorBuiltinsAssembler::AsyncGeneratorAwait(bool is_catchable) {
|
||||
Node* const request = LoadFirstAsyncGeneratorRequestFromQueue(generator);
|
||||
CSA_ASSERT(this, IsNotUndefined(request));
|
||||
|
||||
ContextInitializer init_closure_context = [&](Node* context) {
|
||||
StoreContextElementNoWriteBarrier(context, AwaitContext::kGeneratorSlot,
|
||||
generator);
|
||||
};
|
||||
|
||||
Node* outer_promise =
|
||||
LoadObjectField(request, AsyncGeneratorRequest::kPromiseOffset);
|
||||
|
||||
@ -266,8 +253,8 @@ void AsyncGeneratorBuiltinsAssembler::AsyncGeneratorAwait(bool is_catchable) {
|
||||
const int reject_index = Context::ASYNC_GENERATOR_AWAIT_REJECT_SHARED_FUN;
|
||||
|
||||
SetGeneratorAwaiting(generator);
|
||||
Await(context, generator, value, outer_promise, AwaitContext::kLength,
|
||||
init_closure_context, resolve_index, reject_index, is_catchable);
|
||||
Await(context, generator, value, outer_promise, resolve_index, reject_index,
|
||||
is_catchable);
|
||||
Return(UndefinedConstant());
|
||||
}
|
||||
|
||||
@ -585,25 +572,19 @@ TF_BUILTIN(AsyncGeneratorYield, AsyncGeneratorBuiltinsAssembler) {
|
||||
Node* const request = LoadFirstAsyncGeneratorRequestFromQueue(generator);
|
||||
Node* const outer_promise = LoadPromiseFromAsyncGeneratorRequest(request);
|
||||
|
||||
ContextInitializer init_closure_context = [&](Node* context) {
|
||||
StoreContextElementNoWriteBarrier(context, AwaitContext::kGeneratorSlot,
|
||||
generator);
|
||||
};
|
||||
|
||||
const int on_resolve = Context::ASYNC_GENERATOR_YIELD_RESOLVE_SHARED_FUN;
|
||||
const int on_reject = Context::ASYNC_GENERATOR_AWAIT_REJECT_SHARED_FUN;
|
||||
|
||||
SetGeneratorAwaiting(generator);
|
||||
Await(context, generator, value, outer_promise, AwaitContext::kLength,
|
||||
init_closure_context, on_resolve, on_reject, is_caught);
|
||||
Await(context, generator, value, outer_promise, on_resolve, on_reject,
|
||||
is_caught);
|
||||
Return(UndefinedConstant());
|
||||
}
|
||||
|
||||
TF_BUILTIN(AsyncGeneratorYieldResolveClosure, AsyncGeneratorBuiltinsAssembler) {
|
||||
Node* const context = Parameter(Descriptor::kContext);
|
||||
Node* const value = Parameter(Descriptor::kValue);
|
||||
Node* const generator =
|
||||
LoadContextElement(context, AwaitContext::kGeneratorSlot);
|
||||
Node* const generator = LoadContextElement(context, Context::EXTENSION_INDEX);
|
||||
|
||||
SetGeneratorNotAwaiting(generator);
|
||||
|
||||
@ -656,17 +637,11 @@ TF_BUILTIN(AsyncGeneratorReturn, AsyncGeneratorBuiltinsAssembler) {
|
||||
|
||||
BIND(&perform_await);
|
||||
|
||||
ContextInitializer init_closure_context = [&](Node* context) {
|
||||
StoreContextElementNoWriteBarrier(context, AwaitContext::kGeneratorSlot,
|
||||
generator);
|
||||
};
|
||||
|
||||
SetGeneratorAwaiting(generator);
|
||||
Node* const context = Parameter(Descriptor::kContext);
|
||||
Node* const outer_promise = LoadPromiseFromAsyncGeneratorRequest(req);
|
||||
Await(context, generator, value, outer_promise, AwaitContext::kLength,
|
||||
init_closure_context, var_on_resolve.value(), var_on_reject.value(),
|
||||
is_caught);
|
||||
Await(context, generator, value, outer_promise, var_on_resolve.value(),
|
||||
var_on_reject.value(), is_caught);
|
||||
|
||||
Return(UndefinedConstant());
|
||||
}
|
||||
@ -689,8 +664,7 @@ TF_BUILTIN(AsyncGeneratorReturnClosedResolveClosure,
|
||||
AsyncGeneratorBuiltinsAssembler) {
|
||||
Node* const context = Parameter(Descriptor::kContext);
|
||||
Node* const value = Parameter(Descriptor::kValue);
|
||||
Node* const generator =
|
||||
LoadContextElement(context, AwaitContext::kGeneratorSlot);
|
||||
Node* const generator = LoadContextElement(context, Context::EXTENSION_INDEX);
|
||||
|
||||
SetGeneratorNotAwaiting(generator);
|
||||
|
||||
@ -707,8 +681,7 @@ TF_BUILTIN(AsyncGeneratorReturnClosedRejectClosure,
|
||||
AsyncGeneratorBuiltinsAssembler) {
|
||||
Node* const context = Parameter(Descriptor::kContext);
|
||||
Node* const value = Parameter(Descriptor::kValue);
|
||||
Node* const generator =
|
||||
LoadContextElement(context, AwaitContext::kGeneratorSlot);
|
||||
Node* const generator = LoadContextElement(context, Context::EXTENSION_INDEX);
|
||||
|
||||
SetGeneratorNotAwaiting(generator);
|
||||
|
||||
|
@ -50,7 +50,7 @@ class AllocationBuilder final {
|
||||
|
||||
// Compound allocation of a context.
|
||||
void AllocateContext(int length, Handle<Map> map) {
|
||||
DCHECK(map->instance_type() >= BLOCK_CONTEXT_TYPE &&
|
||||
DCHECK(map->instance_type() >= AWAIT_CONTEXT_TYPE &&
|
||||
map->instance_type() <= WITH_CONTEXT_TYPE);
|
||||
int size = FixedArray::SizeFor(length);
|
||||
Allocate(size, NOT_TENURED, Type::OtherInternal());
|
||||
|
@ -292,6 +292,7 @@ Type::bitset BitsetType::Lub(const MapRefLike& map) {
|
||||
case FOREIGN_TYPE:
|
||||
case SCOPE_INFO_TYPE:
|
||||
case SCRIPT_CONTEXT_TABLE_TYPE:
|
||||
case AWAIT_CONTEXT_TYPE:
|
||||
case BLOCK_CONTEXT_TYPE:
|
||||
case CATCH_CONTEXT_TYPE:
|
||||
case DEBUG_EVALUATE_CONTEXT_TYPE:
|
||||
|
@ -99,6 +99,10 @@ bool Context::IsDebugEvaluateContext() const {
|
||||
return map()->instance_type() == DEBUG_EVALUATE_CONTEXT_TYPE;
|
||||
}
|
||||
|
||||
bool Context::IsAwaitContext() const {
|
||||
return map()->instance_type() == AWAIT_CONTEXT_TYPE;
|
||||
}
|
||||
|
||||
bool Context::IsBlockContext() const {
|
||||
return map()->instance_type() == BLOCK_CONTEXT_TYPE;
|
||||
}
|
||||
|
@ -451,7 +451,8 @@ class Context : public FixedArray, public NeverReadOnlySpaceObject {
|
||||
// The extension slot is used for either the global object (in native
|
||||
// contexts), eval extension object (function contexts), subject of with
|
||||
// (with contexts), or the variable name (catch contexts), the serialized
|
||||
// scope info (block contexts), or the module instance (module contexts).
|
||||
// scope info (block contexts), the module instance (module contexts), or
|
||||
// the generator object (await contexts).
|
||||
EXTENSION_INDEX,
|
||||
NATIVE_CONTEXT_INDEX,
|
||||
|
||||
@ -538,6 +539,7 @@ class Context : public FixedArray, public NeverReadOnlySpaceObject {
|
||||
inline bool IsCatchContext() const;
|
||||
inline bool IsWithContext() const;
|
||||
inline bool IsDebugEvaluateContext() const;
|
||||
inline bool IsAwaitContext() const;
|
||||
inline bool IsBlockContext() const;
|
||||
inline bool IsModuleContext() const;
|
||||
inline bool IsEvalContext() const;
|
||||
|
@ -3468,6 +3468,7 @@ void TranslatedState::InitializeCapturedObjectAt(
|
||||
return;
|
||||
|
||||
case FIXED_ARRAY_TYPE:
|
||||
case AWAIT_CONTEXT_TYPE:
|
||||
case BLOCK_CONTEXT_TYPE:
|
||||
case CATCH_CONTEXT_TYPE:
|
||||
case DEBUG_EVALUATE_CONTEXT_TYPE:
|
||||
@ -3611,6 +3612,7 @@ void TranslatedState::EnsureCapturedObjectAllocatedAt(
|
||||
|
||||
case FIXED_ARRAY_TYPE:
|
||||
case SCRIPT_CONTEXT_TABLE_TYPE:
|
||||
case AWAIT_CONTEXT_TYPE:
|
||||
case BLOCK_CONTEXT_TYPE:
|
||||
case CATCH_CONTEXT_TYPE:
|
||||
case DEBUG_EVALUATE_CONTEXT_TYPE:
|
||||
|
@ -63,6 +63,7 @@ using v8::MemoryPressureLevel;
|
||||
V(ArgumentsMarkerMap) \
|
||||
V(ArrayBufferNeuteringProtector) \
|
||||
V(ArrayIteratorProtector) \
|
||||
V(AwaitContextMap) \
|
||||
V(BigIntMap) \
|
||||
V(BlockContextMap) \
|
||||
V(ObjectBoilerplateDescriptionMap) \
|
||||
|
@ -464,6 +464,7 @@ bool Heap::CreateInitialMaps() {
|
||||
ALLOCATE_VARSIZE_MAP(CATCH_CONTEXT_TYPE, catch_context)
|
||||
ALLOCATE_VARSIZE_MAP(WITH_CONTEXT_TYPE, with_context)
|
||||
ALLOCATE_VARSIZE_MAP(DEBUG_EVALUATE_CONTEXT_TYPE, debug_evaluate_context)
|
||||
ALLOCATE_VARSIZE_MAP(AWAIT_CONTEXT_TYPE, await_context)
|
||||
ALLOCATE_VARSIZE_MAP(BLOCK_CONTEXT_TYPE, block_context)
|
||||
ALLOCATE_VARSIZE_MAP(MODULE_CONTEXT_TYPE, module_context)
|
||||
ALLOCATE_VARSIZE_MAP(EVAL_CONTEXT_TYPE, eval_context)
|
||||
|
@ -740,6 +740,7 @@ ReturnType BodyDescriptorApply(InstanceType type, T1 p1, T2 p2, T3 p3, T4 p4) {
|
||||
case EPHEMERON_HASH_TABLE_TYPE:
|
||||
case SCOPE_INFO_TYPE:
|
||||
case SCRIPT_CONTEXT_TABLE_TYPE:
|
||||
case AWAIT_CONTEXT_TYPE:
|
||||
case BLOCK_CONTEXT_TYPE:
|
||||
case CATCH_CONTEXT_TYPE:
|
||||
case DEBUG_EVALUATE_CONTEXT_TYPE:
|
||||
|
@ -161,6 +161,7 @@ void HeapObject::HeapObjectVerify(Isolate* isolate) {
|
||||
case FIXED_ARRAY_TYPE:
|
||||
case SCOPE_INFO_TYPE:
|
||||
case SCRIPT_CONTEXT_TABLE_TYPE:
|
||||
case AWAIT_CONTEXT_TYPE:
|
||||
case BLOCK_CONTEXT_TYPE:
|
||||
case CATCH_CONTEXT_TYPE:
|
||||
case DEBUG_EVALUATE_CONTEXT_TYPE:
|
||||
|
@ -139,6 +139,7 @@ namespace internal {
|
||||
V(SCOPE_INFO_TYPE) \
|
||||
V(SCRIPT_CONTEXT_TABLE_TYPE) \
|
||||
\
|
||||
V(AWAIT_CONTEXT_TYPE) \
|
||||
V(BLOCK_CONTEXT_TYPE) \
|
||||
V(CATCH_CONTEXT_TYPE) \
|
||||
V(DEBUG_EVALUATE_CONTEXT_TYPE) \
|
||||
|
@ -118,6 +118,7 @@ void HeapObject::HeapObjectPrint(std::ostream& os) { // NOLINT
|
||||
FixedDoubleArray::cast(this)->FixedDoubleArrayPrint(os);
|
||||
break;
|
||||
case FIXED_ARRAY_TYPE:
|
||||
case AWAIT_CONTEXT_TYPE:
|
||||
case BLOCK_CONTEXT_TYPE:
|
||||
case CATCH_CONTEXT_TYPE:
|
||||
case DEBUG_EVALUATE_CONTEXT_TYPE:
|
||||
|
@ -3092,6 +3092,7 @@ VisitorId Map::GetVisitorId(Map* map) {
|
||||
case STRING_TABLE_TYPE:
|
||||
case SCOPE_INFO_TYPE:
|
||||
case SCRIPT_CONTEXT_TABLE_TYPE:
|
||||
case AWAIT_CONTEXT_TYPE:
|
||||
case BLOCK_CONTEXT_TYPE:
|
||||
case CATCH_CONTEXT_TYPE:
|
||||
case DEBUG_EVALUATE_CONTEXT_TYPE:
|
||||
@ -3401,6 +3402,15 @@ void HeapObject::HeapObjectShortPrint(std::ostream& os) { // NOLINT
|
||||
}
|
||||
os << ">";
|
||||
} break;
|
||||
case AWAIT_CONTEXT_TYPE: {
|
||||
os << "<AwaitContext generator= ";
|
||||
HeapStringAllocator allocator;
|
||||
StringStream accumulator(&allocator);
|
||||
Context::cast(this)->extension()->ShortPrint(&accumulator);
|
||||
os << accumulator.ToCString().get();
|
||||
os << '>';
|
||||
break;
|
||||
}
|
||||
case BLOCK_CONTEXT_TYPE:
|
||||
os << "<BlockContext[" << FixedArray::cast(this)->length() << "]>";
|
||||
break;
|
||||
|
@ -444,7 +444,8 @@ enum InstanceType : uint16_t {
|
||||
EPHEMERON_HASH_TABLE_TYPE,
|
||||
SCOPE_INFO_TYPE,
|
||||
SCRIPT_CONTEXT_TABLE_TYPE,
|
||||
BLOCK_CONTEXT_TYPE, // FIRST_CONTEXT_TYPE
|
||||
AWAIT_CONTEXT_TYPE, // FIRST_CONTEXT_TYPE
|
||||
BLOCK_CONTEXT_TYPE,
|
||||
CATCH_CONTEXT_TYPE,
|
||||
DEBUG_EVALUATE_CONTEXT_TYPE,
|
||||
EVAL_CONTEXT_TYPE,
|
||||
@ -567,7 +568,7 @@ enum InstanceType : uint16_t {
|
||||
FIRST_WEAK_FIXED_ARRAY_TYPE = WEAK_FIXED_ARRAY_TYPE,
|
||||
LAST_WEAK_FIXED_ARRAY_TYPE = TRANSITION_ARRAY_TYPE,
|
||||
// Boundaries for testing if given HeapObject is a Context
|
||||
FIRST_CONTEXT_TYPE = BLOCK_CONTEXT_TYPE,
|
||||
FIRST_CONTEXT_TYPE = AWAIT_CONTEXT_TYPE,
|
||||
LAST_CONTEXT_TYPE = WITH_CONTEXT_TYPE,
|
||||
// Boundaries for testing if given HeapObject is a subclass of Microtask.
|
||||
FIRST_MICROTASK_TYPE = CALLABLE_TASK_TYPE,
|
||||
|
@ -74,6 +74,7 @@ class Symbol;
|
||||
V(Map, module_context_map, ModuleContextMap) \
|
||||
V(Map, eval_context_map, EvalContextMap) \
|
||||
V(Map, script_context_map, ScriptContextMap) \
|
||||
V(Map, await_context_map, AwaitContextMap) \
|
||||
V(Map, block_context_map, BlockContextMap) \
|
||||
V(Map, catch_context_map, CatchContextMap) \
|
||||
V(Map, with_context_map, WithContextMap) \
|
||||
|
@ -97,34 +97,35 @@ INSTANCE_TYPES = {
|
||||
193: "EPHEMERON_HASH_TABLE_TYPE",
|
||||
194: "SCOPE_INFO_TYPE",
|
||||
195: "SCRIPT_CONTEXT_TABLE_TYPE",
|
||||
196: "BLOCK_CONTEXT_TYPE",
|
||||
197: "CATCH_CONTEXT_TYPE",
|
||||
198: "DEBUG_EVALUATE_CONTEXT_TYPE",
|
||||
199: "EVAL_CONTEXT_TYPE",
|
||||
200: "FUNCTION_CONTEXT_TYPE",
|
||||
201: "MODULE_CONTEXT_TYPE",
|
||||
202: "NATIVE_CONTEXT_TYPE",
|
||||
203: "SCRIPT_CONTEXT_TYPE",
|
||||
204: "WITH_CONTEXT_TYPE",
|
||||
205: "WEAK_FIXED_ARRAY_TYPE",
|
||||
206: "DESCRIPTOR_ARRAY_TYPE",
|
||||
207: "TRANSITION_ARRAY_TYPE",
|
||||
208: "CALL_HANDLER_INFO_TYPE",
|
||||
209: "CELL_TYPE",
|
||||
210: "CODE_DATA_CONTAINER_TYPE",
|
||||
211: "FEEDBACK_CELL_TYPE",
|
||||
212: "FEEDBACK_VECTOR_TYPE",
|
||||
213: "LOAD_HANDLER_TYPE",
|
||||
214: "PRE_PARSED_SCOPE_DATA_TYPE",
|
||||
215: "PROPERTY_ARRAY_TYPE",
|
||||
216: "PROPERTY_CELL_TYPE",
|
||||
217: "SHARED_FUNCTION_INFO_TYPE",
|
||||
218: "SMALL_ORDERED_HASH_MAP_TYPE",
|
||||
219: "SMALL_ORDERED_HASH_SET_TYPE",
|
||||
220: "STORE_HANDLER_TYPE",
|
||||
221: "UNCOMPILED_DATA_WITHOUT_PRE_PARSED_SCOPE_TYPE",
|
||||
222: "UNCOMPILED_DATA_WITH_PRE_PARSED_SCOPE_TYPE",
|
||||
223: "WEAK_ARRAY_LIST_TYPE",
|
||||
196: "AWAIT_CONTEXT_TYPE",
|
||||
197: "BLOCK_CONTEXT_TYPE",
|
||||
198: "CATCH_CONTEXT_TYPE",
|
||||
199: "DEBUG_EVALUATE_CONTEXT_TYPE",
|
||||
200: "EVAL_CONTEXT_TYPE",
|
||||
201: "FUNCTION_CONTEXT_TYPE",
|
||||
202: "MODULE_CONTEXT_TYPE",
|
||||
203: "NATIVE_CONTEXT_TYPE",
|
||||
204: "SCRIPT_CONTEXT_TYPE",
|
||||
205: "WITH_CONTEXT_TYPE",
|
||||
206: "WEAK_FIXED_ARRAY_TYPE",
|
||||
207: "DESCRIPTOR_ARRAY_TYPE",
|
||||
208: "TRANSITION_ARRAY_TYPE",
|
||||
209: "CALL_HANDLER_INFO_TYPE",
|
||||
210: "CELL_TYPE",
|
||||
211: "CODE_DATA_CONTAINER_TYPE",
|
||||
212: "FEEDBACK_CELL_TYPE",
|
||||
213: "FEEDBACK_VECTOR_TYPE",
|
||||
214: "LOAD_HANDLER_TYPE",
|
||||
215: "PRE_PARSED_SCOPE_DATA_TYPE",
|
||||
216: "PROPERTY_ARRAY_TYPE",
|
||||
217: "PROPERTY_CELL_TYPE",
|
||||
218: "SHARED_FUNCTION_INFO_TYPE",
|
||||
219: "SMALL_ORDERED_HASH_MAP_TYPE",
|
||||
220: "SMALL_ORDERED_HASH_SET_TYPE",
|
||||
221: "STORE_HANDLER_TYPE",
|
||||
222: "UNCOMPILED_DATA_WITHOUT_PRE_PARSED_SCOPE_TYPE",
|
||||
223: "UNCOMPILED_DATA_WITH_PRE_PARSED_SCOPE_TYPE",
|
||||
224: "WEAK_ARRAY_LIST_TYPE",
|
||||
1024: "JS_PROXY_TYPE",
|
||||
1025: "JS_GLOBAL_OBJECT_TYPE",
|
||||
1026: "JS_GLOBAL_PROXY_TYPE",
|
||||
@ -182,8 +183,8 @@ KNOWN_MAPS = {
|
||||
("RO_SPACE", 0x02201): (138, "FreeSpaceMap"),
|
||||
("RO_SPACE", 0x02251): (132, "MetaMap"),
|
||||
("RO_SPACE", 0x022d1): (131, "NullMap"),
|
||||
("RO_SPACE", 0x02341): (206, "DescriptorArrayMap"),
|
||||
("RO_SPACE", 0x023a1): (205, "WeakFixedArrayMap"),
|
||||
("RO_SPACE", 0x02341): (207, "DescriptorArrayMap"),
|
||||
("RO_SPACE", 0x023a1): (206, "WeakFixedArrayMap"),
|
||||
("RO_SPACE", 0x023f1): (152, "OnePointerFillerMap"),
|
||||
("RO_SPACE", 0x02441): (152, "TwoPointerFillerMap"),
|
||||
("RO_SPACE", 0x024c1): (131, "UninitializedMap"),
|
||||
@ -199,130 +200,131 @@ KNOWN_MAPS = {
|
||||
("RO_SPACE", 0x02971): (128, "SymbolMap"),
|
||||
("RO_SPACE", 0x029c1): (72, "OneByteStringMap"),
|
||||
("RO_SPACE", 0x02a11): (194, "ScopeInfoMap"),
|
||||
("RO_SPACE", 0x02a61): (217, "SharedFunctionInfoMap"),
|
||||
("RO_SPACE", 0x02a61): (218, "SharedFunctionInfoMap"),
|
||||
("RO_SPACE", 0x02ab1): (133, "CodeMap"),
|
||||
("RO_SPACE", 0x02b01): (200, "FunctionContextMap"),
|
||||
("RO_SPACE", 0x02b51): (209, "CellMap"),
|
||||
("RO_SPACE", 0x02ba1): (216, "GlobalPropertyCellMap"),
|
||||
("RO_SPACE", 0x02b01): (201, "FunctionContextMap"),
|
||||
("RO_SPACE", 0x02b51): (210, "CellMap"),
|
||||
("RO_SPACE", 0x02ba1): (217, "GlobalPropertyCellMap"),
|
||||
("RO_SPACE", 0x02bf1): (135, "ForeignMap"),
|
||||
("RO_SPACE", 0x02c41): (207, "TransitionArrayMap"),
|
||||
("RO_SPACE", 0x02c91): (212, "FeedbackVectorMap"),
|
||||
("RO_SPACE", 0x02c41): (208, "TransitionArrayMap"),
|
||||
("RO_SPACE", 0x02c91): (213, "FeedbackVectorMap"),
|
||||
("RO_SPACE", 0x02d31): (131, "ArgumentsMarkerMap"),
|
||||
("RO_SPACE", 0x02dd1): (131, "ExceptionMap"),
|
||||
("RO_SPACE", 0x02e71): (131, "TerminationExceptionMap"),
|
||||
("RO_SPACE", 0x02f19): (131, "OptimizedOutMap"),
|
||||
("RO_SPACE", 0x02fb9): (131, "StaleRegisterMap"),
|
||||
("RO_SPACE", 0x03029): (202, "NativeContextMap"),
|
||||
("RO_SPACE", 0x03079): (201, "ModuleContextMap"),
|
||||
("RO_SPACE", 0x030c9): (199, "EvalContextMap"),
|
||||
("RO_SPACE", 0x03119): (203, "ScriptContextMap"),
|
||||
("RO_SPACE", 0x03169): (196, "BlockContextMap"),
|
||||
("RO_SPACE", 0x031b9): (197, "CatchContextMap"),
|
||||
("RO_SPACE", 0x03209): (204, "WithContextMap"),
|
||||
("RO_SPACE", 0x03259): (198, "DebugEvaluateContextMap"),
|
||||
("RO_SPACE", 0x032a9): (195, "ScriptContextTableMap"),
|
||||
("RO_SPACE", 0x032f9): (151, "FeedbackMetadataArrayMap"),
|
||||
("RO_SPACE", 0x03349): (183, "ArrayListMap"),
|
||||
("RO_SPACE", 0x03399): (130, "BigIntMap"),
|
||||
("RO_SPACE", 0x033e9): (184, "ObjectBoilerplateDescriptionMap"),
|
||||
("RO_SPACE", 0x03439): (137, "BytecodeArrayMap"),
|
||||
("RO_SPACE", 0x03489): (210, "CodeDataContainerMap"),
|
||||
("RO_SPACE", 0x034d9): (150, "FixedDoubleArrayMap"),
|
||||
("RO_SPACE", 0x03529): (189, "GlobalDictionaryMap"),
|
||||
("RO_SPACE", 0x03579): (211, "ManyClosuresCellMap"),
|
||||
("RO_SPACE", 0x035c9): (183, "ModuleInfoMap"),
|
||||
("RO_SPACE", 0x03619): (134, "MutableHeapNumberMap"),
|
||||
("RO_SPACE", 0x03669): (188, "NameDictionaryMap"),
|
||||
("RO_SPACE", 0x036b9): (211, "NoClosuresCellMap"),
|
||||
("RO_SPACE", 0x03709): (190, "NumberDictionaryMap"),
|
||||
("RO_SPACE", 0x03759): (211, "OneClosureCellMap"),
|
||||
("RO_SPACE", 0x037a9): (186, "OrderedHashMapMap"),
|
||||
("RO_SPACE", 0x037f9): (187, "OrderedHashSetMap"),
|
||||
("RO_SPACE", 0x03849): (214, "PreParsedScopeDataMap"),
|
||||
("RO_SPACE", 0x03899): (215, "PropertyArrayMap"),
|
||||
("RO_SPACE", 0x038e9): (208, "SideEffectCallHandlerInfoMap"),
|
||||
("RO_SPACE", 0x03939): (208, "SideEffectFreeCallHandlerInfoMap"),
|
||||
("RO_SPACE", 0x03989): (208, "NextCallSideEffectFreeCallHandlerInfoMap"),
|
||||
("RO_SPACE", 0x039d9): (191, "SimpleNumberDictionaryMap"),
|
||||
("RO_SPACE", 0x03a29): (183, "SloppyArgumentsElementsMap"),
|
||||
("RO_SPACE", 0x03a79): (218, "SmallOrderedHashMapMap"),
|
||||
("RO_SPACE", 0x03ac9): (219, "SmallOrderedHashSetMap"),
|
||||
("RO_SPACE", 0x03b19): (192, "StringTableMap"),
|
||||
("RO_SPACE", 0x03b69): (221, "UncompiledDataWithoutPreParsedScopeMap"),
|
||||
("RO_SPACE", 0x03bb9): (222, "UncompiledDataWithPreParsedScopeMap"),
|
||||
("RO_SPACE", 0x03c09): (223, "WeakArrayListMap"),
|
||||
("RO_SPACE", 0x03c59): (193, "EphemeronHashTableMap"),
|
||||
("RO_SPACE", 0x03ca9): (106, "NativeSourceStringMap"),
|
||||
("RO_SPACE", 0x03cf9): (64, "StringMap"),
|
||||
("RO_SPACE", 0x03d49): (73, "ConsOneByteStringMap"),
|
||||
("RO_SPACE", 0x03d99): (65, "ConsStringMap"),
|
||||
("RO_SPACE", 0x03de9): (77, "ThinOneByteStringMap"),
|
||||
("RO_SPACE", 0x03e39): (69, "ThinStringMap"),
|
||||
("RO_SPACE", 0x03e89): (67, "SlicedStringMap"),
|
||||
("RO_SPACE", 0x03ed9): (75, "SlicedOneByteStringMap"),
|
||||
("RO_SPACE", 0x03f29): (66, "ExternalStringMap"),
|
||||
("RO_SPACE", 0x03f79): (82, "ExternalStringWithOneByteDataMap"),
|
||||
("RO_SPACE", 0x03fc9): (74, "ExternalOneByteStringMap"),
|
||||
("RO_SPACE", 0x04019): (98, "UncachedExternalStringMap"),
|
||||
("RO_SPACE", 0x04069): (114, "UncachedExternalStringWithOneByteDataMap"),
|
||||
("RO_SPACE", 0x040b9): (0, "InternalizedStringMap"),
|
||||
("RO_SPACE", 0x04109): (2, "ExternalInternalizedStringMap"),
|
||||
("RO_SPACE", 0x04159): (18, "ExternalInternalizedStringWithOneByteDataMap"),
|
||||
("RO_SPACE", 0x041a9): (10, "ExternalOneByteInternalizedStringMap"),
|
||||
("RO_SPACE", 0x041f9): (34, "UncachedExternalInternalizedStringMap"),
|
||||
("RO_SPACE", 0x04249): (50, "UncachedExternalInternalizedStringWithOneByteDataMap"),
|
||||
("RO_SPACE", 0x04299): (42, "UncachedExternalOneByteInternalizedStringMap"),
|
||||
("RO_SPACE", 0x042e9): (106, "UncachedExternalOneByteStringMap"),
|
||||
("RO_SPACE", 0x04339): (140, "FixedUint8ArrayMap"),
|
||||
("RO_SPACE", 0x04389): (139, "FixedInt8ArrayMap"),
|
||||
("RO_SPACE", 0x043d9): (142, "FixedUint16ArrayMap"),
|
||||
("RO_SPACE", 0x04429): (141, "FixedInt16ArrayMap"),
|
||||
("RO_SPACE", 0x04479): (144, "FixedUint32ArrayMap"),
|
||||
("RO_SPACE", 0x044c9): (143, "FixedInt32ArrayMap"),
|
||||
("RO_SPACE", 0x04519): (145, "FixedFloat32ArrayMap"),
|
||||
("RO_SPACE", 0x04569): (146, "FixedFloat64ArrayMap"),
|
||||
("RO_SPACE", 0x045b9): (147, "FixedUint8ClampedArrayMap"),
|
||||
("RO_SPACE", 0x04609): (149, "FixedBigUint64ArrayMap"),
|
||||
("RO_SPACE", 0x04659): (148, "FixedBigInt64ArrayMap"),
|
||||
("RO_SPACE", 0x046a9): (131, "SelfReferenceMarkerMap"),
|
||||
("RO_SPACE", 0x04711): (171, "Tuple2Map"),
|
||||
("RO_SPACE", 0x047b1): (173, "ArrayBoilerplateDescriptionMap"),
|
||||
("RO_SPACE", 0x04aa1): (161, "InterceptorInfoMap"),
|
||||
("RO_SPACE", 0x06d29): (153, "AccessCheckInfoMap"),
|
||||
("RO_SPACE", 0x06d79): (154, "AccessorInfoMap"),
|
||||
("RO_SPACE", 0x06dc9): (155, "AccessorPairMap"),
|
||||
("RO_SPACE", 0x06e19): (156, "AliasedArgumentsEntryMap"),
|
||||
("RO_SPACE", 0x06e69): (157, "AllocationMementoMap"),
|
||||
("RO_SPACE", 0x06eb9): (158, "AsyncGeneratorRequestMap"),
|
||||
("RO_SPACE", 0x06f09): (159, "DebugInfoMap"),
|
||||
("RO_SPACE", 0x06f59): (160, "FunctionTemplateInfoMap"),
|
||||
("RO_SPACE", 0x06fa9): (162, "InterpreterDataMap"),
|
||||
("RO_SPACE", 0x06ff9): (163, "ModuleInfoEntryMap"),
|
||||
("RO_SPACE", 0x07049): (164, "ModuleMap"),
|
||||
("RO_SPACE", 0x07099): (165, "ObjectTemplateInfoMap"),
|
||||
("RO_SPACE", 0x070e9): (166, "PromiseCapabilityMap"),
|
||||
("RO_SPACE", 0x07139): (167, "PromiseReactionMap"),
|
||||
("RO_SPACE", 0x07189): (168, "PrototypeInfoMap"),
|
||||
("RO_SPACE", 0x071d9): (169, "ScriptMap"),
|
||||
("RO_SPACE", 0x07229): (170, "StackFrameInfoMap"),
|
||||
("RO_SPACE", 0x07279): (172, "Tuple3Map"),
|
||||
("RO_SPACE", 0x072c9): (174, "WasmDebugInfoMap"),
|
||||
("RO_SPACE", 0x07319): (175, "WasmExportedFunctionDataMap"),
|
||||
("RO_SPACE", 0x07369): (176, "CallableTaskMap"),
|
||||
("RO_SPACE", 0x073b9): (177, "CallbackTaskMap"),
|
||||
("RO_SPACE", 0x07409): (178, "PromiseFulfillReactionJobTaskMap"),
|
||||
("RO_SPACE", 0x07459): (179, "PromiseRejectReactionJobTaskMap"),
|
||||
("RO_SPACE", 0x074a9): (180, "PromiseResolveThenableJobTaskMap"),
|
||||
("RO_SPACE", 0x074f9): (181, "MicrotaskQueueMap"),
|
||||
("RO_SPACE", 0x07549): (182, "AllocationSiteWithWeakNextMap"),
|
||||
("RO_SPACE", 0x07599): (182, "AllocationSiteWithoutWeakNextMap"),
|
||||
("RO_SPACE", 0x075e9): (213, "LoadHandler1Map"),
|
||||
("RO_SPACE", 0x07639): (213, "LoadHandler2Map"),
|
||||
("RO_SPACE", 0x07689): (213, "LoadHandler3Map"),
|
||||
("RO_SPACE", 0x076d9): (220, "StoreHandler0Map"),
|
||||
("RO_SPACE", 0x07729): (220, "StoreHandler1Map"),
|
||||
("RO_SPACE", 0x07779): (220, "StoreHandler2Map"),
|
||||
("RO_SPACE", 0x077c9): (220, "StoreHandler3Map"),
|
||||
("RO_SPACE", 0x03029): (203, "NativeContextMap"),
|
||||
("RO_SPACE", 0x03079): (202, "ModuleContextMap"),
|
||||
("RO_SPACE", 0x030c9): (200, "EvalContextMap"),
|
||||
("RO_SPACE", 0x03119): (204, "ScriptContextMap"),
|
||||
("RO_SPACE", 0x03169): (196, "AwaitContextMap"),
|
||||
("RO_SPACE", 0x031b9): (197, "BlockContextMap"),
|
||||
("RO_SPACE", 0x03209): (198, "CatchContextMap"),
|
||||
("RO_SPACE", 0x03259): (205, "WithContextMap"),
|
||||
("RO_SPACE", 0x032a9): (199, "DebugEvaluateContextMap"),
|
||||
("RO_SPACE", 0x032f9): (195, "ScriptContextTableMap"),
|
||||
("RO_SPACE", 0x03349): (151, "FeedbackMetadataArrayMap"),
|
||||
("RO_SPACE", 0x03399): (183, "ArrayListMap"),
|
||||
("RO_SPACE", 0x033e9): (130, "BigIntMap"),
|
||||
("RO_SPACE", 0x03439): (184, "ObjectBoilerplateDescriptionMap"),
|
||||
("RO_SPACE", 0x03489): (137, "BytecodeArrayMap"),
|
||||
("RO_SPACE", 0x034d9): (211, "CodeDataContainerMap"),
|
||||
("RO_SPACE", 0x03529): (150, "FixedDoubleArrayMap"),
|
||||
("RO_SPACE", 0x03579): (189, "GlobalDictionaryMap"),
|
||||
("RO_SPACE", 0x035c9): (212, "ManyClosuresCellMap"),
|
||||
("RO_SPACE", 0x03619): (183, "ModuleInfoMap"),
|
||||
("RO_SPACE", 0x03669): (134, "MutableHeapNumberMap"),
|
||||
("RO_SPACE", 0x036b9): (188, "NameDictionaryMap"),
|
||||
("RO_SPACE", 0x03709): (212, "NoClosuresCellMap"),
|
||||
("RO_SPACE", 0x03759): (190, "NumberDictionaryMap"),
|
||||
("RO_SPACE", 0x037a9): (212, "OneClosureCellMap"),
|
||||
("RO_SPACE", 0x037f9): (186, "OrderedHashMapMap"),
|
||||
("RO_SPACE", 0x03849): (187, "OrderedHashSetMap"),
|
||||
("RO_SPACE", 0x03899): (215, "PreParsedScopeDataMap"),
|
||||
("RO_SPACE", 0x038e9): (216, "PropertyArrayMap"),
|
||||
("RO_SPACE", 0x03939): (209, "SideEffectCallHandlerInfoMap"),
|
||||
("RO_SPACE", 0x03989): (209, "SideEffectFreeCallHandlerInfoMap"),
|
||||
("RO_SPACE", 0x039d9): (209, "NextCallSideEffectFreeCallHandlerInfoMap"),
|
||||
("RO_SPACE", 0x03a29): (191, "SimpleNumberDictionaryMap"),
|
||||
("RO_SPACE", 0x03a79): (183, "SloppyArgumentsElementsMap"),
|
||||
("RO_SPACE", 0x03ac9): (219, "SmallOrderedHashMapMap"),
|
||||
("RO_SPACE", 0x03b19): (220, "SmallOrderedHashSetMap"),
|
||||
("RO_SPACE", 0x03b69): (192, "StringTableMap"),
|
||||
("RO_SPACE", 0x03bb9): (222, "UncompiledDataWithoutPreParsedScopeMap"),
|
||||
("RO_SPACE", 0x03c09): (223, "UncompiledDataWithPreParsedScopeMap"),
|
||||
("RO_SPACE", 0x03c59): (224, "WeakArrayListMap"),
|
||||
("RO_SPACE", 0x03ca9): (193, "EphemeronHashTableMap"),
|
||||
("RO_SPACE", 0x03cf9): (106, "NativeSourceStringMap"),
|
||||
("RO_SPACE", 0x03d49): (64, "StringMap"),
|
||||
("RO_SPACE", 0x03d99): (73, "ConsOneByteStringMap"),
|
||||
("RO_SPACE", 0x03de9): (65, "ConsStringMap"),
|
||||
("RO_SPACE", 0x03e39): (77, "ThinOneByteStringMap"),
|
||||
("RO_SPACE", 0x03e89): (69, "ThinStringMap"),
|
||||
("RO_SPACE", 0x03ed9): (67, "SlicedStringMap"),
|
||||
("RO_SPACE", 0x03f29): (75, "SlicedOneByteStringMap"),
|
||||
("RO_SPACE", 0x03f79): (66, "ExternalStringMap"),
|
||||
("RO_SPACE", 0x03fc9): (82, "ExternalStringWithOneByteDataMap"),
|
||||
("RO_SPACE", 0x04019): (74, "ExternalOneByteStringMap"),
|
||||
("RO_SPACE", 0x04069): (98, "UncachedExternalStringMap"),
|
||||
("RO_SPACE", 0x040b9): (114, "UncachedExternalStringWithOneByteDataMap"),
|
||||
("RO_SPACE", 0x04109): (0, "InternalizedStringMap"),
|
||||
("RO_SPACE", 0x04159): (2, "ExternalInternalizedStringMap"),
|
||||
("RO_SPACE", 0x041a9): (18, "ExternalInternalizedStringWithOneByteDataMap"),
|
||||
("RO_SPACE", 0x041f9): (10, "ExternalOneByteInternalizedStringMap"),
|
||||
("RO_SPACE", 0x04249): (34, "UncachedExternalInternalizedStringMap"),
|
||||
("RO_SPACE", 0x04299): (50, "UncachedExternalInternalizedStringWithOneByteDataMap"),
|
||||
("RO_SPACE", 0x042e9): (42, "UncachedExternalOneByteInternalizedStringMap"),
|
||||
("RO_SPACE", 0x04339): (106, "UncachedExternalOneByteStringMap"),
|
||||
("RO_SPACE", 0x04389): (140, "FixedUint8ArrayMap"),
|
||||
("RO_SPACE", 0x043d9): (139, "FixedInt8ArrayMap"),
|
||||
("RO_SPACE", 0x04429): (142, "FixedUint16ArrayMap"),
|
||||
("RO_SPACE", 0x04479): (141, "FixedInt16ArrayMap"),
|
||||
("RO_SPACE", 0x044c9): (144, "FixedUint32ArrayMap"),
|
||||
("RO_SPACE", 0x04519): (143, "FixedInt32ArrayMap"),
|
||||
("RO_SPACE", 0x04569): (145, "FixedFloat32ArrayMap"),
|
||||
("RO_SPACE", 0x045b9): (146, "FixedFloat64ArrayMap"),
|
||||
("RO_SPACE", 0x04609): (147, "FixedUint8ClampedArrayMap"),
|
||||
("RO_SPACE", 0x04659): (149, "FixedBigUint64ArrayMap"),
|
||||
("RO_SPACE", 0x046a9): (148, "FixedBigInt64ArrayMap"),
|
||||
("RO_SPACE", 0x046f9): (131, "SelfReferenceMarkerMap"),
|
||||
("RO_SPACE", 0x04761): (171, "Tuple2Map"),
|
||||
("RO_SPACE", 0x04801): (173, "ArrayBoilerplateDescriptionMap"),
|
||||
("RO_SPACE", 0x04af1): (161, "InterceptorInfoMap"),
|
||||
("RO_SPACE", 0x06d79): (153, "AccessCheckInfoMap"),
|
||||
("RO_SPACE", 0x06dc9): (154, "AccessorInfoMap"),
|
||||
("RO_SPACE", 0x06e19): (155, "AccessorPairMap"),
|
||||
("RO_SPACE", 0x06e69): (156, "AliasedArgumentsEntryMap"),
|
||||
("RO_SPACE", 0x06eb9): (157, "AllocationMementoMap"),
|
||||
("RO_SPACE", 0x06f09): (158, "AsyncGeneratorRequestMap"),
|
||||
("RO_SPACE", 0x06f59): (159, "DebugInfoMap"),
|
||||
("RO_SPACE", 0x06fa9): (160, "FunctionTemplateInfoMap"),
|
||||
("RO_SPACE", 0x06ff9): (162, "InterpreterDataMap"),
|
||||
("RO_SPACE", 0x07049): (163, "ModuleInfoEntryMap"),
|
||||
("RO_SPACE", 0x07099): (164, "ModuleMap"),
|
||||
("RO_SPACE", 0x070e9): (165, "ObjectTemplateInfoMap"),
|
||||
("RO_SPACE", 0x07139): (166, "PromiseCapabilityMap"),
|
||||
("RO_SPACE", 0x07189): (167, "PromiseReactionMap"),
|
||||
("RO_SPACE", 0x071d9): (168, "PrototypeInfoMap"),
|
||||
("RO_SPACE", 0x07229): (169, "ScriptMap"),
|
||||
("RO_SPACE", 0x07279): (170, "StackFrameInfoMap"),
|
||||
("RO_SPACE", 0x072c9): (172, "Tuple3Map"),
|
||||
("RO_SPACE", 0x07319): (174, "WasmDebugInfoMap"),
|
||||
("RO_SPACE", 0x07369): (175, "WasmExportedFunctionDataMap"),
|
||||
("RO_SPACE", 0x073b9): (176, "CallableTaskMap"),
|
||||
("RO_SPACE", 0x07409): (177, "CallbackTaskMap"),
|
||||
("RO_SPACE", 0x07459): (178, "PromiseFulfillReactionJobTaskMap"),
|
||||
("RO_SPACE", 0x074a9): (179, "PromiseRejectReactionJobTaskMap"),
|
||||
("RO_SPACE", 0x074f9): (180, "PromiseResolveThenableJobTaskMap"),
|
||||
("RO_SPACE", 0x07549): (181, "MicrotaskQueueMap"),
|
||||
("RO_SPACE", 0x07599): (182, "AllocationSiteWithWeakNextMap"),
|
||||
("RO_SPACE", 0x075e9): (182, "AllocationSiteWithoutWeakNextMap"),
|
||||
("RO_SPACE", 0x07639): (214, "LoadHandler1Map"),
|
||||
("RO_SPACE", 0x07689): (214, "LoadHandler2Map"),
|
||||
("RO_SPACE", 0x076d9): (214, "LoadHandler3Map"),
|
||||
("RO_SPACE", 0x07729): (221, "StoreHandler0Map"),
|
||||
("RO_SPACE", 0x07779): (221, "StoreHandler1Map"),
|
||||
("RO_SPACE", 0x077c9): (221, "StoreHandler2Map"),
|
||||
("RO_SPACE", 0x07819): (221, "StoreHandler3Map"),
|
||||
("MAP_SPACE", 0x02201): (1057, "ExternalMap"),
|
||||
("MAP_SPACE", 0x02251): (1072, "JSMessageObjectMap"),
|
||||
}
|
||||
@ -346,25 +348,25 @@ KNOWN_OBJECTS = {
|
||||
("RO_SPACE", 0x02e41): "TerminationException",
|
||||
("RO_SPACE", 0x02ee9): "OptimizedOut",
|
||||
("RO_SPACE", 0x02f89): "StaleRegister",
|
||||
("RO_SPACE", 0x04771): "EmptyByteArray",
|
||||
("RO_SPACE", 0x04801): "EmptyFixedUint8Array",
|
||||
("RO_SPACE", 0x04821): "EmptyFixedInt8Array",
|
||||
("RO_SPACE", 0x04841): "EmptyFixedUint16Array",
|
||||
("RO_SPACE", 0x04861): "EmptyFixedInt16Array",
|
||||
("RO_SPACE", 0x04881): "EmptyFixedUint32Array",
|
||||
("RO_SPACE", 0x048a1): "EmptyFixedInt32Array",
|
||||
("RO_SPACE", 0x048c1): "EmptyFixedFloat32Array",
|
||||
("RO_SPACE", 0x048e1): "EmptyFixedFloat64Array",
|
||||
("RO_SPACE", 0x04901): "EmptyFixedUint8ClampedArray",
|
||||
("RO_SPACE", 0x04961): "EmptySloppyArgumentsElements",
|
||||
("RO_SPACE", 0x04981): "EmptySlowElementDictionary",
|
||||
("RO_SPACE", 0x049c9): "EmptyOrderedHashMap",
|
||||
("RO_SPACE", 0x049f1): "EmptyOrderedHashSet",
|
||||
("RO_SPACE", 0x04a29): "EmptyPropertyCell",
|
||||
("RO_SPACE", 0x04b09): "InfinityValue",
|
||||
("RO_SPACE", 0x04b19): "MinusZeroValue",
|
||||
("RO_SPACE", 0x04b29): "MinusInfinityValue",
|
||||
("RO_SPACE", 0x04b39): "SelfReferenceMarker",
|
||||
("RO_SPACE", 0x047c1): "EmptyByteArray",
|
||||
("RO_SPACE", 0x04851): "EmptyFixedUint8Array",
|
||||
("RO_SPACE", 0x04871): "EmptyFixedInt8Array",
|
||||
("RO_SPACE", 0x04891): "EmptyFixedUint16Array",
|
||||
("RO_SPACE", 0x048b1): "EmptyFixedInt16Array",
|
||||
("RO_SPACE", 0x048d1): "EmptyFixedUint32Array",
|
||||
("RO_SPACE", 0x048f1): "EmptyFixedInt32Array",
|
||||
("RO_SPACE", 0x04911): "EmptyFixedFloat32Array",
|
||||
("RO_SPACE", 0x04931): "EmptyFixedFloat64Array",
|
||||
("RO_SPACE", 0x04951): "EmptyFixedUint8ClampedArray",
|
||||
("RO_SPACE", 0x049b1): "EmptySloppyArgumentsElements",
|
||||
("RO_SPACE", 0x049d1): "EmptySlowElementDictionary",
|
||||
("RO_SPACE", 0x04a19): "EmptyOrderedHashMap",
|
||||
("RO_SPACE", 0x04a41): "EmptyOrderedHashSet",
|
||||
("RO_SPACE", 0x04a79): "EmptyPropertyCell",
|
||||
("RO_SPACE", 0x04b59): "InfinityValue",
|
||||
("RO_SPACE", 0x04b69): "MinusZeroValue",
|
||||
("RO_SPACE", 0x04b79): "MinusInfinityValue",
|
||||
("RO_SPACE", 0x04b89): "SelfReferenceMarker",
|
||||
("OLD_SPACE", 0x02211): "EmptyScript",
|
||||
("OLD_SPACE", 0x02291): "ManyClosuresCell",
|
||||
("OLD_SPACE", 0x022b1): "NoElementsProtector",
|
||||
|
Loading…
Reference in New Issue
Block a user