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

Side by Side Diff: test/cctest/test-unboxed-doubles.cc

Issue 2645083003: Remove one of the JSObject::WriteToField() methods in favor of another. (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-inl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 <stdlib.h> 5 #include <stdlib.h>
6 #include <utility> 6 #include <utility>
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/compilation-cache.h" 10 #include "src/compilation-cache.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 static double GetDoubleFieldValue(JSObject* obj, FieldIndex field_index) { 63 static double GetDoubleFieldValue(JSObject* obj, FieldIndex field_index) {
64 if (obj->IsUnboxedDoubleField(field_index)) { 64 if (obj->IsUnboxedDoubleField(field_index)) {
65 return obj->RawFastDoublePropertyAt(field_index); 65 return obj->RawFastDoublePropertyAt(field_index);
66 } else { 66 } else {
67 Object* value = obj->RawFastPropertyAt(field_index); 67 Object* value = obj->RawFastPropertyAt(field_index);
68 CHECK(value->IsMutableHeapNumber()); 68 CHECK(value->IsMutableHeapNumber());
69 return HeapNumber::cast(value)->value(); 69 return HeapNumber::cast(value)->value();
70 } 70 }
71 } 71 }
72 72
73 void WriteToField(JSObject* object, int descriptor, Object* value) {
74 DescriptorArray* descriptors = object->map()->instance_descriptors();
75 PropertyDetails details = descriptors->GetDetails(descriptor);
76 object->WriteToField(descriptor, details, value);
77 }
78
73 const int kNumberOfBits = 32; 79 const int kNumberOfBits = 32;
74 80
75 81
76 enum TestPropertyKind { 82 enum TestPropertyKind {
77 PROP_CONSTANT, 83 PROP_CONSTANT,
78 PROP_SMI, 84 PROP_SMI,
79 PROP_DOUBLE, 85 PROP_DOUBLE,
80 PROP_TAGGED, 86 PROP_TAGGED,
81 PROP_KIND_NUMBER 87 PROP_KIND_NUMBER
82 }; 88 };
(...skipping 957 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 Handle<FieldType> any_type = FieldType::Any(isolate); 1046 Handle<FieldType> any_type = FieldType::Any(isolate);
1041 Handle<Map> map = Map::Create(isolate, 10); 1047 Handle<Map> map = Map::Create(isolate, 10);
1042 map = Map::CopyWithField(map, MakeName("prop", 0), any_type, NONE, 1048 map = Map::CopyWithField(map, MakeName("prop", 0), any_type, NONE,
1043 Representation::Double(), 1049 Representation::Double(),
1044 INSERT_TRANSITION).ToHandleChecked(); 1050 INSERT_TRANSITION).ToHandleChecked();
1045 1051
1046 // Create object in new space. 1052 // Create object in new space.
1047 Handle<JSObject> obj = factory->NewJSObjectFromMap(map, NOT_TENURED); 1053 Handle<JSObject> obj = factory->NewJSObjectFromMap(map, NOT_TENURED);
1048 1054
1049 Handle<HeapNumber> heap_number = factory->NewHeapNumber(42.5); 1055 Handle<HeapNumber> heap_number = factory->NewHeapNumber(42.5);
1050 obj->WriteToField(0, *heap_number); 1056 WriteToField(*obj, 0, *heap_number);
1051 1057
1052 { 1058 {
1053 // Ensure the object is properly set up. 1059 // Ensure the object is properly set up.
1054 FieldIndex field_index = FieldIndex::ForDescriptor(*map, 0); 1060 FieldIndex field_index = FieldIndex::ForDescriptor(*map, 0);
1055 CHECK(field_index.is_inobject() && field_index.is_double()); 1061 CHECK(field_index.is_inobject() && field_index.is_double());
1056 CHECK_EQ(FLAG_unbox_double_fields, map->IsUnboxedDoubleField(field_index)); 1062 CHECK_EQ(FLAG_unbox_double_fields, map->IsUnboxedDoubleField(field_index));
1057 CHECK_EQ(42.5, GetDoubleFieldValue(*obj, field_index)); 1063 CHECK_EQ(42.5, GetDoubleFieldValue(*obj, field_index));
1058 } 1064 }
1059 CHECK(isolate->heap()->new_space()->Contains(*obj)); 1065 CHECK(isolate->heap()->new_space()->Contains(*obj));
1060 1066
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 // Make sure |obj_value| is placed on an old-space evacuation candidate. 1122 // Make sure |obj_value| is placed on an old-space evacuation candidate.
1117 heap::SimulateFullSpace(old_space); 1123 heap::SimulateFullSpace(old_space);
1118 obj_value = factory->NewJSArray(32 * KB, FAST_HOLEY_ELEMENTS, TENURED); 1124 obj_value = factory->NewJSArray(32 * KB, FAST_HOLEY_ELEMENTS, TENURED);
1119 ec_page = Page::FromAddress(obj_value->address()); 1125 ec_page = Page::FromAddress(obj_value->address());
1120 } 1126 }
1121 1127
1122 // Create object in new space. 1128 // Create object in new space.
1123 Handle<JSObject> obj = factory->NewJSObjectFromMap(map, NOT_TENURED); 1129 Handle<JSObject> obj = factory->NewJSObjectFromMap(map, NOT_TENURED);
1124 1130
1125 Handle<HeapNumber> heap_number = factory->NewHeapNumber(42.5); 1131 Handle<HeapNumber> heap_number = factory->NewHeapNumber(42.5);
1126 obj->WriteToField(0, *heap_number); 1132 WriteToField(*obj, 0, *heap_number);
1127 obj->WriteToField(1, *obj_value); 1133 WriteToField(*obj, 1, *obj_value);
1128 1134
1129 { 1135 {
1130 // Ensure the object is properly set up. 1136 // Ensure the object is properly set up.
1131 FieldIndex field_index = FieldIndex::ForDescriptor(*map, 0); 1137 FieldIndex field_index = FieldIndex::ForDescriptor(*map, 0);
1132 CHECK(field_index.is_inobject() && field_index.is_double()); 1138 CHECK(field_index.is_inobject() && field_index.is_double());
1133 CHECK_EQ(FLAG_unbox_double_fields, map->IsUnboxedDoubleField(field_index)); 1139 CHECK_EQ(FLAG_unbox_double_fields, map->IsUnboxedDoubleField(field_index));
1134 CHECK_EQ(42.5, GetDoubleFieldValue(*obj, field_index)); 1140 CHECK_EQ(42.5, GetDoubleFieldValue(*obj, field_index));
1135 1141
1136 field_index = FieldIndex::ForDescriptor(*map, 1); 1142 field_index = FieldIndex::ForDescriptor(*map, 1);
1137 CHECK(field_index.is_inobject() && !field_index.is_double()); 1143 CHECK(field_index.is_inobject() && !field_index.is_double());
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 1562
1557 // TODO(ishell): add respective tests for property kind reconfiguring from 1563 // TODO(ishell): add respective tests for property kind reconfiguring from
1558 // accessor field to double, once accessor fields are supported by 1564 // accessor field to double, once accessor fields are supported by
1559 // Map::ReconfigureProperty(). 1565 // Map::ReconfigureProperty().
1560 1566
1561 1567
1562 // TODO(ishell): add respective tests for fast property removal case once 1568 // TODO(ishell): add respective tests for fast property removal case once
1563 // Map::ReconfigureProperty() supports that. 1569 // Map::ReconfigureProperty() supports that.
1564 1570
1565 #endif 1571 #endif
OLDNEW
« no previous file with comments | « src/objects-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698