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

Side by Side Diff: src/objects.cc

Issue 2445333002: Ensure slow properties for simple {__proto__:null} literals. (Closed)
Patch Set: fixing typo Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <memory> 9 #include <memory>
10 #include <sstream> 10 #include <sstream>
(...skipping 8654 matching lines...) Expand 10 before | Expand all | Expand 10 after
8665 // for the global object and its prototype chain, and excluding it saves 8665 // for the global object and its prototype chain, and excluding it saves
8666 // memory on the map transition tree. 8666 // memory on the map transition tree.
8667 8667
8668 // static 8668 // static
8669 Handle<Map> Map::TransitionToImmutableProto(Handle<Map> map) { 8669 Handle<Map> Map::TransitionToImmutableProto(Handle<Map> map) {
8670 Handle<Map> new_map = Map::Copy(map, "ImmutablePrototype"); 8670 Handle<Map> new_map = Map::Copy(map, "ImmutablePrototype");
8671 new_map->set_immutable_proto(true); 8671 new_map->set_immutable_proto(true);
8672 return new_map; 8672 return new_map;
8673 } 8673 }
8674 8674
8675 Handle<Map> Map::CopyInitialMap(Handle<Map> map, int instance_size, 8675 namespace {
8676 int in_object_properties, 8676 void EnsureInitialMap(Handle<Map> map) {
8677 int unused_property_fields) {
8678 #ifdef DEBUG 8677 #ifdef DEBUG
8679 Isolate* isolate = map->GetIsolate(); 8678 Isolate* isolate = map->GetIsolate();
8680 // Strict function maps have Function as a constructor but the 8679 // Strict function maps have Function as a constructor but the
8681 // Function's initial map is a sloppy function map. Same holds for 8680 // Function's initial map is a sloppy function map. Same holds for
8682 // GeneratorFunction / AsyncFunction and its initial map. 8681 // GeneratorFunction / AsyncFunction and its initial map.
8683 Object* constructor = map->GetConstructor(); 8682 Object* constructor = map->GetConstructor();
8684 DCHECK(constructor->IsJSFunction()); 8683 DCHECK(constructor->IsJSFunction());
8685 DCHECK(*map == JSFunction::cast(constructor)->initial_map() || 8684 DCHECK(*map == JSFunction::cast(constructor)->initial_map() ||
8686 *map == *isolate->strict_function_map() || 8685 *map == *isolate->strict_function_map() ||
8687 *map == *isolate->generator_function_map() || 8686 *map == *isolate->generator_function_map() ||
8688 *map == *isolate->async_function_map()); 8687 *map == *isolate->async_function_map());
8689 #endif 8688 #endif
8690 // Initial maps must always own their descriptors and it's descriptor array 8689 // Initial maps must always own their descriptors and it's descriptor array
8691 // does not contain descriptors that do not belong to the map. 8690 // does not contain descriptors that do not belong to the map.
8692 DCHECK(map->owns_descriptors()); 8691 DCHECK(map->owns_descriptors());
8693 DCHECK_EQ(map->NumberOfOwnDescriptors(), 8692 DCHECK_EQ(map->NumberOfOwnDescriptors(),
8694 map->instance_descriptors()->number_of_descriptors()); 8693 map->instance_descriptors()->number_of_descriptors());
8694 }
8695 } // namespace
8695 8696
8697 // static
8698 Handle<Map> Map::CopyInitialMapNormalized(Handle<Map> map,
8699 PropertyNormalizationMode mode) {
8700 EnsureInitialMap(map);
8701 return CopyNormalized(map, mode);
8702 }
8703
8704 // static
8705 Handle<Map> Map::CopyInitialMap(Handle<Map> map, int instance_size,
8706 int in_object_properties,
8707 int unused_property_fields) {
8708 EnsureInitialMap(map);
8696 Handle<Map> result = RawCopy(map, instance_size); 8709 Handle<Map> result = RawCopy(map, instance_size);
8697 8710
8698 // Please note instance_type and instance_size are set when allocated. 8711 // Please note instance_type and instance_size are set when allocated.
8699 result->SetInObjectProperties(in_object_properties); 8712 result->SetInObjectProperties(in_object_properties);
8700 result->set_unused_property_fields(unused_property_fields); 8713 result->set_unused_property_fields(unused_property_fields);
8701 8714
8702 int number_of_own_descriptors = map->NumberOfOwnDescriptors(); 8715 int number_of_own_descriptors = map->NumberOfOwnDescriptors();
8703 if (number_of_own_descriptors > 0) { 8716 if (number_of_own_descriptors > 0) {
8704 // The copy will use the same descriptors array. 8717 // The copy will use the same descriptors array.
8705 result->UpdateDescriptors(map->instance_descriptors(), 8718 result->UpdateDescriptors(map->instance_descriptors(),
(...skipping 11581 matching lines...) Expand 10 before | Expand all | Expand 10 after
20287 // depend on this. 20300 // depend on this.
20288 return DICTIONARY_ELEMENTS; 20301 return DICTIONARY_ELEMENTS;
20289 } 20302 }
20290 DCHECK_LE(kind, LAST_ELEMENTS_KIND); 20303 DCHECK_LE(kind, LAST_ELEMENTS_KIND);
20291 return kind; 20304 return kind;
20292 } 20305 }
20293 } 20306 }
20294 20307
20295 } // namespace internal 20308 } // namespace internal
20296 } // namespace v8 20309 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698