@@ -13056,14 +13056,19 @@ MaybeHandle<Map> JSFunction::GetDerivedMap(Isolate* isolate,
1305613056 constructor_initial_map->unused_property_fields();
1305713057 int instance_size;
1305813058 int in_object_properties;
13059- CalculateInstanceSizeForDerivedClass(function, instance_type,
13060- embedder_fields, &instance_size,
13061- &in_object_properties);
13059+ bool success = CalculateInstanceSizeForDerivedClass(
13060+ function, instance_type, embedder_fields, &instance_size,
13061+ &in_object_properties);
1306213062
1306313063 int unused_property_fields = in_object_properties - pre_allocated;
13064- Handle<Map> map =
13065- Map::CopyInitialMap(constructor_initial_map, instance_size,
13066- in_object_properties, unused_property_fields);
13064+
13065+ Handle<Map> map;
13066+ if (success) {
13067+ map = Map::CopyInitialMap(constructor_initial_map, instance_size,
13068+ in_object_properties, unused_property_fields);
13069+ } else {
13070+ map = Map::CopyInitialMap(constructor_initial_map);
13071+ }
1306713072 map->set_new_target_is_base(false);
1306813073
1306913074 JSFunction::SetInitialMap(function, map, prototype);
@@ -13789,12 +13794,14 @@ void JSFunction::CalculateInstanceSizeHelper(InstanceType instance_type,
1378913794 requested_embedder_fields;
1379013795}
1379113796
13792- void JSFunction::CalculateInstanceSizeForDerivedClass(
13797+ // static
13798+ bool JSFunction::CalculateInstanceSizeForDerivedClass(
1379313799 Handle<JSFunction> function, InstanceType instance_type,
1379413800 int requested_embedder_fields, int* instance_size,
1379513801 int* in_object_properties) {
1379613802 Isolate* isolate = function->GetIsolate();
1379713803 int expected_nof_properties = 0;
13804+ bool result = true;
1379813805 for (PrototypeIterator iter(isolate, function, kStartAtReceiver);
1379913806 !iter.IsAtEnd(); iter.Advance()) {
1380013807 Handle<JSReceiver> current =
@@ -13808,6 +13815,11 @@ void JSFunction::CalculateInstanceSizeForDerivedClass(
1380813815 Compiler::Compile(func, Compiler::CLEAR_EXCEPTION)) {
1380913816 DCHECK(shared->is_compiled());
1381013817 expected_nof_properties += shared->expected_nof_properties();
13818+ } else if (!shared->is_compiled()) {
13819+ // In case there was a compilation error for the constructor we will
13820+ // throw an error during instantiation. Hence we directly return 0;
13821+ result = false;
13822+ break;
1381113823 }
1381213824 if (!IsDerivedConstructor(shared->kind())) {
1381313825 break;
@@ -13816,6 +13828,7 @@ void JSFunction::CalculateInstanceSizeForDerivedClass(
1381613828 CalculateInstanceSizeHelper(instance_type, requested_embedder_fields,
1381713829 expected_nof_properties, instance_size,
1381813830 in_object_properties);
13831+ return result;
1381913832}
1382013833
1382113834
0 commit comments