OLD | NEW |
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 v8::HandleScope scope(CcTest::isolate()); | 44 v8::HandleScope scope(CcTest::isolate()); |
45 Isolate* isolate = CcTest::i_isolate(); | 45 Isolate* isolate = CcTest::i_isolate(); |
46 Factory* factory = isolate->factory(); | 46 Factory* factory = isolate->factory(); |
47 | 47 |
48 Handle<String> name1 = factory->InternalizeUtf8String("foo"); | 48 Handle<String> name1 = factory->InternalizeUtf8String("foo"); |
49 Handle<String> name2 = factory->InternalizeUtf8String("bar"); | 49 Handle<String> name2 = factory->InternalizeUtf8String("bar"); |
50 PropertyAttributes attributes = NONE; | 50 PropertyAttributes attributes = NONE; |
51 | 51 |
52 Handle<Map> map0 = Map::Create(isolate, 0); | 52 Handle<Map> map0 = Map::Create(isolate, 0); |
53 Handle<Map> map1 = | 53 Handle<Map> map1 = |
54 Map::CopyWithField(map0, name1, handle(HeapType::Any(), isolate), | 54 Map::CopyWithField(map0, name1, handle(FieldType::Any(), isolate), |
55 attributes, Representation::Tagged(), | 55 attributes, Representation::Tagged(), OMIT_TRANSITION) |
56 OMIT_TRANSITION).ToHandleChecked(); | 56 .ToHandleChecked(); |
57 Handle<Map> map2 = | 57 Handle<Map> map2 = |
58 Map::CopyWithField(map0, name2, handle(HeapType::Any(), isolate), | 58 Map::CopyWithField(map0, name2, handle(FieldType::Any(), isolate), |
59 attributes, Representation::Tagged(), | 59 attributes, Representation::Tagged(), OMIT_TRANSITION) |
60 OMIT_TRANSITION).ToHandleChecked(); | 60 .ToHandleChecked(); |
61 | 61 |
62 CHECK(map0->raw_transitions()->IsSmi()); | 62 CHECK(map0->raw_transitions()->IsSmi()); |
63 | 63 |
64 TransitionArray::Insert(map0, name1, map1, SIMPLE_PROPERTY_TRANSITION); | 64 TransitionArray::Insert(map0, name1, map1, SIMPLE_PROPERTY_TRANSITION); |
65 CHECK(TransitionArray::IsSimpleTransition(map0->raw_transitions())); | 65 CHECK(TransitionArray::IsSimpleTransition(map0->raw_transitions())); |
66 CHECK_EQ(*map1, | 66 CHECK_EQ(*map1, |
67 TransitionArray::SearchTransition(*map0, kData, *name1, attributes)); | 67 TransitionArray::SearchTransition(*map0, kData, *name1, attributes)); |
68 CHECK_EQ(1, TransitionArray::NumberOfTransitions(map0->raw_transitions())); | 68 CHECK_EQ(1, TransitionArray::NumberOfTransitions(map0->raw_transitions())); |
69 CHECK_EQ(*name1, TransitionArray::GetKey(map0->raw_transitions(), 0)); | 69 CHECK_EQ(*name1, TransitionArray::GetKey(map0->raw_transitions(), 0)); |
70 CHECK_EQ(*map1, TransitionArray::GetTarget(map0->raw_transitions(), 0)); | 70 CHECK_EQ(*map1, TransitionArray::GetTarget(map0->raw_transitions(), 0)); |
(...skipping 24 matching lines...) Expand all Loading... |
95 v8::HandleScope scope(CcTest::isolate()); | 95 v8::HandleScope scope(CcTest::isolate()); |
96 Isolate* isolate = CcTest::i_isolate(); | 96 Isolate* isolate = CcTest::i_isolate(); |
97 Factory* factory = isolate->factory(); | 97 Factory* factory = isolate->factory(); |
98 | 98 |
99 Handle<String> name1 = factory->InternalizeUtf8String("foo"); | 99 Handle<String> name1 = factory->InternalizeUtf8String("foo"); |
100 Handle<String> name2 = factory->InternalizeUtf8String("bar"); | 100 Handle<String> name2 = factory->InternalizeUtf8String("bar"); |
101 PropertyAttributes attributes = NONE; | 101 PropertyAttributes attributes = NONE; |
102 | 102 |
103 Handle<Map> map0 = Map::Create(isolate, 0); | 103 Handle<Map> map0 = Map::Create(isolate, 0); |
104 Handle<Map> map1 = | 104 Handle<Map> map1 = |
105 Map::CopyWithField(map0, name1, handle(HeapType::Any(), isolate), | 105 Map::CopyWithField(map0, name1, handle(FieldType::Any(), isolate), |
106 attributes, Representation::Tagged(), | 106 attributes, Representation::Tagged(), OMIT_TRANSITION) |
107 OMIT_TRANSITION).ToHandleChecked(); | 107 .ToHandleChecked(); |
108 Handle<Map> map2 = | 108 Handle<Map> map2 = |
109 Map::CopyWithField(map0, name2, handle(HeapType::Any(), isolate), | 109 Map::CopyWithField(map0, name2, handle(FieldType::Any(), isolate), |
110 attributes, Representation::Tagged(), | 110 attributes, Representation::Tagged(), OMIT_TRANSITION) |
111 OMIT_TRANSITION).ToHandleChecked(); | 111 .ToHandleChecked(); |
112 | 112 |
113 CHECK(map0->raw_transitions()->IsSmi()); | 113 CHECK(map0->raw_transitions()->IsSmi()); |
114 | 114 |
115 TransitionArray::Insert(map0, name1, map1, PROPERTY_TRANSITION); | 115 TransitionArray::Insert(map0, name1, map1, PROPERTY_TRANSITION); |
116 CHECK(TransitionArray::IsFullTransitionArray(map0->raw_transitions())); | 116 CHECK(TransitionArray::IsFullTransitionArray(map0->raw_transitions())); |
117 CHECK_EQ(*map1, | 117 CHECK_EQ(*map1, |
118 TransitionArray::SearchTransition(*map0, kData, *name1, attributes)); | 118 TransitionArray::SearchTransition(*map0, kData, *name1, attributes)); |
119 CHECK_EQ(1, TransitionArray::NumberOfTransitions(map0->raw_transitions())); | 119 CHECK_EQ(1, TransitionArray::NumberOfTransitions(map0->raw_transitions())); |
120 CHECK_EQ(*name1, TransitionArray::GetKey(map0->raw_transitions(), 0)); | 120 CHECK_EQ(*name1, TransitionArray::GetKey(map0->raw_transitions(), 0)); |
121 CHECK_EQ(*map1, TransitionArray::GetTarget(map0->raw_transitions(), 0)); | 121 CHECK_EQ(*map1, TransitionArray::GetTarget(map0->raw_transitions(), 0)); |
(...skipping 30 matching lines...) Expand all Loading... |
152 Handle<Map> maps[PROPS_COUNT]; | 152 Handle<Map> maps[PROPS_COUNT]; |
153 PropertyAttributes attributes = NONE; | 153 PropertyAttributes attributes = NONE; |
154 | 154 |
155 Handle<Map> map0 = Map::Create(isolate, 0); | 155 Handle<Map> map0 = Map::Create(isolate, 0); |
156 CHECK(map0->raw_transitions()->IsSmi()); | 156 CHECK(map0->raw_transitions()->IsSmi()); |
157 | 157 |
158 for (int i = 0; i < PROPS_COUNT; i++) { | 158 for (int i = 0; i < PROPS_COUNT; i++) { |
159 EmbeddedVector<char, 64> buffer; | 159 EmbeddedVector<char, 64> buffer; |
160 SNPrintF(buffer, "prop%d", i); | 160 SNPrintF(buffer, "prop%d", i); |
161 Handle<String> name = factory->InternalizeUtf8String(buffer.start()); | 161 Handle<String> name = factory->InternalizeUtf8String(buffer.start()); |
162 Handle<Map> map = | 162 Handle<Map> map = Map::CopyWithField( |
163 Map::CopyWithField(map0, name, handle(HeapType::Any(), isolate), | 163 map0, name, handle(FieldType::Any(), isolate), |
164 attributes, Representation::Tagged(), | 164 attributes, Representation::Tagged(), OMIT_TRANSITION) |
165 OMIT_TRANSITION).ToHandleChecked(); | 165 .ToHandleChecked(); |
166 names[i] = name; | 166 names[i] = name; |
167 maps[i] = map; | 167 maps[i] = map; |
168 | 168 |
169 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); | 169 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); |
170 } | 170 } |
171 | 171 |
172 for (int i = 0; i < PROPS_COUNT; i++) { | 172 for (int i = 0; i < PROPS_COUNT; i++) { |
173 CHECK_EQ(*maps[i], TransitionArray::SearchTransition( | 173 CHECK_EQ(*maps[i], TransitionArray::SearchTransition( |
174 *map0, kData, *names[i], attributes)); | 174 *map0, kData, *names[i], attributes)); |
175 } | 175 } |
(...skipping 25 matching lines...) Expand all Loading... |
201 | 201 |
202 const int ATTRS_COUNT = (READ_ONLY | DONT_ENUM | DONT_DELETE) + 1; | 202 const int ATTRS_COUNT = (READ_ONLY | DONT_ENUM | DONT_DELETE) + 1; |
203 STATIC_ASSERT(ATTRS_COUNT == 8); | 203 STATIC_ASSERT(ATTRS_COUNT == 8); |
204 Handle<Map> attr_maps[ATTRS_COUNT]; | 204 Handle<Map> attr_maps[ATTRS_COUNT]; |
205 Handle<String> name = factory->InternalizeUtf8String("foo"); | 205 Handle<String> name = factory->InternalizeUtf8String("foo"); |
206 | 206 |
207 // Add transitions for same field name but different attributes. | 207 // Add transitions for same field name but different attributes. |
208 for (int i = 0; i < ATTRS_COUNT; i++) { | 208 for (int i = 0; i < ATTRS_COUNT; i++) { |
209 PropertyAttributes attributes = static_cast<PropertyAttributes>(i); | 209 PropertyAttributes attributes = static_cast<PropertyAttributes>(i); |
210 | 210 |
211 Handle<Map> map = | 211 Handle<Map> map = Map::CopyWithField( |
212 Map::CopyWithField(map0, name, handle(HeapType::Any(), isolate), | 212 map0, name, handle(FieldType::Any(), isolate), |
213 attributes, Representation::Tagged(), | 213 attributes, Representation::Tagged(), OMIT_TRANSITION) |
214 OMIT_TRANSITION).ToHandleChecked(); | 214 .ToHandleChecked(); |
215 attr_maps[i] = map; | 215 attr_maps[i] = map; |
216 | 216 |
217 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); | 217 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); |
218 } | 218 } |
219 | 219 |
220 // Ensure that transitions for |name| field are valid. | 220 // Ensure that transitions for |name| field are valid. |
221 for (int i = 0; i < ATTRS_COUNT; i++) { | 221 for (int i = 0; i < ATTRS_COUNT; i++) { |
222 PropertyAttributes attributes = static_cast<PropertyAttributes>(i); | 222 PropertyAttributes attributes = static_cast<PropertyAttributes>(i); |
223 CHECK_EQ(*attr_maps[i], TransitionArray::SearchTransition( | 223 CHECK_EQ(*attr_maps[i], TransitionArray::SearchTransition( |
224 *map0, kData, *name, attributes)); | 224 *map0, kData, *name, attributes)); |
(...skipping 20 matching lines...) Expand all Loading... |
245 | 245 |
246 Handle<Map> map0 = Map::Create(isolate, 0); | 246 Handle<Map> map0 = Map::Create(isolate, 0); |
247 CHECK(map0->raw_transitions()->IsSmi()); | 247 CHECK(map0->raw_transitions()->IsSmi()); |
248 | 248 |
249 // Some number of fields. | 249 // Some number of fields. |
250 for (int i = 0; i < PROPS_COUNT; i++) { | 250 for (int i = 0; i < PROPS_COUNT; i++) { |
251 EmbeddedVector<char, 64> buffer; | 251 EmbeddedVector<char, 64> buffer; |
252 SNPrintF(buffer, "prop%d", i); | 252 SNPrintF(buffer, "prop%d", i); |
253 Handle<String> name = factory->InternalizeUtf8String(buffer.start()); | 253 Handle<String> name = factory->InternalizeUtf8String(buffer.start()); |
254 Handle<Map> map = | 254 Handle<Map> map = |
255 Map::CopyWithField(map0, name, handle(HeapType::Any(), isolate), NONE, | 255 Map::CopyWithField(map0, name, handle(FieldType::Any(), isolate), NONE, |
256 Representation::Tagged(), | 256 Representation::Tagged(), OMIT_TRANSITION) |
257 OMIT_TRANSITION).ToHandleChecked(); | 257 .ToHandleChecked(); |
258 names[i] = name; | 258 names[i] = name; |
259 maps[i] = map; | 259 maps[i] = map; |
260 | 260 |
261 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); | 261 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); |
262 } | 262 } |
263 | 263 |
264 const int ATTRS_COUNT = (READ_ONLY | DONT_ENUM | DONT_DELETE) + 1; | 264 const int ATTRS_COUNT = (READ_ONLY | DONT_ENUM | DONT_DELETE) + 1; |
265 STATIC_ASSERT(ATTRS_COUNT == 8); | 265 STATIC_ASSERT(ATTRS_COUNT == 8); |
266 Handle<Map> attr_maps[ATTRS_COUNT]; | 266 Handle<Map> attr_maps[ATTRS_COUNT]; |
267 Handle<String> name = factory->InternalizeUtf8String("foo"); | 267 Handle<String> name = factory->InternalizeUtf8String("foo"); |
268 | 268 |
269 // Add transitions for same field name but different attributes. | 269 // Add transitions for same field name but different attributes. |
270 for (int i = 0; i < ATTRS_COUNT; i++) { | 270 for (int i = 0; i < ATTRS_COUNT; i++) { |
271 PropertyAttributes attributes = static_cast<PropertyAttributes>(i); | 271 PropertyAttributes attributes = static_cast<PropertyAttributes>(i); |
272 | 272 |
273 Handle<Map> map = | 273 Handle<Map> map = Map::CopyWithField( |
274 Map::CopyWithField(map0, name, handle(HeapType::Any(), isolate), | 274 map0, name, handle(FieldType::Any(), isolate), |
275 attributes, Representation::Tagged(), | 275 attributes, Representation::Tagged(), OMIT_TRANSITION) |
276 OMIT_TRANSITION).ToHandleChecked(); | 276 .ToHandleChecked(); |
277 attr_maps[i] = map; | 277 attr_maps[i] = map; |
278 | 278 |
279 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); | 279 TransitionArray::Insert(map0, name, map, PROPERTY_TRANSITION); |
280 } | 280 } |
281 | 281 |
282 // Ensure that transitions for |name| field are valid. | 282 // Ensure that transitions for |name| field are valid. |
283 for (int i = 0; i < ATTRS_COUNT; i++) { | 283 for (int i = 0; i < ATTRS_COUNT; i++) { |
284 PropertyAttributes attr = static_cast<PropertyAttributes>(i); | 284 PropertyAttributes attr = static_cast<PropertyAttributes>(i); |
285 CHECK_EQ(*attr_maps[i], | 285 CHECK_EQ(*attr_maps[i], |
286 TransitionArray::SearchTransition(*map0, kData, *name, attr)); | 286 TransitionArray::SearchTransition(*map0, kData, *name, attr)); |
(...skipping 17 matching lines...) Expand all Loading... |
304 break; | 304 break; |
305 } | 305 } |
306 } | 306 } |
307 } | 307 } |
308 } | 308 } |
309 | 309 |
310 #ifdef DEBUG | 310 #ifdef DEBUG |
311 CHECK(TransitionArray::IsSortedNoDuplicates(*map0)); | 311 CHECK(TransitionArray::IsSortedNoDuplicates(*map0)); |
312 #endif | 312 #endif |
313 } | 313 } |
OLD | NEW |