Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 3bda179712b010834977212ceffa36772927a94a..4918ff7fd5b73ff592abdca4a72e40344b9587ea 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -2125,8 +2125,10 @@ void WeakCell::clear_next(Heap* heap) { |
bool WeakCell::next_cleared() { return next()->IsTheHole(); } |
-int JSObject::GetHeaderSize() { |
- InstanceType type = map()->instance_type(); |
+int JSObject::GetHeaderSize() { return GetHeaderSize(map()->instance_type()); } |
+ |
+ |
+int JSObject::GetHeaderSize(InstanceType type) { |
// Check for the most common kind of JavaScript object before |
// falling into the generic switch. This speeds up the internal |
// field operations considerably on average. |
@@ -2183,10 +2185,64 @@ int JSObject::GetHeaderSize() { |
} |
+int JSObject::GetHeaderWithInternalFieldsSize(InstanceType type) { |
+ // Check for the most common kind of JavaScript object before |
+ // falling into the generic switch. This speeds up the internal |
+ // field operations considerably on average. |
+ if (type == JS_OBJECT_TYPE) return JSObject::kHeaderSize; |
+ switch (type) { |
+ case JS_GENERATOR_OBJECT_TYPE: |
+ return JSGeneratorObject::kSize; |
+ case JS_MODULE_TYPE: |
+ return JSModule::kSize; |
+ case JS_GLOBAL_PROXY_TYPE: |
+ return JSGlobalProxy::kSize; |
+ case JS_GLOBAL_OBJECT_TYPE: |
+ return JSGlobalObject::kSize; |
+ case JS_BUILTINS_OBJECT_TYPE: |
+ return JSBuiltinsObject::kSize; |
+ case JS_FUNCTION_TYPE: |
+ return JSFunction::kSize; |
+ case JS_VALUE_TYPE: |
+ return JSValue::kSize; |
+ case JS_DATE_TYPE: |
+ return JSDate::kSize; |
+ case JS_ARRAY_TYPE: |
+ return JSArray::kSize; |
+ case JS_ARRAY_BUFFER_TYPE: |
+ return JSArrayBuffer::kSizeWithInternalFields; |
+ case JS_TYPED_ARRAY_TYPE: |
+ return JSTypedArray::kSizeWithInternalFields; |
+ case JS_DATA_VIEW_TYPE: |
+ return JSDataView::kSizeWithInternalFields; |
+ case JS_SET_TYPE: |
+ return JSSet::kSize; |
+ case JS_MAP_TYPE: |
+ return JSMap::kSize; |
+ case JS_SET_ITERATOR_TYPE: |
+ return JSSetIterator::kSize; |
+ case JS_MAP_ITERATOR_TYPE: |
+ return JSMapIterator::kSize; |
+ case JS_ITERATOR_RESULT_TYPE: |
+ return JSIteratorResult::kSize; |
+ case JS_WEAK_MAP_TYPE: |
+ return JSWeakMap::kSize; |
+ case JS_WEAK_SET_TYPE: |
+ return JSWeakSet::kSize; |
+ case JS_REGEXP_TYPE: |
+ return JSRegExp::kSize; |
+ case JS_CONTEXT_EXTENSION_OBJECT_TYPE: |
+ return JSObject::kHeaderSize; |
+ case JS_MESSAGE_OBJECT_TYPE: |
+ return JSMessageObject::kSize; |
+ default: |
+ UNREACHABLE(); |
+ return 0; |
+ } |
+} |
+ |
+ |
int JSObject::GetInternalFieldCount() { |
- DCHECK(1 << kPointerSizeLog2 == kPointerSize); |
- // Make sure to adjust for the number of in-object properties. These |
- // properties do contribute to the size, but are not internal fields. |
return ((Size() - GetHeaderSize()) >> kPointerSizeLog2) - |
map()->GetInObjectProperties(); |
} |