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

Side by Side Diff: src/objects.cc

Issue 2627003005: [printing] Remove duplicate code that prints property details. (Closed)
Patch Set: Created 3 years, 11 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
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | src/property.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 3309 matching lines...) Expand 10 before | Expand all | Expand 10 after
3320 } else { 3320 } else {
3321 // Functions have null as a constructor, 3321 // Functions have null as a constructor,
3322 // but any JSFunction knows its context immediately. 3322 // but any JSFunction knows its context immediately.
3323 CHECK(receiver->IsJSFunction()); 3323 CHECK(receiver->IsJSFunction());
3324 function = JSFunction::cast(receiver); 3324 function = JSFunction::cast(receiver);
3325 } 3325 }
3326 3326
3327 return function->context()->native_context(); 3327 return function->context()->native_context();
3328 } 3328 }
3329 3329
3330 Handle<Object> Map::WrapType(Handle<FieldType> type) { 3330 Handle<Object> Map::WrapFieldType(Handle<FieldType> type) {
3331 if (type->IsClass()) return Map::WeakCellForMap(type->AsClass()); 3331 if (type->IsClass()) return Map::WeakCellForMap(type->AsClass());
3332 return type; 3332 return type;
3333 } 3333 }
3334 3334
3335 FieldType* Map::UnwrapFieldType(Object* wrapped_type) {
3336 Object* value = wrapped_type;
3337 if (value->IsWeakCell()) {
3338 if (WeakCell::cast(value)->cleared()) return FieldType::None();
3339 value = WeakCell::cast(value)->value();
3340 }
3341 return FieldType::cast(value);
3342 }
3343
3335 MaybeHandle<Map> Map::CopyWithField(Handle<Map> map, Handle<Name> name, 3344 MaybeHandle<Map> Map::CopyWithField(Handle<Map> map, Handle<Name> name,
3336 Handle<FieldType> type, 3345 Handle<FieldType> type,
3337 PropertyAttributes attributes, 3346 PropertyAttributes attributes,
3338 Representation representation, 3347 Representation representation,
3339 TransitionFlag flag) { 3348 TransitionFlag flag) {
3340 DCHECK(DescriptorArray::kNotFound == 3349 DCHECK(DescriptorArray::kNotFound ==
3341 map->instance_descriptors()->Search( 3350 map->instance_descriptors()->Search(
3342 *name, map->NumberOfOwnDescriptors())); 3351 *name, map->NumberOfOwnDescriptors()));
3343 3352
3344 // Ensure the descriptor array does not get too big. 3353 // Ensure the descriptor array does not get too big.
3345 if (map->NumberOfOwnDescriptors() >= kMaxNumberOfDescriptors) { 3354 if (map->NumberOfOwnDescriptors() >= kMaxNumberOfDescriptors) {
3346 return MaybeHandle<Map>(); 3355 return MaybeHandle<Map>();
3347 } 3356 }
3348 3357
3349 Isolate* isolate = map->GetIsolate(); 3358 Isolate* isolate = map->GetIsolate();
3350 3359
3351 // Compute the new index for new field. 3360 // Compute the new index for new field.
3352 int index = map->NextFreePropertyIndex(); 3361 int index = map->NextFreePropertyIndex();
3353 3362
3354 if (map->instance_type() == JS_CONTEXT_EXTENSION_OBJECT_TYPE) { 3363 if (map->instance_type() == JS_CONTEXT_EXTENSION_OBJECT_TYPE) {
3355 representation = Representation::Tagged(); 3364 representation = Representation::Tagged();
3356 type = FieldType::Any(isolate); 3365 type = FieldType::Any(isolate);
3357 } 3366 }
3358 3367
3359 Handle<Object> wrapped_type(WrapType(type)); 3368 Handle<Object> wrapped_type(WrapFieldType(type));
3360 3369
3361 Descriptor d = Descriptor::DataField(name, index, wrapped_type, attributes, 3370 Descriptor d = Descriptor::DataField(name, index, wrapped_type, attributes,
3362 representation); 3371 representation);
3363 Handle<Map> new_map = Map::CopyAddDescriptor(map, &d, flag); 3372 Handle<Map> new_map = Map::CopyAddDescriptor(map, &d, flag);
3364 int unused_property_fields = new_map->unused_property_fields() - 1; 3373 int unused_property_fields = new_map->unused_property_fields() - 1;
3365 if (unused_property_fields < 0) { 3374 if (unused_property_fields < 0) {
3366 unused_property_fields += JSObject::kFieldsAdded; 3375 unused_property_fields += JSObject::kFieldsAdded;
3367 } 3376 }
3368 new_map->set_unused_property_fields(unused_property_fields); 3377 new_map->set_unused_property_fields(unused_property_fields);
3369 return new_map; 3378 return new_map;
(...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after
4132 field_owner->instance_descriptors(), isolate); 4141 field_owner->instance_descriptors(), isolate);
4133 DCHECK_EQ(*old_field_type, descriptors->GetFieldType(modify_index)); 4142 DCHECK_EQ(*old_field_type, descriptors->GetFieldType(modify_index));
4134 4143
4135 new_field_type = 4144 new_field_type =
4136 Map::GeneralizeFieldType(old_representation, old_field_type, 4145 Map::GeneralizeFieldType(old_representation, old_field_type,
4137 new_representation, new_field_type, isolate); 4146 new_representation, new_field_type, isolate);
4138 4147
4139 PropertyDetails details = descriptors->GetDetails(modify_index); 4148 PropertyDetails details = descriptors->GetDetails(modify_index);
4140 Handle<Name> name(descriptors->GetKey(modify_index)); 4149 Handle<Name> name(descriptors->GetKey(modify_index));
4141 4150
4142 Handle<Object> wrapped_type(WrapType(new_field_type)); 4151 Handle<Object> wrapped_type(WrapFieldType(new_field_type));
4143 field_owner->UpdateFieldType(modify_index, name, new_representation, 4152 field_owner->UpdateFieldType(modify_index, name, new_representation,
4144 wrapped_type); 4153 wrapped_type);
4145 field_owner->dependent_code()->DeoptimizeDependentCodeGroup( 4154 field_owner->dependent_code()->DeoptimizeDependentCodeGroup(
4146 isolate, DependentCode::kFieldOwnerGroup); 4155 isolate, DependentCode::kFieldOwnerGroup);
4147 4156
4148 if (FLAG_trace_generalization) { 4157 if (FLAG_trace_generalization) {
4149 map->PrintGeneralization( 4158 map->PrintGeneralization(
4150 stdout, "field type generalization", modify_index, 4159 stdout, "field type generalization", modify_index,
4151 map->NumberOfOwnDescriptors(), map->NumberOfOwnDescriptors(), false, 4160 map->NumberOfOwnDescriptors(), map->NumberOfOwnDescriptors(), false,
4152 details.representation(), details.representation(), old_field_type, 4161 details.representation(), details.representation(), old_field_type,
(...skipping 4949 matching lines...) Expand 10 before | Expand all | Expand 10 after
9102 new_map->set_is_extensible(false); 9111 new_map->set_is_extensible(false);
9103 if (!IsFixedTypedArrayElementsKind(map->elements_kind())) { 9112 if (!IsFixedTypedArrayElementsKind(map->elements_kind())) {
9104 ElementsKind new_kind = IsStringWrapperElementsKind(map->elements_kind()) 9113 ElementsKind new_kind = IsStringWrapperElementsKind(map->elements_kind())
9105 ? SLOW_STRING_WRAPPER_ELEMENTS 9114 ? SLOW_STRING_WRAPPER_ELEMENTS
9106 : DICTIONARY_ELEMENTS; 9115 : DICTIONARY_ELEMENTS;
9107 new_map->set_elements_kind(new_kind); 9116 new_map->set_elements_kind(new_kind);
9108 } 9117 }
9109 return new_map; 9118 return new_map;
9110 } 9119 }
9111 9120
9112 FieldType* DescriptorArray::GetFieldType(int descriptor_number) {
9113 DCHECK(GetDetails(descriptor_number).location() == kField);
9114 Object* value = GetValue(descriptor_number);
9115 if (value->IsWeakCell()) {
9116 if (WeakCell::cast(value)->cleared()) return FieldType::None();
9117 value = WeakCell::cast(value)->value();
9118 }
9119 return FieldType::cast(value);
9120 }
9121
9122 namespace { 9121 namespace {
9123 9122
9124 bool CanHoldValue(DescriptorArray* descriptors, int descriptor, Object* value) { 9123 bool CanHoldValue(DescriptorArray* descriptors, int descriptor, Object* value) {
9125 PropertyDetails details = descriptors->GetDetails(descriptor); 9124 PropertyDetails details = descriptors->GetDetails(descriptor);
9126 if (details.location() == kField) { 9125 if (details.location() == kField) {
9127 if (details.kind() == kData) { 9126 if (details.kind() == kData) {
9128 return value->FitsRepresentation(details.representation()) && 9127 return value->FitsRepresentation(details.representation()) &&
9129 descriptors->GetFieldType(descriptor)->NowContains(value); 9128 descriptors->GetFieldType(descriptor)->NowContains(value);
9130 } else { 9129 } else {
9131 DCHECK_EQ(kAccessor, details.kind()); 9130 DCHECK_EQ(kAccessor, details.kind());
(...skipping 6651 matching lines...) Expand 10 before | Expand all | Expand 10 after
15783 int capacity = this->Capacity(); 15782 int capacity = this->Capacity();
15784 for (int i = 0; i < capacity; i++) { 15783 for (int i = 0; i < capacity; i++) {
15785 Object* k = this->KeyAt(i); 15784 Object* k = this->KeyAt(i);
15786 if (this->IsKey(isolate, k)) { 15785 if (this->IsKey(isolate, k)) {
15787 os << "\n "; 15786 os << "\n ";
15788 if (k->IsString()) { 15787 if (k->IsString()) {
15789 String::cast(k)->StringPrint(os); 15788 String::cast(k)->StringPrint(os);
15790 } else { 15789 } else {
15791 os << Brief(k); 15790 os << Brief(k);
15792 } 15791 }
15793 os << ": " << Brief(this->ValueAt(i)) << " " << this->DetailsAt(i); 15792 os << ": " << Brief(this->ValueAt(i)) << " ";
15793 this->DetailsAt(i).PrintAsSlowTo(os);
15794 } 15794 }
15795 } 15795 }
15796 } 15796 }
15797 template <typename Derived, typename Shape, typename Key> 15797 template <typename Derived, typename Shape, typename Key>
15798 void Dictionary<Derived, Shape, Key>::Print() { 15798 void Dictionary<Derived, Shape, Key>::Print() {
15799 OFStream os(stdout); 15799 OFStream os(stdout);
15800 Print(os); 15800 Print(os);
15801 } 15801 }
15802 #endif 15802 #endif
15803 15803
(...skipping 4175 matching lines...) Expand 10 before | Expand all | Expand 10 after
19979 // depend on this. 19979 // depend on this.
19980 return DICTIONARY_ELEMENTS; 19980 return DICTIONARY_ELEMENTS;
19981 } 19981 }
19982 DCHECK_LE(kind, LAST_ELEMENTS_KIND); 19982 DCHECK_LE(kind, LAST_ELEMENTS_KIND);
19983 return kind; 19983 return kind;
19984 } 19984 }
19985 } 19985 }
19986 19986
19987 } // namespace internal 19987 } // namespace internal
19988 } // namespace v8 19988 } // namespace v8
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | src/property.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698