[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:
Benedikt Meurer 2018-09-27 22:11:42 +02:00 committed by Commit Bot
parent cbd906b48c
commit 9e99297e56
19 changed files with 258 additions and 278 deletions

View File

@ -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.

View File

@ -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 =

View File

@ -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));
}

View File

@ -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);

View File

@ -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());

View File

@ -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:

View File

@ -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;
}

View File

@ -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;

View File

@ -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:

View File

@ -63,6 +63,7 @@ using v8::MemoryPressureLevel;
V(ArgumentsMarkerMap) \
V(ArrayBufferNeuteringProtector) \
V(ArrayIteratorProtector) \
V(AwaitContextMap) \
V(BigIntMap) \
V(BlockContextMap) \
V(ObjectBoilerplateDescriptionMap) \

View File

@ -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)

View File

@ -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:

View File

@ -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:

View File

@ -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) \

View File

@ -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:

View File

@ -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;

View File

@ -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,

View File

@ -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) \

View File

@ -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",