Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(296)

Unified Diff: src/objects.cc

Issue 1416943005: Revert of [es6] Better support for built-ins subclassing. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index 112379eea5aa25296d7b4f191768cd89cb63caa1..a75dfc1e8413ba6ed079ecf7b51cfe187bcb811f 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -8222,24 +8222,6 @@
#ifdef VERIFY_HEAP
if (FLAG_verify_heap) result->DictionaryMapVerify();
#endif
-
- return result;
-}
-
-
-Handle<Map> Map::CopyInitialMap(Handle<Map> map, int instance_size,
- int in_object_properties,
- int unused_property_fields) {
-#ifdef DEBUG
- Object* constructor = map->GetConstructor();
- DCHECK(constructor->IsJSFunction());
- DCHECK_EQ(*map, JSFunction::cast(constructor)->initial_map());
-#endif
- Handle<Map> result = RawCopy(map, instance_size);
-
- // Please note instance_type and instance_size are set when allocated.
- result->SetInObjectProperties(in_object_properties);
- result->set_unused_property_fields(unused_property_fields);
return result;
}
@@ -11856,16 +11838,17 @@
// First create a new map with the size and number of in-object properties
// suggested by the function.
InstanceType instance_type;
+ int instance_size;
+ int in_object_properties;
if (function->shared()->is_generator()) {
instance_type = JS_GENERATOR_OBJECT_TYPE;
+ instance_size = JSGeneratorObject::kSize;
+ in_object_properties = 0;
} else {
instance_type = JS_OBJECT_TYPE;
- }
- int instance_size;
- int in_object_properties;
- function->CalculateInstanceSize(instance_type, 0, &instance_size,
- &in_object_properties);
-
+ instance_size = function->shared()->CalculateInstanceSize();
+ in_object_properties = function->shared()->CalculateInObjectProperties();
+ }
Handle<Map> map = isolate->factory()->NewMap(instance_type, instance_size);
if (function->map()->is_strong()) {
map->set_is_strong();
@@ -11888,66 +11871,6 @@
if (!function->shared()->is_generator()) {
function->StartInobjectSlackTracking();
- }
-}
-
-
-Handle<Map> JSFunction::EnsureDerivedHasInitialMap(
- Handle<JSFunction> original_constructor, Handle<JSFunction> constructor) {
- DCHECK(constructor->has_initial_map());
- Isolate* isolate = constructor->GetIsolate();
- Handle<Map> constructor_initial_map(constructor->initial_map(), isolate);
- if (*original_constructor == *constructor) return constructor_initial_map;
- if (original_constructor->has_initial_map()) {
- // Check that |original_constructor|'s initial map still in sync with
- // the |constructor|, otherwise we must create a new initial map for
- // |original_constructor|.
- if (original_constructor->initial_map()->GetConstructor() == *constructor) {
- return handle(original_constructor->initial_map(), isolate);
- }
- }
-
- // First create a new map with the size and number of in-object properties
- // suggested by the function.
- DCHECK(!original_constructor->shared()->is_generator());
- DCHECK(!constructor->shared()->is_generator());
-
- // Fetch or allocate prototype.
- Handle<Object> prototype;
- if (original_constructor->has_instance_prototype()) {
- prototype = handle(original_constructor->instance_prototype(), isolate);
- } else {
- prototype = isolate->factory()->NewFunctionPrototype(original_constructor);
- }
-
- // Finally link initial map and constructor function if the original
- // constructor is actually a subclass constructor.
- if (IsSubclassConstructor(original_constructor->shared()->kind())) {
- InstanceType instance_type = constructor_initial_map->instance_type();
- int internal_fields =
- JSObject::GetInternalFieldCount(*constructor_initial_map);
- int instance_size;
- int in_object_properties;
- original_constructor->CalculateInstanceSizeForDerivedClass(
- instance_type, internal_fields, &instance_size, &in_object_properties);
-
- Handle<Map> map =
- Map::CopyInitialMap(constructor_initial_map, instance_size,
- in_object_properties, in_object_properties);
-
- JSFunction::SetInitialMap(original_constructor, map, prototype);
- map->SetConstructor(*constructor);
- original_constructor->StartInobjectSlackTracking();
- return map;
-
- } else {
- Handle<Map> map = Map::CopyInitialMap(constructor_initial_map);
- DCHECK(prototype->IsJSReceiver());
- if (map->prototype() != *prototype) {
- Map::SetPrototype(map, prototype, FAST_PROTOTYPE);
- }
- map->SetConstructor(*constructor);
- return map;
}
}
@@ -12287,56 +12210,19 @@
}
-namespace {
-
-void CalculateInstanceSizeHelper(InstanceType instance_type,
- int requested_internal_fields,
- int requested_in_object_properties,
- int* instance_size,
- int* in_object_properties) {
- int header_size = JSObject::GetHeaderSize(instance_type);
- DCHECK_LE(requested_internal_fields,
- (JSObject::kMaxInstanceSize - header_size) >> kPointerSizeLog2);
- *instance_size =
- Min(header_size +
- ((requested_internal_fields + requested_in_object_properties)
- << kPointerSizeLog2),
- JSObject::kMaxInstanceSize);
- *in_object_properties = ((*instance_size - header_size) >> kPointerSizeLog2) -
- requested_internal_fields;
-}
-
-} // namespace
-
-
-void JSFunction::CalculateInstanceSize(InstanceType instance_type,
- int requested_internal_fields,
- int* instance_size,
- int* in_object_properties) {
- CalculateInstanceSizeHelper(instance_type, requested_internal_fields,
- shared()->expected_nof_properties(),
- instance_size, in_object_properties);
-}
-
-
-void JSFunction::CalculateInstanceSizeForDerivedClass(
- InstanceType instance_type, int requested_internal_fields,
- int* instance_size, int* in_object_properties) {
- Isolate* isolate = GetIsolate();
- int expected_nof_properties = 0;
- for (PrototypeIterator iter(isolate, this,
- PrototypeIterator::START_AT_RECEIVER);
- !iter.IsAtEnd(); iter.Advance()) {
- JSFunction* func = iter.GetCurrent<JSFunction>();
- SharedFunctionInfo* shared = func->shared();
- expected_nof_properties += shared->expected_nof_properties();
- if (!IsSubclassConstructor(shared->kind())) {
- break;
- }
- }
- CalculateInstanceSizeHelper(instance_type, requested_internal_fields,
- expected_nof_properties, instance_size,
- in_object_properties);
+int SharedFunctionInfo::CalculateInstanceSize() {
+ int instance_size =
+ JSObject::kHeaderSize +
+ expected_nof_properties() * kPointerSize;
+ if (instance_size > JSObject::kMaxInstanceSize) {
+ instance_size = JSObject::kMaxInstanceSize;
+ }
+ return instance_size;
+}
+
+
+int SharedFunctionInfo::CalculateInObjectProperties() {
+ return (CalculateInstanceSize() - JSObject::kHeaderSize) / kPointerSize;
}
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698