remove declarative accessors

R=jochen@chromium.org

BUG=

Review URL: https://codereview.chromium.org/834443004

Cr-Commit-Position: refs/heads/master@{#25981}
This commit is contained in:
dcarney 2015-01-07 08:37:26 -08:00 committed by Commit bot
parent cedc11ba59
commit a5aa01beec
16 changed files with 261 additions and 1191 deletions

View File

@ -72,7 +72,6 @@ class Context;
class CpuProfiler;
class Data;
class Date;
class DeclaredAccessorDescriptor;
class External;
class Function;
class FunctionTemplate;
@ -122,9 +121,6 @@ template<typename T> class PropertyCallbackInfo;
class StackTrace;
class StackFrame;
class Isolate;
class DeclaredAccessorDescriptor;
class ObjectOperationDescriptor;
class RawOperationDescriptor;
class CallHandlerHelper;
class EscapableHandleScope;
template<typename T> class ReturnValue;
@ -2465,12 +2461,6 @@ class V8_EXPORT Object : public Value {
AccessControl settings = DEFAULT,
PropertyAttribute attribute = None);
// This function is not yet stable and should not be used at this time.
bool SetDeclaredAccessor(Local<Name> name,
Local<DeclaredAccessorDescriptor> descriptor,
PropertyAttribute attribute = None,
AccessControl settings = DEFAULT);
void SetAccessorProperty(Local<Name> name,
Local<Function> getter,
Handle<Function> setter = Handle<Function>(),
@ -3539,14 +3529,6 @@ class V8_EXPORT Template : public Data {
Local<AccessorSignature>(),
AccessControl settings = DEFAULT);
// This function is not yet stable and should not be used at this time.
bool SetDeclaredAccessor(Local<Name> name,
Local<DeclaredAccessorDescriptor> descriptor,
PropertyAttribute attribute = None,
Local<AccessorSignature> signature =
Local<AccessorSignature>(),
AccessControl settings = DEFAULT);
private:
Template();
@ -4156,61 +4138,6 @@ class V8_EXPORT AccessorSignature : public Data {
};
class V8_EXPORT DeclaredAccessorDescriptor : public Data {
private:
DeclaredAccessorDescriptor();
};
class V8_EXPORT ObjectOperationDescriptor : public Data {
public:
// This function is not yet stable and should not be used at this time.
static Local<RawOperationDescriptor> NewInternalFieldDereference(
Isolate* isolate,
int internal_field);
private:
ObjectOperationDescriptor();
};
enum DeclaredAccessorDescriptorDataType {
kDescriptorBoolType,
kDescriptorInt8Type, kDescriptorUint8Type,
kDescriptorInt16Type, kDescriptorUint16Type,
kDescriptorInt32Type, kDescriptorUint32Type,
kDescriptorFloatType, kDescriptorDoubleType
};
class V8_EXPORT RawOperationDescriptor : public Data {
public:
Local<DeclaredAccessorDescriptor> NewHandleDereference(Isolate* isolate);
Local<RawOperationDescriptor> NewRawDereference(Isolate* isolate);
Local<RawOperationDescriptor> NewRawShift(Isolate* isolate,
int16_t byte_offset);
Local<DeclaredAccessorDescriptor> NewPointerCompare(Isolate* isolate,
void* compare_value);
Local<DeclaredAccessorDescriptor> NewPrimitiveValue(
Isolate* isolate,
DeclaredAccessorDescriptorDataType data_type,
uint8_t bool_offset = 0);
Local<DeclaredAccessorDescriptor> NewBitmaskCompare8(Isolate* isolate,
uint8_t bitmask,
uint8_t compare_value);
Local<DeclaredAccessorDescriptor> NewBitmaskCompare16(
Isolate* isolate,
uint16_t bitmask,
uint16_t compare_value);
Local<DeclaredAccessorDescriptor> NewBitmaskCompare32(
Isolate* isolate,
uint32_t bitmask,
uint32_t compare_value);
private:
RawOperationDescriptor();
};
/**
* A utility for determining the type of objects based on the template
* they were constructed from.

View File

@ -854,122 +854,6 @@ Local<AccessorSignature> AccessorSignature::New(
}
template<typename Operation>
static Local<Operation> NewDescriptor(
Isolate* isolate,
const i::DeclaredAccessorDescriptorData& data,
Data* previous_descriptor) {
i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate);
i::Handle<i::DeclaredAccessorDescriptor> previous =
i::Handle<i::DeclaredAccessorDescriptor>();
if (previous_descriptor != NULL) {
previous = Utils::OpenHandle(
static_cast<DeclaredAccessorDescriptor*>(previous_descriptor));
}
i::Handle<i::DeclaredAccessorDescriptor> descriptor =
i::DeclaredAccessorDescriptor::Create(internal_isolate, data, previous);
return Utils::Convert<i::DeclaredAccessorDescriptor, Operation>(descriptor);
}
Local<RawOperationDescriptor>
ObjectOperationDescriptor::NewInternalFieldDereference(
Isolate* isolate,
int internal_field) {
i::DeclaredAccessorDescriptorData data;
data.type = i::kDescriptorObjectDereference;
data.object_dereference_descriptor.internal_field = internal_field;
return NewDescriptor<RawOperationDescriptor>(isolate, data, NULL);
}
Local<RawOperationDescriptor> RawOperationDescriptor::NewRawShift(
Isolate* isolate,
int16_t byte_offset) {
i::DeclaredAccessorDescriptorData data;
data.type = i::kDescriptorPointerShift;
data.pointer_shift_descriptor.byte_offset = byte_offset;
return NewDescriptor<RawOperationDescriptor>(isolate, data, this);
}
Local<DeclaredAccessorDescriptor> RawOperationDescriptor::NewHandleDereference(
Isolate* isolate) {
i::DeclaredAccessorDescriptorData data;
data.type = i::kDescriptorReturnObject;
return NewDescriptor<DeclaredAccessorDescriptor>(isolate, data, this);
}
Local<RawOperationDescriptor> RawOperationDescriptor::NewRawDereference(
Isolate* isolate) {
i::DeclaredAccessorDescriptorData data;
data.type = i::kDescriptorPointerDereference;
return NewDescriptor<RawOperationDescriptor>(isolate, data, this);
}
Local<DeclaredAccessorDescriptor> RawOperationDescriptor::NewPointerCompare(
Isolate* isolate,
void* compare_value) {
i::DeclaredAccessorDescriptorData data;
data.type = i::kDescriptorPointerCompare;
data.pointer_compare_descriptor.compare_value = compare_value;
return NewDescriptor<DeclaredAccessorDescriptor>(isolate, data, this);
}
Local<DeclaredAccessorDescriptor> RawOperationDescriptor::NewPrimitiveValue(
Isolate* isolate,
DeclaredAccessorDescriptorDataType data_type,
uint8_t bool_offset) {
i::DeclaredAccessorDescriptorData data;
data.type = i::kDescriptorPrimitiveValue;
data.primitive_value_descriptor.data_type = data_type;
data.primitive_value_descriptor.bool_offset = bool_offset;
return NewDescriptor<DeclaredAccessorDescriptor>(isolate, data, this);
}
template<typename T>
static Local<DeclaredAccessorDescriptor> NewBitmaskCompare(
Isolate* isolate,
T bitmask,
T compare_value,
RawOperationDescriptor* operation) {
i::DeclaredAccessorDescriptorData data;
data.type = i::kDescriptorBitmaskCompare;
data.bitmask_compare_descriptor.bitmask = bitmask;
data.bitmask_compare_descriptor.compare_value = compare_value;
data.bitmask_compare_descriptor.size = sizeof(T);
return NewDescriptor<DeclaredAccessorDescriptor>(isolate, data, operation);
}
Local<DeclaredAccessorDescriptor> RawOperationDescriptor::NewBitmaskCompare8(
Isolate* isolate,
uint8_t bitmask,
uint8_t compare_value) {
return NewBitmaskCompare(isolate, bitmask, compare_value, this);
}
Local<DeclaredAccessorDescriptor> RawOperationDescriptor::NewBitmaskCompare16(
Isolate* isolate,
uint16_t bitmask,
uint16_t compare_value) {
return NewBitmaskCompare(isolate, bitmask, compare_value, this);
}
Local<DeclaredAccessorDescriptor> RawOperationDescriptor::NewBitmaskCompare32(
Isolate* isolate,
uint32_t bitmask,
uint32_t compare_value) {
return NewBitmaskCompare(isolate, bitmask, compare_value, this);
}
Local<TypeSwitch> TypeSwitch::New(Handle<FunctionTemplate> type) {
Handle<FunctionTemplate> types[1] = { type };
return TypeSwitch::New(1, types);
@ -1068,23 +952,6 @@ static i::Handle<i::AccessorInfo> MakeAccessorInfo(
}
static i::Handle<i::AccessorInfo> MakeAccessorInfo(
v8::Handle<Name> name,
v8::Handle<v8::DeclaredAccessorDescriptor> descriptor,
void* setter_ignored,
void* data_ignored,
v8::AccessControl settings,
v8::PropertyAttribute attributes,
v8::Handle<AccessorSignature> signature) {
i::Isolate* isolate = Utils::OpenHandle(*name)->GetIsolate();
if (descriptor.IsEmpty()) return i::Handle<i::DeclaredAccessorInfo>();
i::Handle<i::DeclaredAccessorInfo> obj =
isolate->factory()->NewDeclaredAccessorInfo();
obj->set_descriptor(*Utils::OpenHandle(*descriptor));
return SetAccessorInfoProperties(obj, name, settings, attributes, signature);
}
Local<ObjectTemplate> FunctionTemplate::InstanceTemplate() {
i::Handle<i::FunctionTemplateInfo> handle = Utils::OpenHandle(this, true);
if (!Utils::ApiCheck(!handle.is_null(),
@ -1244,18 +1111,6 @@ static bool TemplateSetAccessor(
}
bool Template::SetDeclaredAccessor(
Local<Name> name,
Local<DeclaredAccessorDescriptor> descriptor,
PropertyAttribute attribute,
Local<AccessorSignature> signature,
AccessControl settings) {
void* null = NULL;
return TemplateSetAccessor(
this, name, descriptor, null, null, settings, attribute, signature);
}
void Template::SetNativeDataProperty(v8::Local<String> name,
AccessorGetterCallback getter,
AccessorSetterCallback setter,
@ -3631,16 +3486,6 @@ bool Object::SetAccessor(Handle<Name> name,
}
bool Object::SetDeclaredAccessor(Local<Name> name,
Local<DeclaredAccessorDescriptor> descriptor,
PropertyAttribute attributes,
AccessControl settings) {
void* null = NULL;
return ObjectSetAccessor(
this, name, descriptor, null, null, settings, attributes);
}
void Object::SetAccessorProperty(Local<Name> name,
Local<Function> getter,
Handle<Function> setter,

View File

@ -135,43 +135,41 @@ class RegisteredExtension {
};
#define OPEN_HANDLE_LIST(V) \
V(Template, TemplateInfo) \
V(FunctionTemplate, FunctionTemplateInfo) \
V(ObjectTemplate, ObjectTemplateInfo) \
V(Signature, SignatureInfo) \
V(AccessorSignature, FunctionTemplateInfo) \
V(TypeSwitch, TypeSwitchInfo) \
V(Data, Object) \
V(RegExp, JSRegExp) \
V(Object, JSObject) \
V(Array, JSArray) \
V(ArrayBuffer, JSArrayBuffer) \
V(ArrayBufferView, JSArrayBufferView) \
V(TypedArray, JSTypedArray) \
V(Uint8Array, JSTypedArray) \
V(Uint8ClampedArray, JSTypedArray) \
V(Int8Array, JSTypedArray) \
V(Uint16Array, JSTypedArray) \
V(Int16Array, JSTypedArray) \
V(Uint32Array, JSTypedArray) \
V(Int32Array, JSTypedArray) \
V(Float32Array, JSTypedArray) \
V(Float64Array, JSTypedArray) \
V(DataView, JSDataView) \
V(Name, Name) \
V(String, String) \
V(Symbol, Symbol) \
V(Script, JSFunction) \
V(UnboundScript, SharedFunctionInfo) \
V(Function, JSFunction) \
V(Message, JSMessageObject) \
V(Context, Context) \
V(External, Object) \
V(StackTrace, JSArray) \
V(StackFrame, JSObject) \
V(DeclaredAccessorDescriptor, DeclaredAccessorDescriptor)
#define OPEN_HANDLE_LIST(V) \
V(Template, TemplateInfo) \
V(FunctionTemplate, FunctionTemplateInfo) \
V(ObjectTemplate, ObjectTemplateInfo) \
V(Signature, SignatureInfo) \
V(AccessorSignature, FunctionTemplateInfo) \
V(TypeSwitch, TypeSwitchInfo) \
V(Data, Object) \
V(RegExp, JSRegExp) \
V(Object, JSObject) \
V(Array, JSArray) \
V(ArrayBuffer, JSArrayBuffer) \
V(ArrayBufferView, JSArrayBufferView) \
V(TypedArray, JSTypedArray) \
V(Uint8Array, JSTypedArray) \
V(Uint8ClampedArray, JSTypedArray) \
V(Int8Array, JSTypedArray) \
V(Uint16Array, JSTypedArray) \
V(Int16Array, JSTypedArray) \
V(Uint32Array, JSTypedArray) \
V(Int32Array, JSTypedArray) \
V(Float32Array, JSTypedArray) \
V(Float64Array, JSTypedArray) \
V(DataView, JSDataView) \
V(Name, Name) \
V(String, String) \
V(Symbol, Symbol) \
V(Script, JSFunction) \
V(UnboundScript, SharedFunctionInfo) \
V(Function, JSFunction) \
V(Message, JSMessageObject) \
V(Context, Context) \
V(External, Object) \
V(StackTrace, JSArray) \
V(StackFrame, JSObject)
class Utils {
public:
@ -257,8 +255,6 @@ class Utils {
v8::internal::Handle<v8::internal::TypeSwitchInfo> obj);
static inline Local<External> ExternalToLocal(
v8::internal::Handle<v8::internal::JSObject> obj);
static inline Local<DeclaredAccessorDescriptor> ToLocal(
v8::internal::Handle<v8::internal::DeclaredAccessorDescriptor> obj);
#define DECLARE_OPEN_HANDLE(From, To) \
static inline v8::internal::Handle<v8::internal::To> \
@ -365,7 +361,6 @@ MAKE_TO_LOCAL(NumberToLocal, Object, Number)
MAKE_TO_LOCAL(IntegerToLocal, Object, Integer)
MAKE_TO_LOCAL(Uint32ToLocal, Object, Uint32)
MAKE_TO_LOCAL(ExternalToLocal, JSObject, External)
MAKE_TO_LOCAL(ToLocal, DeclaredAccessorDescriptor, DeclaredAccessorDescriptor)
#undef MAKE_TO_LOCAL_TYPED_ARRAY
#undef MAKE_TO_LOCAL

View File

@ -816,21 +816,6 @@ Handle<AliasedArgumentsEntry> Factory::NewAliasedArgumentsEntry(
}
Handle<DeclaredAccessorDescriptor> Factory::NewDeclaredAccessorDescriptor() {
return Handle<DeclaredAccessorDescriptor>::cast(
NewStruct(DECLARED_ACCESSOR_DESCRIPTOR_TYPE));
}
Handle<DeclaredAccessorInfo> Factory::NewDeclaredAccessorInfo() {
Handle<DeclaredAccessorInfo> info =
Handle<DeclaredAccessorInfo>::cast(
NewStruct(DECLARED_ACCESSOR_INFO_TYPE));
info->set_flag(0); // Must clear the flag, it was initialized as undefined.
return info;
}
Handle<ExecutableAccessorInfo> Factory::NewExecutableAccessorInfo() {
Handle<ExecutableAccessorInfo> info =
Handle<ExecutableAccessorInfo>::cast(

View File

@ -264,10 +264,6 @@ class Factory FINAL {
Handle<AliasedArgumentsEntry> NewAliasedArgumentsEntry(
int aliased_context_slot);
Handle<DeclaredAccessorDescriptor> NewDeclaredAccessorDescriptor();
Handle<DeclaredAccessorInfo> NewDeclaredAccessorInfo();
Handle<ExecutableAccessorInfo> NewExecutableAccessorInfo();
Handle<Script> NewScript(Handle<String> source);

View File

@ -1422,13 +1422,7 @@ void V8HeapExplorer::ExtractAccessorInfoReferences(
SetInternalReference(accessor_info, entry, "expected_receiver_type",
accessor_info->expected_receiver_type(),
AccessorInfo::kExpectedReceiverTypeOffset);
if (accessor_info->IsDeclaredAccessorInfo()) {
DeclaredAccessorInfo* declared_accessor_info =
DeclaredAccessorInfo::cast(accessor_info);
SetInternalReference(declared_accessor_info, entry, "descriptor",
declared_accessor_info->descriptor(),
DeclaredAccessorInfo::kDescriptorOffset);
} else if (accessor_info->IsExecutableAccessorInfo()) {
if (accessor_info->IsExecutableAccessorInfo()) {
ExecutableAccessorInfo* executable_accessor_info =
ExecutableAccessorInfo::cast(accessor_info);
SetInternalReference(executable_accessor_info, entry, "getter",

View File

@ -1223,8 +1223,6 @@ Handle<Code> LoadIC::CompileHandler(LookupIterator* lookup,
}
return compiler.CompileLoadViaGetter(lookup->name(), function);
}
// TODO(dcarney): Handle correctly.
DCHECK(accessors->IsDeclaredAccessorInfo());
break;
}
@ -1732,9 +1730,6 @@ Handle<Code> StoreIC::CompileHandler(LookupIterator* lookup,
return compiler.CompileStoreViaSetter(receiver, lookup->name(),
Handle<JSFunction>::cast(setter));
}
// TODO(dcarney): Handle correctly.
DCHECK(accessors->IsDeclaredAccessorInfo());
TRACE_GENERIC_IC(isolate(), "StoreIC", "declared accessor info");
break;
}

View File

@ -118,8 +118,7 @@ void LookupIterator::PrepareTransitionToDataProperty(
Handle<Object> value, PropertyAttributes attributes,
Object::StoreFromKeyed store_mode) {
if (state_ == TRANSITION) return;
DCHECK(state_ != LookupIterator::ACCESSOR ||
GetAccessors()->IsDeclaredAccessorInfo());
DCHECK(state_ != LookupIterator::ACCESSOR);
DCHECK(state_ == NOT_FOUND || !HolderIsReceiverOrHiddenPrototype());
// Can only be called when the receiver is a JSObject. JSProxy has to be

View File

@ -894,19 +894,6 @@ void ExecutableAccessorInfo::ExecutableAccessorInfoVerify() {
}
void DeclaredAccessorDescriptor::DeclaredAccessorDescriptorVerify() {
CHECK(IsDeclaredAccessorDescriptor());
VerifyPointer(serialized_data());
}
void DeclaredAccessorInfo::DeclaredAccessorInfoVerify() {
CHECK(IsDeclaredAccessorInfo());
AccessorInfoVerify();
VerifyPointer(descriptor());
}
void AccessorPair::AccessorPairVerify() {
CHECK(IsAccessorPair());
VerifyPointer(getter());

View File

@ -161,9 +161,7 @@ bool Object::IsExternal() const {
}
bool Object::IsAccessorInfo() const {
return IsExecutableAccessorInfo() || IsDeclaredAccessorInfo();
}
bool Object::IsAccessorInfo() const { return IsExecutableAccessorInfo(); }
bool Object::IsSmi() const {
@ -5489,12 +5487,6 @@ ACCESSORS_TO_SMI(AccessorInfo, flag, kFlagOffset)
ACCESSORS(AccessorInfo, expected_receiver_type, Object,
kExpectedReceiverTypeOffset)
ACCESSORS(DeclaredAccessorDescriptor, serialized_data, ByteArray,
kSerializedDataOffset)
ACCESSORS(DeclaredAccessorInfo, descriptor, DeclaredAccessorDescriptor,
kDescriptorOffset)
ACCESSORS(ExecutableAccessorInfo, getter, Object, kGetterOffset)
ACCESSORS(ExecutableAccessorInfo, setter, Object, kSetterOffset)
ACCESSORS(ExecutableAccessorInfo, data, Object, kDataOffset)

View File

@ -863,24 +863,6 @@ void ExecutableAccessorInfo::ExecutableAccessorInfoPrint(
}
void DeclaredAccessorInfo::DeclaredAccessorInfoPrint(
std::ostream& os) { // NOLINT
HeapObject::PrintHeader(os, "DeclaredAccessorInfo");
os << "\n - name: " << Brief(name());
os << "\n - flag: " << Brief(flag());
os << "\n - descriptor: " << Brief(descriptor());
os << "\n";
}
void DeclaredAccessorDescriptor::DeclaredAccessorDescriptorPrint(
std::ostream& os) { // NOLINT
HeapObject::PrintHeader(os, "DeclaredAccessorDescriptor");
os << "\n - internal field: " << Brief(serialized_data());
os << "\n";
}
void Box::BoxPrint(std::ostream& os) { // NOLINT
HeapObject::PrintHeader(os, "Box");
os << "\n - value: " << Brief(value());

View File

@ -234,154 +234,6 @@ bool FunctionTemplateInfo::IsTemplateFor(Map* map) {
}
template<typename To>
static inline To* CheckedCast(void *from) {
uintptr_t temp = reinterpret_cast<uintptr_t>(from);
DCHECK(temp % sizeof(To) == 0);
return reinterpret_cast<To*>(temp);
}
static Handle<Object> PerformCompare(const BitmaskCompareDescriptor& descriptor,
char* ptr,
Isolate* isolate) {
uint32_t bitmask = descriptor.bitmask;
uint32_t compare_value = descriptor.compare_value;
uint32_t value;
switch (descriptor.size) {
case 1:
value = static_cast<uint32_t>(*CheckedCast<uint8_t>(ptr));
compare_value &= 0xff;
bitmask &= 0xff;
break;
case 2:
value = static_cast<uint32_t>(*CheckedCast<uint16_t>(ptr));
compare_value &= 0xffff;
bitmask &= 0xffff;
break;
case 4:
value = *CheckedCast<uint32_t>(ptr);
break;
default:
UNREACHABLE();
return isolate->factory()->undefined_value();
}
return isolate->factory()->ToBoolean(
(bitmask & value) == (bitmask & compare_value));
}
static Handle<Object> PerformCompare(const PointerCompareDescriptor& descriptor,
char* ptr,
Isolate* isolate) {
uintptr_t compare_value =
reinterpret_cast<uintptr_t>(descriptor.compare_value);
uintptr_t value = *CheckedCast<uintptr_t>(ptr);
return isolate->factory()->ToBoolean(compare_value == value);
}
static Handle<Object> GetPrimitiveValue(
const PrimitiveValueDescriptor& descriptor,
char* ptr,
Isolate* isolate) {
int32_t int32_value = 0;
switch (descriptor.data_type) {
case kDescriptorInt8Type:
int32_value = *CheckedCast<int8_t>(ptr);
break;
case kDescriptorUint8Type:
int32_value = *CheckedCast<uint8_t>(ptr);
break;
case kDescriptorInt16Type:
int32_value = *CheckedCast<int16_t>(ptr);
break;
case kDescriptorUint16Type:
int32_value = *CheckedCast<uint16_t>(ptr);
break;
case kDescriptorInt32Type:
int32_value = *CheckedCast<int32_t>(ptr);
break;
case kDescriptorUint32Type: {
uint32_t value = *CheckedCast<uint32_t>(ptr);
AllowHeapAllocation allow_gc;
return isolate->factory()->NewNumberFromUint(value);
}
case kDescriptorBoolType: {
uint8_t byte = *CheckedCast<uint8_t>(ptr);
return isolate->factory()->ToBoolean(
byte & (0x1 << descriptor.bool_offset));
}
case kDescriptorFloatType: {
float value = *CheckedCast<float>(ptr);
AllowHeapAllocation allow_gc;
return isolate->factory()->NewNumber(value);
}
case kDescriptorDoubleType: {
double value = *CheckedCast<double>(ptr);
AllowHeapAllocation allow_gc;
return isolate->factory()->NewNumber(value);
}
}
AllowHeapAllocation allow_gc;
return isolate->factory()->NewNumberFromInt(int32_value);
}
static Handle<Object> GetDeclaredAccessorProperty(
Handle<Object> receiver,
Handle<DeclaredAccessorInfo> info,
Isolate* isolate) {
DisallowHeapAllocation no_gc;
char* current = reinterpret_cast<char*>(*receiver);
DeclaredAccessorDescriptorIterator iterator(info->descriptor());
while (true) {
const DeclaredAccessorDescriptorData* data = iterator.Next();
switch (data->type) {
case kDescriptorReturnObject: {
DCHECK(iterator.Complete());
current = *CheckedCast<char*>(current);
return handle(*CheckedCast<Object*>(current), isolate);
}
case kDescriptorPointerDereference:
DCHECK(!iterator.Complete());
current = *reinterpret_cast<char**>(current);
break;
case kDescriptorPointerShift:
DCHECK(!iterator.Complete());
current += data->pointer_shift_descriptor.byte_offset;
break;
case kDescriptorObjectDereference: {
DCHECK(!iterator.Complete());
Object* object = CheckedCast<Object>(current);
int field = data->object_dereference_descriptor.internal_field;
Object* smi = JSObject::cast(object)->GetInternalField(field);
DCHECK(smi->IsSmi());
current = reinterpret_cast<char*>(smi);
break;
}
case kDescriptorBitmaskCompare:
DCHECK(iterator.Complete());
return PerformCompare(data->bitmask_compare_descriptor,
current,
isolate);
case kDescriptorPointerCompare:
DCHECK(iterator.Complete());
return PerformCompare(data->pointer_compare_descriptor,
current,
isolate);
case kDescriptorPrimitiveValue:
DCHECK(iterator.Complete());
return GetPrimitiveValue(data->primitive_value_descriptor,
current,
isolate);
}
}
UNREACHABLE();
return isolate->factory()->undefined_value();
}
Handle<FixedArray> JSObject::EnsureWritableFastElements(
Handle<JSObject> object) {
DCHECK(object->HasFastSmiOrObjectElements());
@ -426,12 +278,6 @@ MaybeHandle<Object> Object::GetPropertyWithAccessor(Handle<Object> receiver,
HandleVector(args, arraysize(args))),
Object);
}
if (structure->IsDeclaredAccessorInfo()) {
return GetDeclaredAccessorProperty(
receiver,
Handle<DeclaredAccessorInfo>::cast(structure),
isolate);
}
Handle<ExecutableAccessorInfo> data =
Handle<ExecutableAccessorInfo>::cast(structure);
@ -525,11 +371,6 @@ MaybeHandle<Object> Object::SetPropertyWithAccessor(
}
}
// TODO(dcarney): Handle correctly.
if (structure->IsDeclaredAccessorInfo()) {
return value;
}
UNREACHABLE();
return MaybeHandle<Object>();
}
@ -3002,14 +2843,9 @@ MaybeHandle<Object> Object::SetProperty(LookupIterator* it,
if (it->property_details().IsReadOnly()) {
return WriteToReadOnlyProperty(it, value, strict_mode);
}
if (it->HolderIsReceiverOrHiddenPrototype() ||
!it->GetAccessors()->IsDeclaredAccessorInfo()) {
return SetPropertyWithAccessor(it->GetReceiver(), it->name(), value,
it->GetHolder<JSObject>(),
it->GetAccessors(), strict_mode);
}
done = true;
break;
return SetPropertyWithAccessor(it->GetReceiver(), it->name(), value,
it->GetHolder<JSObject>(),
it->GetAccessors(), strict_mode);
case LookupIterator::DATA:
if (it->property_details().IsReadOnly()) {
@ -12362,11 +12198,6 @@ MaybeHandle<Object> JSObject::GetElementWithCallback(
return isolate->factory()->undefined_value();
}
if (structure->IsDeclaredAccessorInfo()) {
return GetDeclaredAccessorProperty(
receiver, Handle<DeclaredAccessorInfo>::cast(structure), isolate);
}
UNREACHABLE();
return MaybeHandle<Object>();
}
@ -12417,9 +12248,6 @@ MaybeHandle<Object> JSObject::SetElementWithCallback(
}
}
// TODO(dcarney): Handle correctly.
if (structure->IsDeclaredAccessorInfo()) return value;
UNREACHABLE();
return MaybeHandle<Object>();
}
@ -16476,58 +16304,6 @@ template void
OrderedHashTableIterator<JSMapIterator, OrderedHashMap>::Transition();
DeclaredAccessorDescriptorIterator::DeclaredAccessorDescriptorIterator(
DeclaredAccessorDescriptor* descriptor)
: array_(descriptor->serialized_data()->GetDataStartAddress()),
length_(descriptor->serialized_data()->length()),
offset_(0) {
}
const DeclaredAccessorDescriptorData*
DeclaredAccessorDescriptorIterator::Next() {
DCHECK(offset_ < length_);
uint8_t* ptr = &array_[offset_];
DCHECK(reinterpret_cast<uintptr_t>(ptr) % sizeof(uintptr_t) == 0);
const DeclaredAccessorDescriptorData* data =
reinterpret_cast<const DeclaredAccessorDescriptorData*>(ptr);
offset_ += sizeof(*data);
DCHECK(offset_ <= length_);
return data;
}
Handle<DeclaredAccessorDescriptor> DeclaredAccessorDescriptor::Create(
Isolate* isolate,
const DeclaredAccessorDescriptorData& descriptor,
Handle<DeclaredAccessorDescriptor> previous) {
int previous_length =
previous.is_null() ? 0 : previous->serialized_data()->length();
int length = sizeof(descriptor) + previous_length;
Handle<ByteArray> serialized_descriptor =
isolate->factory()->NewByteArray(length);
Handle<DeclaredAccessorDescriptor> value =
isolate->factory()->NewDeclaredAccessorDescriptor();
value->set_serialized_data(*serialized_descriptor);
// Copy in the data.
{
DisallowHeapAllocation no_allocation;
uint8_t* array = serialized_descriptor->GetDataStartAddress();
if (previous_length != 0) {
uint8_t* previous_array =
previous->serialized_data()->GetDataStartAddress();
MemCopy(array, previous_array, previous_length);
array += previous_length;
}
DCHECK(reinterpret_cast<uintptr_t>(array) % sizeof(uintptr_t) == 0);
DeclaredAccessorDescriptorData* data =
reinterpret_cast<DeclaredAccessorDescriptorData*>(array);
*data = descriptor;
}
return value;
}
// Check if there is a break point at this code position.
bool DebugInfo::HasBreakPoint(int code_position) {
// Get the break point info object for this code position.

View File

@ -128,9 +128,7 @@
// - SharedFunctionInfo
// - Struct
// - Box
// - DeclaredAccessorDescriptor
// - AccessorInfo
// - DeclaredAccessorInfo
// - ExecutableAccessorInfo
// - AccessorPair
// - AccessCheckInfo
@ -520,10 +518,6 @@ const int kStubMinorKeyBits = kSmiValueSize - kStubMajorKeyBits - 1;
// manually.
#define STRUCT_LIST(V) \
V(BOX, Box, box) \
V(DECLARED_ACCESSOR_DESCRIPTOR, \
DeclaredAccessorDescriptor, \
declared_accessor_descriptor) \
V(DECLARED_ACCESSOR_INFO, DeclaredAccessorInfo, declared_accessor_info) \
V(EXECUTABLE_ACCESSOR_INFO, ExecutableAccessorInfo, executable_accessor_info)\
V(ACCESSOR_PAIR, AccessorPair, accessor_pair) \
V(ACCESS_CHECK_INFO, AccessCheckInfo, access_check_info) \
@ -10405,115 +10399,6 @@ class AccessorInfo: public Struct {
};
enum AccessorDescriptorType {
kDescriptorBitmaskCompare,
kDescriptorPointerCompare,
kDescriptorPrimitiveValue,
kDescriptorObjectDereference,
kDescriptorPointerDereference,
kDescriptorPointerShift,
kDescriptorReturnObject
};
struct BitmaskCompareDescriptor {
uint32_t bitmask;
uint32_t compare_value;
uint8_t size; // Must be in {1,2,4}.
};
struct PointerCompareDescriptor {
void* compare_value;
};
struct PrimitiveValueDescriptor {
v8::DeclaredAccessorDescriptorDataType data_type;
uint8_t bool_offset; // Must be in [0,7], used for kDescriptorBoolType.
};
struct ObjectDerefenceDescriptor {
uint8_t internal_field;
};
struct PointerShiftDescriptor {
int16_t byte_offset;
};
struct DeclaredAccessorDescriptorData {
AccessorDescriptorType type;
union {
struct BitmaskCompareDescriptor bitmask_compare_descriptor;
struct PointerCompareDescriptor pointer_compare_descriptor;
struct PrimitiveValueDescriptor primitive_value_descriptor;
struct ObjectDerefenceDescriptor object_dereference_descriptor;
struct PointerShiftDescriptor pointer_shift_descriptor;
};
};
class DeclaredAccessorDescriptor;
class DeclaredAccessorDescriptorIterator {
public:
explicit DeclaredAccessorDescriptorIterator(
DeclaredAccessorDescriptor* descriptor);
const DeclaredAccessorDescriptorData* Next();
bool Complete() const { return length_ == offset_; }
private:
uint8_t* array_;
const int length_;
int offset_;
DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorDescriptorIterator);
};
class DeclaredAccessorDescriptor: public Struct {
public:
DECL_ACCESSORS(serialized_data, ByteArray)
DECLARE_CAST(DeclaredAccessorDescriptor)
static Handle<DeclaredAccessorDescriptor> Create(
Isolate* isolate,
const DeclaredAccessorDescriptorData& data,
Handle<DeclaredAccessorDescriptor> previous);
// Dispatched behavior.
DECLARE_PRINTER(DeclaredAccessorDescriptor)
DECLARE_VERIFIER(DeclaredAccessorDescriptor)
static const int kSerializedDataOffset = HeapObject::kHeaderSize;
static const int kSize = kSerializedDataOffset + kPointerSize;
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorDescriptor);
};
class DeclaredAccessorInfo: public AccessorInfo {
public:
DECL_ACCESSORS(descriptor, DeclaredAccessorDescriptor)
DECLARE_CAST(DeclaredAccessorInfo)
// Dispatched behavior.
DECLARE_PRINTER(DeclaredAccessorInfo)
DECLARE_VERIFIER(DeclaredAccessorInfo)
static const int kDescriptorOffset = AccessorInfo::kSize;
static const int kSize = kDescriptorOffset + kPointerSize;
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorInfo);
};
// An accessor must have a getter, but can have no setter.
//
// When setting a property, V8 searches accessors in prototypes.

View File

@ -113,7 +113,6 @@
'test-cpu-profiler.cc',
'test-date.cc',
'test-debug.cc',
'test-declarative-accessors.cc',
'test-decls.cc',
'test-deoptimization.cc',
'test-dictionary.cc',

View File

@ -1,302 +0,0 @@
// Copyright 2013 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <stdlib.h>
#include "src/v8.h"
#include "test/cctest/cctest.h"
using namespace v8::internal;
class HandleArray : public Malloced {
public:
static const unsigned kArraySize = 200;
HandleArray() {}
~HandleArray() { Reset(); }
void Reset() {
for (unsigned i = 0; i < kArraySize; i++) {
if (handles_[i].IsEmpty()) continue;
handles_[i].Reset();
}
}
v8::Persistent<v8::Value> handles_[kArraySize];
private:
DISALLOW_COPY_AND_ASSIGN(HandleArray);
};
// An aligned character array of size 1024.
class AlignedArray : public Malloced {
public:
static const unsigned kArraySize = 1024/sizeof(uint64_t);
AlignedArray() { Reset(); }
void Reset() {
for (unsigned i = 0; i < kArraySize; i++) {
data_[i] = 0;
}
}
template<typename T>
T As() { return reinterpret_cast<T>(data_); }
private:
uint64_t data_[kArraySize];
DISALLOW_COPY_AND_ASSIGN(AlignedArray);
};
class DescriptorTestHelper {
public:
DescriptorTestHelper() :
isolate_(NULL), array_(new AlignedArray), handle_array_(new HandleArray) {
v8::V8::Initialize();
isolate_ = CcTest::isolate();
}
v8::Isolate* isolate_;
// Data objects.
SmartPointer<AlignedArray> array_;
SmartPointer<HandleArray> handle_array_;
private:
DISALLOW_COPY_AND_ASSIGN(DescriptorTestHelper);
};
static v8::Local<v8::ObjectTemplate> CreateConstructor(
v8::Handle<v8::Context> context,
const char* class_name,
int internal_field,
const char* descriptor_name = NULL,
v8::Handle<v8::DeclaredAccessorDescriptor> descriptor =
v8::Handle<v8::DeclaredAccessorDescriptor>()) {
v8::Local<v8::FunctionTemplate> constructor =
v8::FunctionTemplate::New(context->GetIsolate());
v8::Local<v8::ObjectTemplate> obj_template = constructor->InstanceTemplate();
// Setup object template.
if (descriptor_name != NULL && !descriptor.IsEmpty()) {
bool added_accessor =
obj_template->SetDeclaredAccessor(v8_str(descriptor_name), descriptor);
CHECK(added_accessor);
}
obj_template->SetInternalFieldCount((internal_field+1)*2 + 7);
context->Global()->Set(v8_str(class_name), constructor->GetFunction());
return obj_template;
}
static void VerifyRead(v8::Handle<v8::DeclaredAccessorDescriptor> descriptor,
int internal_field,
void* internal_object,
v8::Handle<v8::Value> expected_value) {
LocalContext local_context;
v8::HandleScope scope(local_context->GetIsolate());
v8::Handle<v8::Context> context = local_context.local();
CreateConstructor(context, "Accessible", internal_field, "x", descriptor);
// Setup object.
CompileRun("var accessible = new Accessible();");
v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(
context->Global()->Get(v8_str("accessible")));
obj->SetAlignedPointerInInternalField(internal_field, internal_object);
bool added_accessor;
added_accessor = obj->SetDeclaredAccessor(v8_str("y"), descriptor);
CHECK(added_accessor);
added_accessor = obj->SetDeclaredAccessor(v8_str("13"), descriptor);
CHECK(added_accessor);
// Test access from template getter.
v8::Local<v8::Value> value;
value = CompileRun("accessible.x;");
CHECK_EQ(expected_value, value);
value = CompileRun("accessible['x'];");
CHECK_EQ(expected_value, value);
// Test access from object getter.
value = CompileRun("accessible.y;");
CHECK_EQ(expected_value, value);
value = CompileRun("accessible['y'];");
CHECK_EQ(expected_value, value);
value = CompileRun("accessible[13];");
CHECK_EQ(expected_value, value);
value = CompileRun("accessible['13'];");
CHECK_EQ(expected_value, value);
}
static v8::Handle<v8::Value> Convert(int32_t value, v8::Isolate* isolate) {
return v8::Integer::New(isolate, value);
}
static v8::Handle<v8::Value> Convert(float value, v8::Isolate* isolate) {
return v8::Number::New(isolate, value);
}
static v8::Handle<v8::Value> Convert(double value, v8::Isolate* isolate) {
return v8::Number::New(isolate, value);
}
typedef v8::ObjectOperationDescriptor OOD;
template<typename T>
static void TestPrimitiveValue(
T value,
v8::DeclaredAccessorDescriptorDataType data_type,
DescriptorTestHelper* helper) {
v8::HandleScope handle_scope(helper->isolate_);
int index = 17;
int internal_field = 6;
v8::Handle<v8::DeclaredAccessorDescriptor> descriptor =
OOD::NewInternalFieldDereference(helper->isolate_, internal_field)
->NewRawShift(helper->isolate_, static_cast<uint16_t>(index*sizeof(T)))
->NewPrimitiveValue(helper->isolate_, data_type, 0);
v8::Handle<v8::Value> expected = Convert(value, helper->isolate_);
helper->array_->Reset();
helper->array_->As<T*>()[index] = value;
VerifyRead(descriptor, internal_field, helper->array_.get(), expected);
}
TEST(PrimitiveValueRead) {
DescriptorTestHelper helper;
TestPrimitiveValue<int32_t>(203, v8::kDescriptorInt32Type, &helper);
TestPrimitiveValue<float>(23.7f, v8::kDescriptorFloatType, &helper);
TestPrimitiveValue<double>(23.7, v8::kDescriptorDoubleType, &helper);
}
template<typename T>
static void TestBitmaskCompare(T bitmask,
T compare_value,
DescriptorTestHelper* helper) {
v8::HandleScope handle_scope(helper->isolate_);
int index = 13;
int internal_field = 4;
v8::Handle<v8::RawOperationDescriptor> raw_descriptor =
OOD::NewInternalFieldDereference(helper->isolate_, internal_field)
->NewRawShift(helper->isolate_, static_cast<uint16_t>(index*sizeof(T)));
v8::Handle<v8::DeclaredAccessorDescriptor> descriptor;
switch (sizeof(T)) {
case 1:
descriptor = raw_descriptor->NewBitmaskCompare8(
helper->isolate_,
static_cast<uint8_t>(bitmask),
static_cast<uint8_t>(compare_value));
break;
case 2:
descriptor = raw_descriptor->NewBitmaskCompare16(
helper->isolate_,
static_cast<uint16_t>(bitmask),
static_cast<uint16_t>(compare_value));
break;
case 4:
descriptor = raw_descriptor->NewBitmaskCompare32(
helper->isolate_,
static_cast<uint32_t>(bitmask),
static_cast<uint32_t>(compare_value));
break;
default:
CHECK(false);
break;
}
AlignedArray* array = helper->array_.get();
array->Reset();
VerifyRead(descriptor, internal_field, array, v8::False(helper->isolate_));
array->As<T*>()[index] = compare_value;
VerifyRead(descriptor, internal_field, array, v8::True(helper->isolate_));
helper->array_->As<T*>()[index] = compare_value & bitmask;
VerifyRead(descriptor, internal_field, array, v8::True(helper->isolate_));
}
TEST(BitmaskCompareRead) {
DescriptorTestHelper helper;
TestBitmaskCompare<uint8_t>(0xf3, 0xa8, &helper);
TestBitmaskCompare<uint16_t>(0xfefe, 0x7d42, &helper);
TestBitmaskCompare<uint32_t>(0xfefeab18, 0x1234fdec, &helper);
}
TEST(PointerCompareRead) {
DescriptorTestHelper helper;
v8::HandleScope handle_scope(helper.isolate_);
int index = 35;
int internal_field = 3;
void* ptr = helper.isolate_;
v8::Handle<v8::DeclaredAccessorDescriptor> descriptor =
OOD::NewInternalFieldDereference(helper.isolate_, internal_field)
->NewRawShift(helper.isolate_, static_cast<uint16_t>(index*sizeof(ptr)))
->NewPointerCompare(helper.isolate_, ptr);
AlignedArray* array = helper.array_.get();
VerifyRead(descriptor, internal_field, array, v8::False(helper.isolate_));
array->As<uintptr_t*>()[index] = reinterpret_cast<uintptr_t>(ptr);
VerifyRead(descriptor, internal_field, array, v8::True(helper.isolate_));
}
TEST(PointerDereferenceRead) {
DescriptorTestHelper helper;
v8::HandleScope handle_scope(helper.isolate_);
int first_index = 13;
int internal_field = 7;
int second_index = 11;
int pointed_to_index = 75;
uint16_t expected = 0x1425;
v8::Handle<v8::DeclaredAccessorDescriptor> descriptor =
OOD::NewInternalFieldDereference(helper.isolate_, internal_field)
->NewRawShift(helper.isolate_, first_index*kPointerSize)
->NewRawDereference(helper.isolate_)
->NewRawShift(helper.isolate_,
static_cast<uint16_t>(second_index*sizeof(int16_t)))
->NewPrimitiveValue(helper.isolate_, v8::kDescriptorInt16Type, 0);
AlignedArray* array = helper.array_.get();
array->As<uintptr_t**>()[first_index] =
&array->As<uintptr_t*>()[pointed_to_index];
VerifyRead(descriptor, internal_field, array,
v8::Integer::New(helper.isolate_, 0));
second_index += pointed_to_index*sizeof(uintptr_t)/sizeof(uint16_t);
array->As<uint16_t*>()[second_index] = expected;
VerifyRead(descriptor, internal_field, array,
v8::Integer::New(helper.isolate_, expected));
}
TEST(HandleDereferenceRead) {
DescriptorTestHelper helper;
v8::HandleScope handle_scope(helper.isolate_);
int index = 13;
int internal_field = 0;
v8::Handle<v8::DeclaredAccessorDescriptor> descriptor =
OOD::NewInternalFieldDereference(helper.isolate_, internal_field)
->NewRawShift(helper.isolate_, index*kPointerSize)
->NewHandleDereference(helper.isolate_);
HandleArray* array = helper.handle_array_.get();
v8::Handle<v8::String> expected = v8_str("whatever");
array->handles_[index].Reset(helper.isolate_, expected);
VerifyRead(descriptor, internal_field, array, expected);
}

View File

@ -44,8 +44,6 @@ INSTANCE_TYPES = {
90: "SHORT_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE",
0: "INTERNALIZED_STRING_TYPE",
4: "ONE_BYTE_INTERNALIZED_STRING_TYPE",
1: "CONS_INTERNALIZED_STRING_TYPE",
5: "CONS_ONE_BYTE_INTERNALIZED_STRING_TYPE",
2: "EXTERNAL_INTERNALIZED_STRING_TYPE",
6: "EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE",
10: "EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE",
@ -59,172 +57,185 @@ INSTANCE_TYPES = {
132: "CELL_TYPE",
133: "PROPERTY_CELL_TYPE",
134: "HEAP_NUMBER_TYPE",
135: "FOREIGN_TYPE",
136: "BYTE_ARRAY_TYPE",
137: "FREE_SPACE_TYPE",
138: "EXTERNAL_INT8_ARRAY_TYPE",
139: "EXTERNAL_UINT8_ARRAY_TYPE",
140: "EXTERNAL_INT16_ARRAY_TYPE",
141: "EXTERNAL_UINT16_ARRAY_TYPE",
142: "EXTERNAL_INT32_ARRAY_TYPE",
143: "EXTERNAL_UINT32_ARRAY_TYPE",
144: "EXTERNAL_FLOAT32_ARRAY_TYPE",
145: "EXTERNAL_FLOAT64_ARRAY_TYPE",
146: "EXTERNAL_UINT8_CLAMPED_ARRAY_TYPE",
147: "FIXED_INT8_ARRAY_TYPE",
148: "FIXED_UINT8_ARRAY_TYPE",
149: "FIXED_INT16_ARRAY_TYPE",
150: "FIXED_UINT16_ARRAY_TYPE",
151: "FIXED_INT32_ARRAY_TYPE",
152: "FIXED_UINT32_ARRAY_TYPE",
153: "FIXED_FLOAT32_ARRAY_TYPE",
154: "FIXED_FLOAT64_ARRAY_TYPE",
155: "FIXED_UINT8_CLAMPED_ARRAY_TYPE",
157: "FILLER_TYPE",
158: "DECLARED_ACCESSOR_DESCRIPTOR_TYPE",
159: "DECLARED_ACCESSOR_INFO_TYPE",
160: "EXECUTABLE_ACCESSOR_INFO_TYPE",
161: "ACCESSOR_PAIR_TYPE",
162: "ACCESS_CHECK_INFO_TYPE",
163: "INTERCEPTOR_INFO_TYPE",
164: "CALL_HANDLER_INFO_TYPE",
165: "FUNCTION_TEMPLATE_INFO_TYPE",
166: "OBJECT_TEMPLATE_INFO_TYPE",
167: "SIGNATURE_INFO_TYPE",
168: "TYPE_SWITCH_INFO_TYPE",
170: "ALLOCATION_MEMENTO_TYPE",
169: "ALLOCATION_SITE_TYPE",
171: "SCRIPT_TYPE",
172: "CODE_CACHE_TYPE",
173: "POLYMORPHIC_CODE_CACHE_TYPE",
174: "TYPE_FEEDBACK_INFO_TYPE",
175: "ALIASED_ARGUMENTS_ENTRY_TYPE",
176: "BOX_TYPE",
179: "FIXED_ARRAY_TYPE",
156: "FIXED_DOUBLE_ARRAY_TYPE",
180: "CONSTANT_POOL_ARRAY_TYPE",
181: "SHARED_FUNCTION_INFO_TYPE",
182: "JS_MESSAGE_OBJECT_TYPE",
185: "JS_VALUE_TYPE",
186: "JS_DATE_TYPE",
187: "JS_OBJECT_TYPE",
188: "JS_CONTEXT_EXTENSION_OBJECT_TYPE",
189: "JS_GENERATOR_OBJECT_TYPE",
190: "JS_MODULE_TYPE",
191: "JS_GLOBAL_OBJECT_TYPE",
192: "JS_BUILTINS_OBJECT_TYPE",
193: "JS_GLOBAL_PROXY_TYPE",
194: "JS_ARRAY_TYPE",
195: "JS_ARRAY_BUFFER_TYPE",
196: "JS_TYPED_ARRAY_TYPE",
197: "JS_DATA_VIEW_TYPE",
184: "JS_PROXY_TYPE",
198: "JS_SET_TYPE",
199: "JS_MAP_TYPE",
200: "JS_WEAK_MAP_TYPE",
201: "JS_WEAK_SET_TYPE",
202: "JS_REGEXP_TYPE",
203: "JS_FUNCTION_TYPE",
183: "JS_FUNCTION_PROXY_TYPE",
177: "DEBUG_INFO_TYPE",
178: "BREAK_POINT_INFO_TYPE",
135: "MUTABLE_HEAP_NUMBER_TYPE",
136: "FOREIGN_TYPE",
137: "BYTE_ARRAY_TYPE",
138: "FREE_SPACE_TYPE",
139: "EXTERNAL_INT8_ARRAY_TYPE",
140: "EXTERNAL_UINT8_ARRAY_TYPE",
141: "EXTERNAL_INT16_ARRAY_TYPE",
142: "EXTERNAL_UINT16_ARRAY_TYPE",
143: "EXTERNAL_INT32_ARRAY_TYPE",
144: "EXTERNAL_UINT32_ARRAY_TYPE",
145: "EXTERNAL_FLOAT32_ARRAY_TYPE",
146: "EXTERNAL_FLOAT64_ARRAY_TYPE",
147: "EXTERNAL_UINT8_CLAMPED_ARRAY_TYPE",
148: "FIXED_INT8_ARRAY_TYPE",
149: "FIXED_UINT8_ARRAY_TYPE",
150: "FIXED_INT16_ARRAY_TYPE",
151: "FIXED_UINT16_ARRAY_TYPE",
152: "FIXED_INT32_ARRAY_TYPE",
153: "FIXED_UINT32_ARRAY_TYPE",
154: "FIXED_FLOAT32_ARRAY_TYPE",
155: "FIXED_FLOAT64_ARRAY_TYPE",
156: "FIXED_UINT8_CLAMPED_ARRAY_TYPE",
158: "FILLER_TYPE",
159: "DECLARED_ACCESSOR_DESCRIPTOR_TYPE",
160: "DECLARED_ACCESSOR_INFO_TYPE",
161: "EXECUTABLE_ACCESSOR_INFO_TYPE",
162: "ACCESSOR_PAIR_TYPE",
163: "ACCESS_CHECK_INFO_TYPE",
164: "INTERCEPTOR_INFO_TYPE",
165: "CALL_HANDLER_INFO_TYPE",
166: "FUNCTION_TEMPLATE_INFO_TYPE",
167: "OBJECT_TEMPLATE_INFO_TYPE",
168: "SIGNATURE_INFO_TYPE",
169: "TYPE_SWITCH_INFO_TYPE",
171: "ALLOCATION_MEMENTO_TYPE",
170: "ALLOCATION_SITE_TYPE",
172: "SCRIPT_TYPE",
173: "CODE_CACHE_TYPE",
174: "POLYMORPHIC_CODE_CACHE_TYPE",
175: "TYPE_FEEDBACK_INFO_TYPE",
176: "ALIASED_ARGUMENTS_ENTRY_TYPE",
177: "BOX_TYPE",
180: "FIXED_ARRAY_TYPE",
157: "FIXED_DOUBLE_ARRAY_TYPE",
181: "CONSTANT_POOL_ARRAY_TYPE",
182: "SHARED_FUNCTION_INFO_TYPE",
183: "WEAK_CELL_TYPE",
187: "JS_MESSAGE_OBJECT_TYPE",
186: "JS_VALUE_TYPE",
188: "JS_DATE_TYPE",
189: "JS_OBJECT_TYPE",
190: "JS_CONTEXT_EXTENSION_OBJECT_TYPE",
191: "JS_GENERATOR_OBJECT_TYPE",
192: "JS_MODULE_TYPE",
193: "JS_GLOBAL_OBJECT_TYPE",
194: "JS_BUILTINS_OBJECT_TYPE",
195: "JS_GLOBAL_PROXY_TYPE",
196: "JS_ARRAY_TYPE",
197: "JS_ARRAY_BUFFER_TYPE",
198: "JS_TYPED_ARRAY_TYPE",
199: "JS_DATA_VIEW_TYPE",
185: "JS_PROXY_TYPE",
200: "JS_SET_TYPE",
201: "JS_MAP_TYPE",
202: "JS_SET_ITERATOR_TYPE",
203: "JS_MAP_ITERATOR_TYPE",
204: "JS_WEAK_MAP_TYPE",
205: "JS_WEAK_SET_TYPE",
206: "JS_REGEXP_TYPE",
207: "JS_FUNCTION_TYPE",
184: "JS_FUNCTION_PROXY_TYPE",
178: "DEBUG_INFO_TYPE",
179: "BREAK_POINT_INFO_TYPE",
}
# List of known V8 maps.
KNOWN_MAPS = {
0x08081: (136, "ByteArrayMap"),
0x08081: (137, "ByteArrayMap"),
0x080a9: (129, "MetaMap"),
0x080d1: (131, "OddballMap"),
0x080f9: (4, "OneByteInternalizedStringMap"),
0x08121: (179, "FixedArrayMap"),
0x08149: (134, "HeapNumberMap"),
0x08171: (137, "FreeSpaceMap"),
0x08199: (157, "OnePointerFillerMap"),
0x081c1: (157, "TwoPointerFillerMap"),
0x081e9: (132, "CellMap"),
0x08211: (133, "GlobalPropertyCellMap"),
0x08239: (181, "SharedFunctionInfoMap"),
0x08261: (179, "NativeContextMap"),
0x08289: (130, "CodeMap"),
0x082b1: (179, "ScopeInfoMap"),
0x082d9: (179, "FixedCOWArrayMap"),
0x08301: (156, "FixedDoubleArrayMap"),
0x08329: (180, "ConstantPoolArrayMap"),
0x08351: (179, "HashTableMap"),
0x08379: (128, "SymbolMap"),
0x083a1: (64, "StringMap"),
0x083c9: (68, "OneByteStringMap"),
0x083f1: (65, "ConsStringMap"),
0x08419: (69, "ConsOneByteStringMap"),
0x08441: (67, "SlicedStringMap"),
0x08469: (71, "SlicedOneByteStringMap"),
0x08491: (66, "ExternalStringMap"),
0x084b9: (74, "ExternalStringWithOneByteDataMap"),
0x084e1: (70, "ExternalOneByteStringMap"),
0x08509: (82, "ShortExternalStringMap"),
0x08531: (90, "ShortExternalStringWithOneByteDataMap"),
0x08559: (0, "InternalizedStringMap"),
0x08581: (1, "ConsInternalizedStringMap"),
0x085a9: (5, "ConsOneByteInternalizedStringMap"),
0x085d1: (2, "ExternalInternalizedStringMap"),
0x085f9: (10, "ExternalInternalizedStringWithOneByteDataMap"),
0x08621: (6, "ExternalOneByteInternalizedStringMap"),
0x08649: (18, "ShortExternalInternalizedStringMap"),
0x08671: (26, "ShortExternalInternalizedStringWithOneByteDataMap"),
0x08699: (22, "ShortExternalOneByteInternalizedStringMap"),
0x086c1: (86, "ShortExternalOneByteStringMap"),
0x086e9: (64, "UndetectableStringMap"),
0x08711: (68, "UndetectableOneByteStringMap"),
0x08739: (138, "ExternalInt8ArrayMap"),
0x08761: (139, "ExternalUint8ArrayMap"),
0x08789: (140, "ExternalInt16ArrayMap"),
0x087b1: (141, "ExternalUint16ArrayMap"),
0x087d9: (142, "ExternalInt32ArrayMap"),
0x08801: (143, "ExternalUint32ArrayMap"),
0x08829: (144, "ExternalFloat32ArrayMap"),
0x08851: (145, "ExternalFloat64ArrayMap"),
0x08879: (146, "ExternalUint8ClampedArrayMap"),
0x088a1: (148, "FixedUint8ArrayMap"),
0x088c9: (147, "FixedInt8ArrayMap"),
0x088f1: (150, "FixedUint16ArrayMap"),
0x08919: (149, "FixedInt16ArrayMap"),
0x08941: (152, "FixedUint32ArrayMap"),
0x08969: (151, "FixedInt32ArrayMap"),
0x08991: (153, "FixedFloat32ArrayMap"),
0x089b9: (154, "FixedFloat64ArrayMap"),
0x089e1: (155, "FixedUint8ClampedArrayMap"),
0x08a09: (179, "NonStrictArgumentsElementsMap"),
0x08a31: (179, "FunctionContextMap"),
0x08a59: (179, "CatchContextMap"),
0x08a81: (179, "WithContextMap"),
0x08aa9: (179, "BlockContextMap"),
0x08ad1: (179, "ModuleContextMap"),
0x08af9: (179, "GlobalContextMap"),
0x08b21: (182, "JSMessageObjectMap"),
0x08b49: (135, "ForeignMap"),
0x08b71: (187, "NeanderMap"),
0x08b99: (170, "AllocationMementoMap"),
0x08bc1: (169, "AllocationSiteMap"),
0x08be9: (173, "PolymorphicCodeCacheMap"),
0x08c11: (171, "ScriptMap"),
0x08c61: (187, "ExternalMap"),
0x08cb1: (176, "BoxMap"),
0x08cd9: (158, "DeclaredAccessorDescriptorMap"),
0x08d01: (159, "DeclaredAccessorInfoMap"),
0x08d29: (160, "ExecutableAccessorInfoMap"),
0x08d51: (161, "AccessorPairMap"),
0x08d79: (162, "AccessCheckInfoMap"),
0x08da1: (163, "InterceptorInfoMap"),
0x08dc9: (164, "CallHandlerInfoMap"),
0x08df1: (165, "FunctionTemplateInfoMap"),
0x08e19: (166, "ObjectTemplateInfoMap"),
0x08e41: (167, "SignatureInfoMap"),
0x08e69: (168, "TypeSwitchInfoMap"),
0x08e91: (172, "CodeCacheMap"),
0x08eb9: (174, "TypeFeedbackInfoMap"),
0x08ee1: (175, "AliasedArgumentsEntryMap"),
0x08f09: (177, "DebugInfoMap"),
0x08f31: (178, "BreakPointInfoMap"),
0x080d1: (131, "NullMap"),
0x080f9: (131, "UndefinedMap"),
0x08121: (180, "FixedArrayMap"),
0x08149: (4, "OneByteInternalizedStringMap"),
0x08171: (134, "HeapNumberMap"),
0x08199: (138, "FreeSpaceMap"),
0x081c1: (158, "OnePointerFillerMap"),
0x081e9: (158, "TwoPointerFillerMap"),
0x08211: (131, "TheHoleMap"),
0x08239: (131, "BooleanMap"),
0x08261: (131, "UninitializedMap"),
0x08289: (131, "ExceptionMap"),
0x082b1: (132, "CellMap"),
0x082d9: (133, "GlobalPropertyCellMap"),
0x08301: (182, "SharedFunctionInfoMap"),
0x08329: (135, "MutableHeapNumberMap"),
0x08351: (180, "NativeContextMap"),
0x08379: (130, "CodeMap"),
0x083a1: (180, "ScopeInfoMap"),
0x083c9: (180, "FixedCOWArrayMap"),
0x083f1: (157, "FixedDoubleArrayMap"),
0x08419: (181, "ConstantPoolArrayMap"),
0x08441: (183, "WeakCellMap"),
0x08469: (131, "NoInterceptorResultSentinelMap"),
0x08491: (180, "HashTableMap"),
0x084b9: (180, "OrderedHashTableMap"),
0x084e1: (131, "ArgumentsMarkerMap"),
0x08509: (131, "TerminationExceptionMap"),
0x08531: (128, "SymbolMap"),
0x08559: (64, "StringMap"),
0x08581: (68, "OneByteStringMap"),
0x085a9: (65, "ConsStringMap"),
0x085d1: (69, "ConsOneByteStringMap"),
0x085f9: (67, "SlicedStringMap"),
0x08621: (71, "SlicedOneByteStringMap"),
0x08649: (66, "ExternalStringMap"),
0x08671: (74, "ExternalStringWithOneByteDataMap"),
0x08699: (70, "ExternalOneByteStringMap"),
0x086c1: (70, "NativeSourceStringMap"),
0x086e9: (82, "ShortExternalStringMap"),
0x08711: (90, "ShortExternalStringWithOneByteDataMap"),
0x08739: (0, "InternalizedStringMap"),
0x08761: (2, "ExternalInternalizedStringMap"),
0x08789: (10, "ExternalInternalizedStringWithOneByteDataMap"),
0x087b1: (6, "ExternalOneByteInternalizedStringMap"),
0x087d9: (18, "ShortExternalInternalizedStringMap"),
0x08801: (26, "ShortExternalInternalizedStringWithOneByteDataMap"),
0x08829: (22, "ShortExternalOneByteInternalizedStringMap"),
0x08851: (86, "ShortExternalOneByteStringMap"),
0x08879: (64, "UndetectableStringMap"),
0x088a1: (68, "UndetectableOneByteStringMap"),
0x088c9: (139, "ExternalInt8ArrayMap"),
0x088f1: (140, "ExternalUint8ArrayMap"),
0x08919: (141, "ExternalInt16ArrayMap"),
0x08941: (142, "ExternalUint16ArrayMap"),
0x08969: (143, "ExternalInt32ArrayMap"),
0x08991: (144, "ExternalUint32ArrayMap"),
0x089b9: (145, "ExternalFloat32ArrayMap"),
0x089e1: (146, "ExternalFloat64ArrayMap"),
0x08a09: (147, "ExternalUint8ClampedArrayMap"),
0x08a31: (149, "FixedUint8ArrayMap"),
0x08a59: (148, "FixedInt8ArrayMap"),
0x08a81: (151, "FixedUint16ArrayMap"),
0x08aa9: (150, "FixedInt16ArrayMap"),
0x08ad1: (153, "FixedUint32ArrayMap"),
0x08af9: (152, "FixedInt32ArrayMap"),
0x08b21: (154, "FixedFloat32ArrayMap"),
0x08b49: (155, "FixedFloat64ArrayMap"),
0x08b71: (156, "FixedUint8ClampedArrayMap"),
0x08b99: (180, "SloppyArgumentsElementsMap"),
0x08bc1: (180, "FunctionContextMap"),
0x08be9: (180, "CatchContextMap"),
0x08c11: (180, "WithContextMap"),
0x08c39: (180, "BlockContextMap"),
0x08c61: (180, "ModuleContextMap"),
0x08c89: (180, "ScriptContextMap"),
0x08cb1: (180, "ScriptContextTableMap"),
0x08cd9: (187, "JSMessageObjectMap"),
0x08d01: (136, "ForeignMap"),
0x08d29: (189, "NeanderMap"),
0x08d51: (170, "AllocationSiteMap"),
0x08d79: (171, "AllocationMementoMap"),
0x08da1: (174, "PolymorphicCodeCacheMap"),
0x08dc9: (172, "ScriptMap"),
0x08e19: (189, "ExternalMap"),
0x08f59: (177, "BoxMap"),
0x08f81: (161, "ExecutableAccessorInfoMap"),
0x08fa9: (162, "AccessorPairMap"),
0x08fd1: (163, "AccessCheckInfoMap"),
0x08ff9: (164, "InterceptorInfoMap"),
0x09021: (165, "CallHandlerInfoMap"),
0x09049: (166, "FunctionTemplateInfoMap"),
0x09071: (167, "ObjectTemplateInfoMap"),
0x09099: (168, "SignatureInfoMap"),
0x090c1: (169, "TypeSwitchInfoMap"),
0x090e9: (173, "CodeCacheMap"),
0x09111: (175, "TypeFeedbackInfoMap"),
0x09139: (176, "AliasedArgumentsEntryMap"),
0x09161: (178, "DebugInfoMap"),
0x09189: (179, "BreakPointInfoMap"),
}
# List of known V8 objects.
@ -235,47 +246,51 @@ KNOWN_OBJECTS = {
("OLD_POINTER_SPACE", 0x080b1): "TrueValue",
("OLD_POINTER_SPACE", 0x080c1): "FalseValue",
("OLD_POINTER_SPACE", 0x080d1): "UninitializedValue",
("OLD_POINTER_SPACE", 0x080e1): "NoInterceptorResultSentinel",
("OLD_POINTER_SPACE", 0x080f1): "ArgumentsMarker",
("OLD_POINTER_SPACE", 0x08101): "NumberStringCache",
("OLD_POINTER_SPACE", 0x08909): "SingleCharacterStringCache",
("OLD_POINTER_SPACE", 0x08d11): "StringSplitCache",
("OLD_POINTER_SPACE", 0x09119): "RegExpMultipleCache",
("OLD_POINTER_SPACE", 0x09521): "TerminationException",
("OLD_POINTER_SPACE", 0x09531): "MessageListeners",
("OLD_POINTER_SPACE", 0x0954d): "CodeStubs",
("OLD_POINTER_SPACE", 0x0ca65): "MegamorphicSymbol",
("OLD_POINTER_SPACE", 0x0ca75): "UninitializedSymbol",
("OLD_POINTER_SPACE", 0x10ae9): "NonMonomorphicCache",
("OLD_POINTER_SPACE", 0x110fd): "PolymorphicCodeCache",
("OLD_POINTER_SPACE", 0x11105): "NativesSourceCache",
("OLD_POINTER_SPACE", 0x11155): "EmptyScript",
("OLD_POINTER_SPACE", 0x11189): "IntrinsicFunctionNames",
("OLD_POINTER_SPACE", 0x141a5): "ObservationState",
("OLD_POINTER_SPACE", 0x141b1): "FrozenSymbol",
("OLD_POINTER_SPACE", 0x141c1): "NonExistentSymbol",
("OLD_POINTER_SPACE", 0x141d1): "ElementsTransitionSymbol",
("OLD_POINTER_SPACE", 0x141e1): "EmptySlowElementDictionary",
("OLD_POINTER_SPACE", 0x1437d): "ObservedSymbol",
("OLD_POINTER_SPACE", 0x1438d): "AllocationSitesScratchpad",
("OLD_POINTER_SPACE", 0x14795): "MicrotaskState",
("OLD_POINTER_SPACE", 0x36241): "StringTable",
("OLD_DATA_SPACE", 0x08099): "EmptyDescriptorArray",
("OLD_DATA_SPACE", 0x080a1): "EmptyFixedArray",
("OLD_POINTER_SPACE", 0x080e1): "Exception",
("OLD_POINTER_SPACE", 0x080f1): "NoInterceptorResultSentinel",
("OLD_POINTER_SPACE", 0x08101): "ArgumentsMarker",
("OLD_POINTER_SPACE", 0x08111): "NumberStringCache",
("OLD_POINTER_SPACE", 0x08919): "SingleCharacterStringCache",
("OLD_POINTER_SPACE", 0x08d21): "StringSplitCache",
("OLD_POINTER_SPACE", 0x09129): "RegExpMultipleCache",
("OLD_POINTER_SPACE", 0x09531): "TerminationException",
("OLD_POINTER_SPACE", 0x09541): "MessageListeners",
("OLD_POINTER_SPACE", 0x0955d): "CodeStubs",
("OLD_POINTER_SPACE", 0x10f91): "NonMonomorphicCache",
("OLD_POINTER_SPACE", 0x115a5): "PolymorphicCodeCache",
("OLD_POINTER_SPACE", 0x115ad): "NativesSourceCache",
("OLD_POINTER_SPACE", 0x11621): "EmptyScript",
("OLD_POINTER_SPACE", 0x1165d): "IntrinsicFunctionNames",
("OLD_POINTER_SPACE", 0x17679): "ObservationState",
("OLD_POINTER_SPACE", 0x17685): "SymbolRegistry",
("OLD_POINTER_SPACE", 0x18041): "EmptySlowElementDictionary",
("OLD_POINTER_SPACE", 0x181dd): "AllocationSitesScratchpad",
("OLD_POINTER_SPACE", 0x4559d): "StringTable",
("OLD_DATA_SPACE", 0x08081): "EmptyDescriptorArray",
("OLD_DATA_SPACE", 0x08089): "EmptyFixedArray",
("OLD_DATA_SPACE", 0x080a9): "NanValue",
("OLD_DATA_SPACE", 0x08141): "EmptyByteArray",
("OLD_DATA_SPACE", 0x08149): "EmptyConstantPoolArray",
("OLD_DATA_SPACE", 0x0828d): "EmptyExternalInt8Array",
("OLD_DATA_SPACE", 0x08299): "EmptyExternalUint8Array",
("OLD_DATA_SPACE", 0x082a5): "EmptyExternalInt16Array",
("OLD_DATA_SPACE", 0x082b1): "EmptyExternalUint16Array",
("OLD_DATA_SPACE", 0x082bd): "EmptyExternalInt32Array",
("OLD_DATA_SPACE", 0x082c9): "EmptyExternalUint32Array",
("OLD_DATA_SPACE", 0x082d5): "EmptyExternalFloat32Array",
("OLD_DATA_SPACE", 0x082e1): "EmptyExternalFloat64Array",
("OLD_DATA_SPACE", 0x082ed): "EmptyExternalUint8ClampedArray",
("OLD_DATA_SPACE", 0x082f9): "InfinityValue",
("OLD_DATA_SPACE", 0x08305): "MinusZeroValue",
("CODE_SPACE", 0x138e1): "JsConstructEntryCode",
("CODE_SPACE", 0x21361): "JsEntryCode",
("OLD_DATA_SPACE", 0x08159): "EmptyByteArray",
("OLD_DATA_SPACE", 0x08161): "EmptyConstantPoolArray",
("OLD_DATA_SPACE", 0x08241): "EmptyExternalInt8Array",
("OLD_DATA_SPACE", 0x0824d): "EmptyExternalUint8Array",
("OLD_DATA_SPACE", 0x08259): "EmptyExternalInt16Array",
("OLD_DATA_SPACE", 0x08265): "EmptyExternalUint16Array",
("OLD_DATA_SPACE", 0x08271): "EmptyExternalInt32Array",
("OLD_DATA_SPACE", 0x0827d): "EmptyExternalUint32Array",
("OLD_DATA_SPACE", 0x08289): "EmptyExternalFloat32Array",
("OLD_DATA_SPACE", 0x08295): "EmptyExternalFloat64Array",
("OLD_DATA_SPACE", 0x082a1): "EmptyExternalUint8ClampedArray",
("OLD_DATA_SPACE", 0x082ad): "EmptyFixedUint8Array",
("OLD_DATA_SPACE", 0x082b5): "EmptyFixedInt8Array",
("OLD_DATA_SPACE", 0x082bd): "EmptyFixedUint16Array",
("OLD_DATA_SPACE", 0x082c5): "EmptyFixedInt16Array",
("OLD_DATA_SPACE", 0x082cd): "EmptyFixedUint32Array",
("OLD_DATA_SPACE", 0x082d5): "EmptyFixedInt32Array",
("OLD_DATA_SPACE", 0x082dd): "EmptyFixedFloat32Array",
("OLD_DATA_SPACE", 0x082e5): "EmptyFixedFloat64Array",
("OLD_DATA_SPACE", 0x082ed): "EmptyFixedUint8ClampedArray",
("OLD_DATA_SPACE", 0x082f5): "InfinityValue",
("OLD_DATA_SPACE", 0x08301): "MinusZeroValue",
("CODE_SPACE", 0x136a1): "JsConstructEntryCode",
("CODE_SPACE", 0x2c421): "JsEntryCode",
}