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

Side by Side Diff: test/cctest/test-transitions.cc

Issue 2598543003: [runtime][ic] Constant field tracking support. (Closed)
Patch Set: Addressing comments Created 3 years, 10 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 | « test/cctest/test-field-type-tracking.cc ('k') | test/cctest/test-unboxed-doubles.cc » ('j') | 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 20 matching lines...) Expand all
31 Isolate* isolate = CcTest::i_isolate(); 31 Isolate* isolate = CcTest::i_isolate();
32 Factory* factory = isolate->factory(); 32 Factory* factory = isolate->factory();
33 33
34 Handle<String> name1 = factory->InternalizeUtf8String("foo"); 34 Handle<String> name1 = factory->InternalizeUtf8String("foo");
35 Handle<String> name2 = factory->InternalizeUtf8String("bar"); 35 Handle<String> name2 = factory->InternalizeUtf8String("bar");
36 PropertyAttributes attributes = NONE; 36 PropertyAttributes attributes = NONE;
37 37
38 Handle<Map> map0 = Map::Create(isolate, 0); 38 Handle<Map> map0 = Map::Create(isolate, 0);
39 Handle<Map> map1 = 39 Handle<Map> map1 =
40 Map::CopyWithField(map0, name1, handle(FieldType::Any(), isolate), 40 Map::CopyWithField(map0, name1, handle(FieldType::Any(), isolate),
41 attributes, Representation::Tagged(), OMIT_TRANSITION) 41 attributes, kMutable, Representation::Tagged(),
42 OMIT_TRANSITION)
42 .ToHandleChecked(); 43 .ToHandleChecked();
43 Handle<Map> map2 = 44 Handle<Map> map2 =
44 Map::CopyWithField(map0, name2, handle(FieldType::Any(), isolate), 45 Map::CopyWithField(map0, name2, handle(FieldType::Any(), isolate),
45 attributes, Representation::Tagged(), OMIT_TRANSITION) 46 attributes, kMutable, Representation::Tagged(),
47 OMIT_TRANSITION)
46 .ToHandleChecked(); 48 .ToHandleChecked();
47 49
48 CHECK(map0->raw_transitions()->IsSmi()); 50 CHECK(map0->raw_transitions()->IsSmi());
49 51
50 TransitionArray::Insert(map0, name1, map1, SIMPLE_PROPERTY_TRANSITION); 52 TransitionArray::Insert(map0, name1, map1, SIMPLE_PROPERTY_TRANSITION);
51 CHECK(TransitionArray::IsSimpleTransition(map0->raw_transitions())); 53 CHECK(TransitionArray::IsSimpleTransition(map0->raw_transitions()));
52 CHECK_EQ(*map1, 54 CHECK_EQ(*map1,
53 TransitionArray::SearchTransition(*map0, kData, *name1, attributes)); 55 TransitionArray::SearchTransition(*map0, kData, *name1, attributes));
54 CHECK_EQ(1, TransitionArray::NumberOfTransitions(map0->raw_transitions())); 56 CHECK_EQ(1, TransitionArray::NumberOfTransitions(map0->raw_transitions()));
55 CHECK_EQ(*name1, TransitionArray::GetKey(map0->raw_transitions(), 0)); 57 CHECK_EQ(*name1, TransitionArray::GetKey(map0->raw_transitions(), 0));
(...skipping 26 matching lines...) Expand all
82 Isolate* isolate = CcTest::i_isolate(); 84 Isolate* isolate = CcTest::i_isolate();
83 Factory* factory = isolate->factory(); 85 Factory* factory = isolate->factory();
84 86
85 Handle<String> name1 = factory->InternalizeUtf8String("foo"); 87 Handle<String> name1 = factory->InternalizeUtf8String("foo");
86 Handle<String> name2 = factory->InternalizeUtf8String("bar"); 88 Handle<String> name2 = factory->InternalizeUtf8String("bar");
87 PropertyAttributes attributes = NONE; 89 PropertyAttributes attributes = NONE;
88 90
89 Handle<Map> map0 = Map::Create(isolate, 0); 91 Handle<Map> map0 = Map::Create(isolate, 0);
90 Handle<Map> map1 = 92 Handle<Map> map1 =
91 Map::CopyWithField(map0, name1, handle(FieldType::Any(), isolate), 93 Map::CopyWithField(map0, name1, handle(FieldType::Any(), isolate),
92 attributes, Representation::Tagged(), OMIT_TRANSITION) 94 attributes, kMutable, Representation::Tagged(),
95 OMIT_TRANSITION)
93 .ToHandleChecked(); 96 .ToHandleChecked();
94 Handle<Map> map2 = 97 Handle<Map> map2 =
95 Map::CopyWithField(map0, name2, handle(FieldType::Any(), isolate), 98 Map::CopyWithField(map0, name2, handle(FieldType::Any(), isolate),
96 attributes, Representation::Tagged(), OMIT_TRANSITION) 99 attributes, kMutable, Representation::Tagged(),
100 OMIT_TRANSITION)
97 .ToHandleChecked(); 101 .ToHandleChecked();
98 102
99 CHECK(map0->raw_transitions()->IsSmi()); 103 CHECK(map0->raw_transitions()->IsSmi());
100 104
101 TransitionArray::Insert(map0, name1, map1, PROPERTY_TRANSITION); 105 TransitionArray::Insert(map0, name1, map1, PROPERTY_TRANSITION);
102 CHECK(TransitionArray::IsFullTransitionArray(map0->raw_transitions())); 106 CHECK(TransitionArray::IsFullTransitionArray(map0->raw_transitions()));
103 CHECK_EQ(*map1, 107 CHECK_EQ(*map1,
104 TransitionArray::SearchTransition(*map0, kData, *name1, attributes)); 108 TransitionArray::SearchTransition(*map0, kData, *name1, attributes));
105 CHECK_EQ(1, TransitionArray::NumberOfTransitions(map0->raw_transitions())); 109 CHECK_EQ(1, TransitionArray::NumberOfTransitions(map0->raw_transitions()));
106 CHECK_EQ(*name1, TransitionArray::GetKey(map0->raw_transitions(), 0)); 110 CHECK_EQ(*name1, TransitionArray::GetKey(map0->raw_transitions(), 0));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 Handle<Map> maps[PROPS_COUNT]; 142 Handle<Map> maps[PROPS_COUNT];
139 PropertyAttributes attributes = NONE; 143 PropertyAttributes attributes = NONE;
140 144
141 Handle<Map> map0 = Map::Create(isolate, 0); 145 Handle<Map> map0 = Map::Create(isolate, 0);
142 CHECK(map0->raw_transitions()->IsSmi()); 146 CHECK(map0->raw_transitions()->IsSmi());
143 147
144 for (int i = 0; i < PROPS_COUNT; i++) { 148 for (int i = 0; i < PROPS_COUNT; i++) {
145 EmbeddedVector<char, 64> buffer; 149 EmbeddedVector<char, 64> buffer;
146 SNPrintF(buffer, "prop%d", i); 150 SNPrintF(buffer, "prop%d", i);
147 Handle<String> name = factory->InternalizeUtf8String(buffer.start()); 151 Handle<String> name = factory->InternalizeUtf8String(buffer.start());
148 Handle<Map> map = Map::CopyWithField( 152 Handle<Map> map =
149 map0, name, handle(FieldType::Any(), isolate), 153 Map::CopyWithField(map0, name, handle(FieldType::Any(), isolate),
150 attributes, Representation::Tagged(), OMIT_TRANSITION) 154 attributes, kMutable, Representation::Tagged(),
151 .ToHandleChecked(); 155 OMIT_TRANSITION)
156 .ToHandleChecked();
152 names[i] = name; 157 names[i] = name;
153 maps[i] = map; 158 maps[i] = map;
154 159
155 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); 160 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION);
156 } 161 }
157 162
158 for (int i = 0; i < PROPS_COUNT; i++) { 163 for (int i = 0; i < PROPS_COUNT; i++) {
159 CHECK_EQ(*maps[i], TransitionArray::SearchTransition( 164 CHECK_EQ(*maps[i], TransitionArray::SearchTransition(
160 *map0, kData, *names[i], attributes)); 165 *map0, kData, *names[i], attributes));
161 } 166 }
(...skipping 25 matching lines...) Expand all
187 192
188 const int ATTRS_COUNT = (READ_ONLY | DONT_ENUM | DONT_DELETE) + 1; 193 const int ATTRS_COUNT = (READ_ONLY | DONT_ENUM | DONT_DELETE) + 1;
189 STATIC_ASSERT(ATTRS_COUNT == 8); 194 STATIC_ASSERT(ATTRS_COUNT == 8);
190 Handle<Map> attr_maps[ATTRS_COUNT]; 195 Handle<Map> attr_maps[ATTRS_COUNT];
191 Handle<String> name = factory->InternalizeUtf8String("foo"); 196 Handle<String> name = factory->InternalizeUtf8String("foo");
192 197
193 // Add transitions for same field name but different attributes. 198 // Add transitions for same field name but different attributes.
194 for (int i = 0; i < ATTRS_COUNT; i++) { 199 for (int i = 0; i < ATTRS_COUNT; i++) {
195 PropertyAttributes attributes = static_cast<PropertyAttributes>(i); 200 PropertyAttributes attributes = static_cast<PropertyAttributes>(i);
196 201
197 Handle<Map> map = Map::CopyWithField( 202 Handle<Map> map =
198 map0, name, handle(FieldType::Any(), isolate), 203 Map::CopyWithField(map0, name, FieldType::Any(isolate), attributes,
199 attributes, Representation::Tagged(), OMIT_TRANSITION) 204 kMutable, Representation::Tagged(), OMIT_TRANSITION)
200 .ToHandleChecked(); 205 .ToHandleChecked();
201 attr_maps[i] = map; 206 attr_maps[i] = map;
202 207
203 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); 208 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION);
204 } 209 }
205 210
206 // Ensure that transitions for |name| field are valid. 211 // Ensure that transitions for |name| field are valid.
207 for (int i = 0; i < ATTRS_COUNT; i++) { 212 for (int i = 0; i < ATTRS_COUNT; i++) {
208 PropertyAttributes attributes = static_cast<PropertyAttributes>(i); 213 PropertyAttributes attributes = static_cast<PropertyAttributes>(i);
209 CHECK_EQ(*attr_maps[i], TransitionArray::SearchTransition( 214 CHECK_EQ(*attr_maps[i], TransitionArray::SearchTransition(
210 *map0, kData, *name, attributes)); 215 *map0, kData, *name, attributes));
(...skipping 21 matching lines...) Expand all
232 Handle<Map> map0 = Map::Create(isolate, 0); 237 Handle<Map> map0 = Map::Create(isolate, 0);
233 CHECK(map0->raw_transitions()->IsSmi()); 238 CHECK(map0->raw_transitions()->IsSmi());
234 239
235 // Some number of fields. 240 // Some number of fields.
236 for (int i = 0; i < PROPS_COUNT; i++) { 241 for (int i = 0; i < PROPS_COUNT; i++) {
237 EmbeddedVector<char, 64> buffer; 242 EmbeddedVector<char, 64> buffer;
238 SNPrintF(buffer, "prop%d", i); 243 SNPrintF(buffer, "prop%d", i);
239 Handle<String> name = factory->InternalizeUtf8String(buffer.start()); 244 Handle<String> name = factory->InternalizeUtf8String(buffer.start());
240 Handle<Map> map = 245 Handle<Map> map =
241 Map::CopyWithField(map0, name, handle(FieldType::Any(), isolate), NONE, 246 Map::CopyWithField(map0, name, handle(FieldType::Any(), isolate), NONE,
242 Representation::Tagged(), OMIT_TRANSITION) 247 kMutable, Representation::Tagged(), OMIT_TRANSITION)
243 .ToHandleChecked(); 248 .ToHandleChecked();
244 names[i] = name; 249 names[i] = name;
245 maps[i] = map; 250 maps[i] = map;
246 251
247 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); 252 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION);
248 } 253 }
249 254
250 const int ATTRS_COUNT = (READ_ONLY | DONT_ENUM | DONT_DELETE) + 1; 255 const int ATTRS_COUNT = (READ_ONLY | DONT_ENUM | DONT_DELETE) + 1;
251 STATIC_ASSERT(ATTRS_COUNT == 8); 256 STATIC_ASSERT(ATTRS_COUNT == 8);
252 Handle<Map> attr_maps[ATTRS_COUNT]; 257 Handle<Map> attr_maps[ATTRS_COUNT];
253 Handle<String> name = factory->InternalizeUtf8String("foo"); 258 Handle<String> name = factory->InternalizeUtf8String("foo");
254 259
255 // Add transitions for same field name but different attributes. 260 // Add transitions for same field name but different attributes.
256 for (int i = 0; i < ATTRS_COUNT; i++) { 261 for (int i = 0; i < ATTRS_COUNT; i++) {
257 PropertyAttributes attributes = static_cast<PropertyAttributes>(i); 262 PropertyAttributes attributes = static_cast<PropertyAttributes>(i);
258 263
259 Handle<Map> map = Map::CopyWithField( 264 Handle<Map> map =
260 map0, name, handle(FieldType::Any(), isolate), 265 Map::CopyWithField(map0, name, handle(FieldType::Any(), isolate),
261 attributes, Representation::Tagged(), OMIT_TRANSITION) 266 attributes, kMutable, Representation::Tagged(),
262 .ToHandleChecked(); 267 OMIT_TRANSITION)
268 .ToHandleChecked();
263 attr_maps[i] = map; 269 attr_maps[i] = map;
264 270
265 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); 271 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION);
266 } 272 }
267 273
268 // Ensure that transitions for |name| field are valid. 274 // Ensure that transitions for |name| field are valid.
269 for (int i = 0; i < ATTRS_COUNT; i++) { 275 for (int i = 0; i < ATTRS_COUNT; i++) {
270 PropertyAttributes attr = static_cast<PropertyAttributes>(i); 276 PropertyAttributes attr = static_cast<PropertyAttributes>(i);
271 CHECK_EQ(*attr_maps[i], 277 CHECK_EQ(*attr_maps[i],
272 TransitionArray::SearchTransition(*map0, kData, *name, attr)); 278 TransitionArray::SearchTransition(*map0, kData, *name, attr));
(...skipping 17 matching lines...) Expand all
290 break; 296 break;
291 } 297 }
292 } 298 }
293 } 299 }
294 } 300 }
295 301
296 #ifdef DEBUG 302 #ifdef DEBUG
297 CHECK(TransitionArray::IsSortedNoDuplicates(*map0)); 303 CHECK(TransitionArray::IsSortedNoDuplicates(*map0));
298 #endif 304 #endif
299 } 305 }
OLDNEW
« no previous file with comments | « test/cctest/test-field-type-tracking.cc ('k') | test/cctest/test-unboxed-doubles.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698