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 14 matching lines...) Expand all Loading... |
25 if (obj->IsUnboxedDoubleField(field_index)) { | 25 if (obj->IsUnboxedDoubleField(field_index)) { |
26 return obj->RawFastDoublePropertyAt(field_index); | 26 return obj->RawFastDoublePropertyAt(field_index); |
27 } else { | 27 } else { |
28 Object* value = obj->RawFastPropertyAt(field_index); | 28 Object* value = obj->RawFastPropertyAt(field_index); |
29 DCHECK(value->IsMutableHeapNumber()); | 29 DCHECK(value->IsMutableHeapNumber()); |
30 return HeapNumber::cast(value)->value(); | 30 return HeapNumber::cast(value)->value(); |
31 } | 31 } |
32 } | 32 } |
33 | 33 |
34 | 34 |
35 enum PropertyKind { | 35 enum TestPropertyKind { |
36 PROP_CONSTANT, | 36 PROP_CONSTANT, |
37 PROP_SMI, | 37 PROP_SMI, |
38 PROP_DOUBLE, | 38 PROP_DOUBLE, |
39 PROP_TAGGED, | 39 PROP_TAGGED, |
40 PROP_KIND_NUMBER | 40 PROP_KIND_NUMBER |
41 }; | 41 }; |
42 | 42 |
43 static Representation representations[PROP_KIND_NUMBER] = { | 43 static Representation representations[PROP_KIND_NUMBER] = { |
44 Representation::None(), Representation::Smi(), Representation::Double(), | 44 Representation::None(), Representation::Smi(), Representation::Double(), |
45 Representation::Tagged()}; | 45 Representation::Tagged()}; |
46 | 46 |
47 | 47 |
48 static Handle<DescriptorArray> CreateDescriptorArray(Isolate* isolate, | 48 static Handle<DescriptorArray> CreateDescriptorArray(Isolate* isolate, |
49 PropertyKind* props, | 49 TestPropertyKind* props, |
50 int kPropsCount) { | 50 int kPropsCount) { |
51 Factory* factory = isolate->factory(); | 51 Factory* factory = isolate->factory(); |
52 | 52 |
53 Handle<String> func_name = factory->InternalizeUtf8String("func"); | 53 Handle<String> func_name = factory->InternalizeUtf8String("func"); |
54 Handle<JSFunction> func = factory->NewFunction(func_name); | 54 Handle<JSFunction> func = factory->NewFunction(func_name); |
55 | 55 |
56 Handle<DescriptorArray> descriptors = | 56 Handle<DescriptorArray> descriptors = |
57 DescriptorArray::Allocate(isolate, 0, kPropsCount); | 57 DescriptorArray::Allocate(isolate, 0, kPropsCount); |
58 | 58 |
59 int next_field_offset = 0; | 59 int next_field_offset = 0; |
60 for (int i = 0; i < kPropsCount; i++) { | 60 for (int i = 0; i < kPropsCount; i++) { |
61 EmbeddedVector<char, 64> buffer; | 61 EmbeddedVector<char, 64> buffer; |
62 SNPrintF(buffer, "prop%d", i); | 62 SNPrintF(buffer, "prop%d", i); |
63 Handle<String> name = factory->InternalizeUtf8String(buffer.start()); | 63 Handle<String> name = factory->InternalizeUtf8String(buffer.start()); |
64 | 64 |
65 PropertyKind kind = props[i]; | 65 TestPropertyKind kind = props[i]; |
66 | 66 |
67 if (kind == PROP_CONSTANT) { | 67 if (kind == PROP_CONSTANT) { |
68 ConstantDescriptor d(name, func, NONE); | 68 ConstantDescriptor d(name, func, NONE); |
69 descriptors->Append(&d); | 69 descriptors->Append(&d); |
70 | 70 |
71 } else { | 71 } else { |
72 FieldDescriptor f(name, next_field_offset, NONE, representations[kind]); | 72 FieldDescriptor f(name, next_field_offset, NONE, representations[kind]); |
73 next_field_offset += f.GetDetails().field_width_in_words(); | 73 next_field_offset += f.GetDetails().field_width_in_words(); |
74 descriptors->Append(&f); | 74 descriptors->Append(&f); |
75 } | 75 } |
(...skipping 30 matching lines...) Expand all Loading... |
106 } | 106 } |
107 | 107 |
108 | 108 |
109 TEST(LayoutDescriptorBasicSlow) { | 109 TEST(LayoutDescriptorBasicSlow) { |
110 CcTest::InitializeVM(); | 110 CcTest::InitializeVM(); |
111 Isolate* isolate = CcTest::i_isolate(); | 111 Isolate* isolate = CcTest::i_isolate(); |
112 v8::HandleScope scope(CcTest::isolate()); | 112 v8::HandleScope scope(CcTest::isolate()); |
113 | 113 |
114 Handle<LayoutDescriptor> layout_descriptor; | 114 Handle<LayoutDescriptor> layout_descriptor; |
115 const int kPropsCount = kSmiValueSize * 3; | 115 const int kPropsCount = kSmiValueSize * 3; |
116 PropertyKind props[kPropsCount]; | 116 TestPropertyKind props[kPropsCount]; |
117 for (int i = 0; i < kPropsCount; i++) { | 117 for (int i = 0; i < kPropsCount; i++) { |
118 // All properties tagged. | 118 // All properties tagged. |
119 props[i] = PROP_TAGGED; | 119 props[i] = PROP_TAGGED; |
120 } | 120 } |
121 | 121 |
122 { | 122 { |
123 Handle<DescriptorArray> descriptors = | 123 Handle<DescriptorArray> descriptors = |
124 CreateDescriptorArray(isolate, props, kPropsCount); | 124 CreateDescriptorArray(isolate, props, kPropsCount); |
125 | 125 |
126 Handle<Map> map = Map::Create(isolate, kPropsCount); | 126 Handle<Map> map = Map::Create(isolate, kPropsCount); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 } | 195 } |
196 } | 196 } |
197 | 197 |
198 | 198 |
199 TEST(LayoutDescriptorCreateNewFast) { | 199 TEST(LayoutDescriptorCreateNewFast) { |
200 CcTest::InitializeVM(); | 200 CcTest::InitializeVM(); |
201 Isolate* isolate = CcTest::i_isolate(); | 201 Isolate* isolate = CcTest::i_isolate(); |
202 v8::HandleScope scope(CcTest::isolate()); | 202 v8::HandleScope scope(CcTest::isolate()); |
203 | 203 |
204 Handle<LayoutDescriptor> layout_descriptor; | 204 Handle<LayoutDescriptor> layout_descriptor; |
205 PropertyKind props[] = { | 205 TestPropertyKind props[] = { |
206 PROP_CONSTANT, | 206 PROP_CONSTANT, |
207 PROP_TAGGED, // field #0 | 207 PROP_TAGGED, // field #0 |
208 PROP_CONSTANT, | 208 PROP_CONSTANT, |
209 PROP_DOUBLE, // field #1 | 209 PROP_DOUBLE, // field #1 |
210 PROP_CONSTANT, | 210 PROP_CONSTANT, |
211 PROP_TAGGED, // field #2 | 211 PROP_TAGGED, // field #2 |
212 PROP_CONSTANT, | 212 PROP_CONSTANT, |
213 }; | 213 }; |
214 const int kPropsCount = arraysize(props); | 214 const int kPropsCount = arraysize(props); |
215 | 215 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 } | 247 } |
248 | 248 |
249 | 249 |
250 TEST(LayoutDescriptorCreateNewSlow) { | 250 TEST(LayoutDescriptorCreateNewSlow) { |
251 CcTest::InitializeVM(); | 251 CcTest::InitializeVM(); |
252 Isolate* isolate = CcTest::i_isolate(); | 252 Isolate* isolate = CcTest::i_isolate(); |
253 v8::HandleScope scope(CcTest::isolate()); | 253 v8::HandleScope scope(CcTest::isolate()); |
254 | 254 |
255 Handle<LayoutDescriptor> layout_descriptor; | 255 Handle<LayoutDescriptor> layout_descriptor; |
256 const int kPropsCount = kSmiValueSize * 3; | 256 const int kPropsCount = kSmiValueSize * 3; |
257 PropertyKind props[kPropsCount]; | 257 TestPropertyKind props[kPropsCount]; |
258 for (int i = 0; i < kPropsCount; i++) { | 258 for (int i = 0; i < kPropsCount; i++) { |
259 props[i] = static_cast<PropertyKind>(i % PROP_KIND_NUMBER); | 259 props[i] = static_cast<TestPropertyKind>(i % PROP_KIND_NUMBER); |
260 } | 260 } |
261 | 261 |
262 Handle<DescriptorArray> descriptors = | 262 Handle<DescriptorArray> descriptors = |
263 CreateDescriptorArray(isolate, props, kPropsCount); | 263 CreateDescriptorArray(isolate, props, kPropsCount); |
264 | 264 |
265 { | 265 { |
266 Handle<Map> map = Map::Create(isolate, 0); | 266 Handle<Map> map = Map::Create(isolate, 0); |
267 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); | 267 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); |
268 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); | 268 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); |
269 map->InitializeDescriptors(*descriptors, *layout_descriptor); | 269 map->InitializeDescriptors(*descriptors, *layout_descriptor); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 LayoutDescriptor::cast_gc_safe(layout_desc)); | 327 LayoutDescriptor::cast_gc_safe(layout_desc)); |
328 | 328 |
329 // Restore it back. | 329 // Restore it back. |
330 layout_desc->set_map_word(map_word); | 330 layout_desc->set_map_word(map_word); |
331 CHECK_EQ(layout_desc, LayoutDescriptor::cast(layout_desc)); | 331 CHECK_EQ(layout_desc, LayoutDescriptor::cast(layout_desc)); |
332 } | 332 } |
333 } | 333 } |
334 | 334 |
335 | 335 |
336 static Handle<LayoutDescriptor> TestLayoutDescriptorAppend( | 336 static Handle<LayoutDescriptor> TestLayoutDescriptorAppend( |
337 Isolate* isolate, int inobject_properties, PropertyKind* props, | 337 Isolate* isolate, int inobject_properties, TestPropertyKind* props, |
338 int kPropsCount) { | 338 int kPropsCount) { |
339 Factory* factory = isolate->factory(); | 339 Factory* factory = isolate->factory(); |
340 | 340 |
341 Handle<String> func_name = factory->InternalizeUtf8String("func"); | 341 Handle<String> func_name = factory->InternalizeUtf8String("func"); |
342 Handle<JSFunction> func = factory->NewFunction(func_name); | 342 Handle<JSFunction> func = factory->NewFunction(func_name); |
343 | 343 |
344 Handle<DescriptorArray> descriptors = | 344 Handle<DescriptorArray> descriptors = |
345 DescriptorArray::Allocate(isolate, 0, kPropsCount); | 345 DescriptorArray::Allocate(isolate, 0, kPropsCount); |
346 | 346 |
347 Handle<Map> map = Map::Create(isolate, inobject_properties); | 347 Handle<Map> map = Map::Create(isolate, inobject_properties); |
348 map->InitializeDescriptors(*descriptors, | 348 map->InitializeDescriptors(*descriptors, |
349 LayoutDescriptor::FastPointerLayout()); | 349 LayoutDescriptor::FastPointerLayout()); |
350 | 350 |
351 int next_field_offset = 0; | 351 int next_field_offset = 0; |
352 for (int i = 0; i < kPropsCount; i++) { | 352 for (int i = 0; i < kPropsCount; i++) { |
353 EmbeddedVector<char, 64> buffer; | 353 EmbeddedVector<char, 64> buffer; |
354 SNPrintF(buffer, "prop%d", i); | 354 SNPrintF(buffer, "prop%d", i); |
355 Handle<String> name = factory->InternalizeUtf8String(buffer.start()); | 355 Handle<String> name = factory->InternalizeUtf8String(buffer.start()); |
356 | 356 |
357 Handle<LayoutDescriptor> layout_descriptor; | 357 Handle<LayoutDescriptor> layout_descriptor; |
358 PropertyKind kind = props[i]; | 358 TestPropertyKind kind = props[i]; |
359 if (kind == PROP_CONSTANT) { | 359 if (kind == PROP_CONSTANT) { |
360 ConstantDescriptor d(name, func, NONE); | 360 ConstantDescriptor d(name, func, NONE); |
361 layout_descriptor = LayoutDescriptor::Append(map, d.GetDetails()); | 361 layout_descriptor = LayoutDescriptor::Append(map, d.GetDetails()); |
362 descriptors->Append(&d); | 362 descriptors->Append(&d); |
363 | 363 |
364 } else { | 364 } else { |
365 FieldDescriptor f(name, next_field_offset, NONE, representations[kind]); | 365 FieldDescriptor f(name, next_field_offset, NONE, representations[kind]); |
366 int field_width_in_words = f.GetDetails().field_width_in_words(); | 366 int field_width_in_words = f.GetDetails().field_width_in_words(); |
367 next_field_offset += field_width_in_words; | 367 next_field_offset += field_width_in_words; |
368 layout_descriptor = LayoutDescriptor::Append(map, f.GetDetails()); | 368 layout_descriptor = LayoutDescriptor::Append(map, f.GetDetails()); |
(...skipping 15 matching lines...) Expand all Loading... |
384 } | 384 } |
385 | 385 |
386 | 386 |
387 TEST(LayoutDescriptorAppend) { | 387 TEST(LayoutDescriptorAppend) { |
388 CcTest::InitializeVM(); | 388 CcTest::InitializeVM(); |
389 Isolate* isolate = CcTest::i_isolate(); | 389 Isolate* isolate = CcTest::i_isolate(); |
390 v8::HandleScope scope(CcTest::isolate()); | 390 v8::HandleScope scope(CcTest::isolate()); |
391 | 391 |
392 Handle<LayoutDescriptor> layout_descriptor; | 392 Handle<LayoutDescriptor> layout_descriptor; |
393 const int kPropsCount = kSmiValueSize * 3; | 393 const int kPropsCount = kSmiValueSize * 3; |
394 PropertyKind props[kPropsCount]; | 394 TestPropertyKind props[kPropsCount]; |
395 for (int i = 0; i < kPropsCount; i++) { | 395 for (int i = 0; i < kPropsCount; i++) { |
396 props[i] = static_cast<PropertyKind>(i % PROP_KIND_NUMBER); | 396 props[i] = static_cast<TestPropertyKind>(i % PROP_KIND_NUMBER); |
397 } | 397 } |
398 | 398 |
399 layout_descriptor = | 399 layout_descriptor = |
400 TestLayoutDescriptorAppend(isolate, 0, props, kPropsCount); | 400 TestLayoutDescriptorAppend(isolate, 0, props, kPropsCount); |
401 CHECK(!layout_descriptor->IsSlowLayout()); | 401 CHECK(!layout_descriptor->IsSlowLayout()); |
402 | 402 |
403 layout_descriptor = | 403 layout_descriptor = |
404 TestLayoutDescriptorAppend(isolate, 13, props, kPropsCount); | 404 TestLayoutDescriptorAppend(isolate, 13, props, kPropsCount); |
405 CHECK(!layout_descriptor->IsSlowLayout()); | 405 CHECK(!layout_descriptor->IsSlowLayout()); |
406 | 406 |
(...skipping 11 matching lines...) Expand all Loading... |
418 } | 418 } |
419 | 419 |
420 | 420 |
421 TEST(LayoutDescriptorAppendAllDoubles) { | 421 TEST(LayoutDescriptorAppendAllDoubles) { |
422 CcTest::InitializeVM(); | 422 CcTest::InitializeVM(); |
423 Isolate* isolate = CcTest::i_isolate(); | 423 Isolate* isolate = CcTest::i_isolate(); |
424 v8::HandleScope scope(CcTest::isolate()); | 424 v8::HandleScope scope(CcTest::isolate()); |
425 | 425 |
426 Handle<LayoutDescriptor> layout_descriptor; | 426 Handle<LayoutDescriptor> layout_descriptor; |
427 const int kPropsCount = kSmiValueSize * 3; | 427 const int kPropsCount = kSmiValueSize * 3; |
428 PropertyKind props[kPropsCount]; | 428 TestPropertyKind props[kPropsCount]; |
429 for (int i = 0; i < kPropsCount; i++) { | 429 for (int i = 0; i < kPropsCount; i++) { |
430 props[i] = PROP_DOUBLE; | 430 props[i] = PROP_DOUBLE; |
431 } | 431 } |
432 | 432 |
433 layout_descriptor = | 433 layout_descriptor = |
434 TestLayoutDescriptorAppend(isolate, 0, props, kPropsCount); | 434 TestLayoutDescriptorAppend(isolate, 0, props, kPropsCount); |
435 CHECK(!layout_descriptor->IsSlowLayout()); | 435 CHECK(!layout_descriptor->IsSlowLayout()); |
436 | 436 |
437 layout_descriptor = | 437 layout_descriptor = |
438 TestLayoutDescriptorAppend(isolate, 13, props, kPropsCount); | 438 TestLayoutDescriptorAppend(isolate, 13, props, kPropsCount); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 } | 516 } |
517 | 517 |
518 | 518 |
519 TEST(LayoutDescriptorAppendIfFastOrUseFull) { | 519 TEST(LayoutDescriptorAppendIfFastOrUseFull) { |
520 CcTest::InitializeVM(); | 520 CcTest::InitializeVM(); |
521 Isolate* isolate = CcTest::i_isolate(); | 521 Isolate* isolate = CcTest::i_isolate(); |
522 v8::HandleScope scope(CcTest::isolate()); | 522 v8::HandleScope scope(CcTest::isolate()); |
523 | 523 |
524 Handle<LayoutDescriptor> layout_descriptor; | 524 Handle<LayoutDescriptor> layout_descriptor; |
525 const int kPropsCount = kSmiValueSize * 3; | 525 const int kPropsCount = kSmiValueSize * 3; |
526 PropertyKind props[kPropsCount]; | 526 TestPropertyKind props[kPropsCount]; |
527 for (int i = 0; i < kPropsCount; i++) { | 527 for (int i = 0; i < kPropsCount; i++) { |
528 props[i] = static_cast<PropertyKind>(i % PROP_KIND_NUMBER); | 528 props[i] = static_cast<TestPropertyKind>(i % PROP_KIND_NUMBER); |
529 } | 529 } |
530 Handle<DescriptorArray> descriptors = | 530 Handle<DescriptorArray> descriptors = |
531 CreateDescriptorArray(isolate, props, kPropsCount); | 531 CreateDescriptorArray(isolate, props, kPropsCount); |
532 | 532 |
533 layout_descriptor = TestLayoutDescriptorAppendIfFastOrUseFull( | 533 layout_descriptor = TestLayoutDescriptorAppendIfFastOrUseFull( |
534 isolate, 0, descriptors, kPropsCount); | 534 isolate, 0, descriptors, kPropsCount); |
535 CHECK(!layout_descriptor->IsSlowLayout()); | 535 CHECK(!layout_descriptor->IsSlowLayout()); |
536 | 536 |
537 layout_descriptor = TestLayoutDescriptorAppendIfFastOrUseFull( | 537 layout_descriptor = TestLayoutDescriptorAppendIfFastOrUseFull( |
538 isolate, 13, descriptors, kPropsCount); | 538 isolate, 13, descriptors, kPropsCount); |
(...skipping 13 matching lines...) Expand all Loading... |
552 } | 552 } |
553 | 553 |
554 | 554 |
555 TEST(LayoutDescriptorAppendIfFastOrUseFullAllDoubles) { | 555 TEST(LayoutDescriptorAppendIfFastOrUseFullAllDoubles) { |
556 CcTest::InitializeVM(); | 556 CcTest::InitializeVM(); |
557 Isolate* isolate = CcTest::i_isolate(); | 557 Isolate* isolate = CcTest::i_isolate(); |
558 v8::HandleScope scope(CcTest::isolate()); | 558 v8::HandleScope scope(CcTest::isolate()); |
559 | 559 |
560 Handle<LayoutDescriptor> layout_descriptor; | 560 Handle<LayoutDescriptor> layout_descriptor; |
561 const int kPropsCount = kSmiValueSize * 3; | 561 const int kPropsCount = kSmiValueSize * 3; |
562 PropertyKind props[kPropsCount]; | 562 TestPropertyKind props[kPropsCount]; |
563 for (int i = 0; i < kPropsCount; i++) { | 563 for (int i = 0; i < kPropsCount; i++) { |
564 props[i] = PROP_DOUBLE; | 564 props[i] = PROP_DOUBLE; |
565 } | 565 } |
566 Handle<DescriptorArray> descriptors = | 566 Handle<DescriptorArray> descriptors = |
567 CreateDescriptorArray(isolate, props, kPropsCount); | 567 CreateDescriptorArray(isolate, props, kPropsCount); |
568 | 568 |
569 layout_descriptor = TestLayoutDescriptorAppendIfFastOrUseFull( | 569 layout_descriptor = TestLayoutDescriptorAppendIfFastOrUseFull( |
570 isolate, 0, descriptors, kPropsCount); | 570 isolate, 0, descriptors, kPropsCount); |
571 CHECK(!layout_descriptor->IsSlowLayout()); | 571 CHECK(!layout_descriptor->IsSlowLayout()); |
572 | 572 |
(...skipping 30 matching lines...) Expand all Loading... |
603 } | 603 } |
604 | 604 |
605 | 605 |
606 TEST(Regress436816) { | 606 TEST(Regress436816) { |
607 CcTest::InitializeVM(); | 607 CcTest::InitializeVM(); |
608 Isolate* isolate = CcTest::i_isolate(); | 608 Isolate* isolate = CcTest::i_isolate(); |
609 Factory* factory = isolate->factory(); | 609 Factory* factory = isolate->factory(); |
610 v8::HandleScope scope(CcTest::isolate()); | 610 v8::HandleScope scope(CcTest::isolate()); |
611 | 611 |
612 const int kPropsCount = kSmiValueSize * 3; | 612 const int kPropsCount = kSmiValueSize * 3; |
613 PropertyKind props[kPropsCount]; | 613 TestPropertyKind props[kPropsCount]; |
614 for (int i = 0; i < kPropsCount; i++) { | 614 for (int i = 0; i < kPropsCount; i++) { |
615 props[i] = PROP_DOUBLE; | 615 props[i] = PROP_DOUBLE; |
616 } | 616 } |
617 Handle<DescriptorArray> descriptors = | 617 Handle<DescriptorArray> descriptors = |
618 CreateDescriptorArray(isolate, props, kPropsCount); | 618 CreateDescriptorArray(isolate, props, kPropsCount); |
619 | 619 |
620 Handle<Map> map = Map::Create(isolate, kPropsCount); | 620 Handle<Map> map = Map::Create(isolate, kPropsCount); |
621 Handle<LayoutDescriptor> layout_descriptor = | 621 Handle<LayoutDescriptor> layout_descriptor = |
622 LayoutDescriptor::New(map, descriptors, kPropsCount); | 622 LayoutDescriptor::New(map, descriptors, kPropsCount); |
623 map->InitializeDescriptors(*descriptors, *layout_descriptor); | 623 map->InitializeDescriptors(*descriptors, *layout_descriptor); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 MemoryChunk* chunk = MemoryChunk::FromAddress(obj->address()); | 765 MemoryChunk* chunk = MemoryChunk::FromAddress(obj->address()); |
766 chunk->set_scan_on_scavenge(true); | 766 chunk->set_scan_on_scavenge(true); |
767 | 767 |
768 // Trigger GCs and force evacuation. Should not crash there. | 768 // Trigger GCs and force evacuation. Should not crash there. |
769 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); | 769 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
770 | 770 |
771 CHECK_EQ(boom_value, GetDoubleFieldValue(*obj, field_index)); | 771 CHECK_EQ(boom_value, GetDoubleFieldValue(*obj, field_index)); |
772 } | 772 } |
773 | 773 |
774 #endif | 774 #endif |
OLD | NEW |