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

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

Issue 920993003: Fix compilation for the case dcheck_always_on=1. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: compile error was fixed Created 5 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 | « no previous file | 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"
11 #include "src/execution.h" 11 #include "src/execution.h"
12 #include "src/factory.h" 12 #include "src/factory.h"
13 #include "src/global-handles.h" 13 #include "src/global-handles.h"
14 #include "src/ic/ic.h" 14 #include "src/ic/ic.h"
15 #include "src/macro-assembler.h" 15 #include "src/macro-assembler.h"
16 #include "test/cctest/cctest.h" 16 #include "test/cctest/cctest.h"
17 17
18 using namespace v8::base; 18 using namespace v8::base;
19 using namespace v8::internal; 19 using namespace v8::internal;
20 20
21 #if (V8_DOUBLE_FIELDS_UNBOXING) 21 #if (V8_DOUBLE_FIELDS_UNBOXING)
22 22
23 23
24 // 24 //
25 // Helper functions. 25 // Helper functions.
26 // 26 //
27 27
28
29 static void InitializeVerifiedMapDescriptors(
30 Map* map, DescriptorArray* descriptors,
31 LayoutDescriptor* layout_descriptor) {
32 map->InitializeDescriptors(descriptors, layout_descriptor);
33 #ifdef VERIFY_HEAP
34 if (FLAG_verify_heap) {
35 DCHECK(layout_descriptor->IsConsistentWithMap(map));
36 }
37 #endif
38 }
39
40
28 static Handle<String> MakeString(const char* str) { 41 static Handle<String> MakeString(const char* str) {
29 Isolate* isolate = CcTest::i_isolate(); 42 Isolate* isolate = CcTest::i_isolate();
30 Factory* factory = isolate->factory(); 43 Factory* factory = isolate->factory();
31 return factory->InternalizeUtf8String(str); 44 return factory->InternalizeUtf8String(str);
32 } 45 }
33 46
34 47
35 static Handle<String> MakeName(const char* str, int suffix) { 48 static Handle<String> MakeName(const char* str, int suffix) {
36 EmbeddedVector<char, 128> buffer; 49 EmbeddedVector<char, 128> buffer;
37 SNPrintF(buffer, "%s%d", str, suffix); 50 SNPrintF(buffer, "%s%d", str, suffix);
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 162
150 { 163 {
151 Handle<DescriptorArray> descriptors = 164 Handle<DescriptorArray> descriptors =
152 CreateDescriptorArray(isolate, props, kPropsCount); 165 CreateDescriptorArray(isolate, props, kPropsCount);
153 166
154 Handle<Map> map = Map::Create(isolate, kPropsCount); 167 Handle<Map> map = Map::Create(isolate, kPropsCount);
155 168
156 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); 169 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount);
157 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); 170 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor);
158 CHECK_EQ(kSmiValueSize, layout_descriptor->capacity()); 171 CHECK_EQ(kSmiValueSize, layout_descriptor->capacity());
159 map->InitializeDescriptors(*descriptors, *layout_descriptor); 172 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
160 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
161 } 173 }
162 174
163 props[0] = PROP_DOUBLE; 175 props[0] = PROP_DOUBLE;
164 props[kPropsCount - 1] = PROP_DOUBLE; 176 props[kPropsCount - 1] = PROP_DOUBLE;
165 177
166 Handle<DescriptorArray> descriptors = 178 Handle<DescriptorArray> descriptors =
167 CreateDescriptorArray(isolate, props, kPropsCount); 179 CreateDescriptorArray(isolate, props, kPropsCount);
168 180
169 { 181 {
170 int inobject_properties = kPropsCount - 1; 182 int inobject_properties = kPropsCount - 1;
171 Handle<Map> map = Map::Create(isolate, inobject_properties); 183 Handle<Map> map = Map::Create(isolate, inobject_properties);
172 184
173 // Should be fast as the only double property is the first one. 185 // Should be fast as the only double property is the first one.
174 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); 186 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount);
175 CHECK_NE(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); 187 CHECK_NE(LayoutDescriptor::FastPointerLayout(), *layout_descriptor);
176 CHECK(!layout_descriptor->IsSlowLayout()); 188 CHECK(!layout_descriptor->IsSlowLayout());
177 CHECK(!layout_descriptor->IsFastPointerLayout()); 189 CHECK(!layout_descriptor->IsFastPointerLayout());
178 190
179 CHECK_EQ(false, layout_descriptor->IsTagged(0)); 191 CHECK_EQ(false, layout_descriptor->IsTagged(0));
180 for (int i = 1; i < kPropsCount; i++) { 192 for (int i = 1; i < kPropsCount; i++) {
181 CHECK_EQ(true, layout_descriptor->IsTagged(i)); 193 CHECK_EQ(true, layout_descriptor->IsTagged(i));
182 } 194 }
183 map->InitializeDescriptors(*descriptors, *layout_descriptor); 195 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
184 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
185 } 196 }
186 197
187 { 198 {
188 int inobject_properties = kPropsCount; 199 int inobject_properties = kPropsCount;
189 Handle<Map> map = Map::Create(isolate, inobject_properties); 200 Handle<Map> map = Map::Create(isolate, inobject_properties);
190 201
191 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); 202 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount);
192 CHECK_NE(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); 203 CHECK_NE(LayoutDescriptor::FastPointerLayout(), *layout_descriptor);
193 CHECK(layout_descriptor->IsSlowLayout()); 204 CHECK(layout_descriptor->IsSlowLayout());
194 CHECK(!layout_descriptor->IsFastPointerLayout()); 205 CHECK(!layout_descriptor->IsFastPointerLayout());
195 CHECK(layout_descriptor->capacity() > kSmiValueSize); 206 CHECK(layout_descriptor->capacity() > kSmiValueSize);
196 207
197 CHECK_EQ(false, layout_descriptor->IsTagged(0)); 208 CHECK_EQ(false, layout_descriptor->IsTagged(0));
198 CHECK_EQ(false, layout_descriptor->IsTagged(kPropsCount - 1)); 209 CHECK_EQ(false, layout_descriptor->IsTagged(kPropsCount - 1));
199 for (int i = 1; i < kPropsCount - 1; i++) { 210 for (int i = 1; i < kPropsCount - 1; i++) {
200 CHECK_EQ(true, layout_descriptor->IsTagged(i)); 211 CHECK_EQ(true, layout_descriptor->IsTagged(i));
201 } 212 }
202 213
203 map->InitializeDescriptors(*descriptors, *layout_descriptor); 214 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
204 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
205 215
206 // Here we have truly slow layout descriptor, so play with the bits. 216 // Here we have truly slow layout descriptor, so play with the bits.
207 CHECK_EQ(true, layout_descriptor->IsTagged(-1)); 217 CHECK_EQ(true, layout_descriptor->IsTagged(-1));
208 CHECK_EQ(true, layout_descriptor->IsTagged(-12347)); 218 CHECK_EQ(true, layout_descriptor->IsTagged(-12347));
209 CHECK_EQ(true, layout_descriptor->IsTagged(15635)); 219 CHECK_EQ(true, layout_descriptor->IsTagged(15635));
210 220
211 LayoutDescriptor* layout_desc = *layout_descriptor; 221 LayoutDescriptor* layout_desc = *layout_descriptor;
212 // Play with the bits but leave it in consistent state with map at the end. 222 // Play with the bits but leave it in consistent state with map at the end.
213 for (int i = 1; i < kPropsCount - 1; i++) { 223 for (int i = 1; i < kPropsCount - 1; i++) {
214 layout_desc = layout_desc->SetTaggedForTesting(i, false); 224 layout_desc = layout_desc->SetTaggedForTesting(i, false);
215 CHECK_EQ(false, layout_desc->IsTagged(i)); 225 CHECK_EQ(false, layout_desc->IsTagged(i));
216 layout_desc = layout_desc->SetTaggedForTesting(i, true); 226 layout_desc = layout_desc->SetTaggedForTesting(i, true);
217 CHECK_EQ(true, layout_desc->IsTagged(i)); 227 CHECK_EQ(true, layout_desc->IsTagged(i));
218 } 228 }
219 CHECK(layout_desc->IsSlowLayout()); 229 CHECK(layout_desc->IsSlowLayout());
220 CHECK(!layout_desc->IsFastPointerLayout()); 230 CHECK(!layout_desc->IsFastPointerLayout());
221 231 #ifdef VERIFY_HEAP
222 DCHECK(layout_descriptor->IsConsistentWithMap(*map)); 232 if (FLAG_verify_heap) {
233 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
234 }
235 #endif
223 } 236 }
224 } 237 }
225 238
226 239
227 static void TestLayoutDescriptorQueries(int layout_descriptor_length, 240 static void TestLayoutDescriptorQueries(int layout_descriptor_length,
228 int* bit_flip_positions, 241 int* bit_flip_positions,
229 int max_sequence_length) { 242 int max_sequence_length) {
230 Handle<LayoutDescriptor> layout_descriptor = LayoutDescriptor::NewForTesting( 243 Handle<LayoutDescriptor> layout_descriptor = LayoutDescriptor::NewForTesting(
231 CcTest::i_isolate(), layout_descriptor_length); 244 CcTest::i_isolate(), layout_descriptor_length);
232 layout_descriptor_length = layout_descriptor->capacity(); 245 layout_descriptor_length = layout_descriptor->capacity();
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 }; 487 };
475 const int kPropsCount = arraysize(props); 488 const int kPropsCount = arraysize(props);
476 489
477 Handle<DescriptorArray> descriptors = 490 Handle<DescriptorArray> descriptors =
478 CreateDescriptorArray(isolate, props, kPropsCount); 491 CreateDescriptorArray(isolate, props, kPropsCount);
479 492
480 { 493 {
481 Handle<Map> map = Map::Create(isolate, 0); 494 Handle<Map> map = Map::Create(isolate, 0);
482 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); 495 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount);
483 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); 496 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor);
484 map->InitializeDescriptors(*descriptors, *layout_descriptor); 497 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
485 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
486 } 498 }
487 499
488 { 500 {
489 Handle<Map> map = Map::Create(isolate, 1); 501 Handle<Map> map = Map::Create(isolate, 1);
490 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); 502 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount);
491 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); 503 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor);
492 map->InitializeDescriptors(*descriptors, *layout_descriptor); 504 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
493 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
494 } 505 }
495 506
496 { 507 {
497 Handle<Map> map = Map::Create(isolate, 2); 508 Handle<Map> map = Map::Create(isolate, 2);
498 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); 509 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount);
499 CHECK_NE(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); 510 CHECK_NE(LayoutDescriptor::FastPointerLayout(), *layout_descriptor);
500 CHECK(!layout_descriptor->IsSlowLayout()); 511 CHECK(!layout_descriptor->IsSlowLayout());
501 CHECK_EQ(true, layout_descriptor->IsTagged(0)); 512 CHECK_EQ(true, layout_descriptor->IsTagged(0));
502 CHECK_EQ(false, layout_descriptor->IsTagged(1)); 513 CHECK_EQ(false, layout_descriptor->IsTagged(1));
503 CHECK_EQ(true, layout_descriptor->IsTagged(2)); 514 CHECK_EQ(true, layout_descriptor->IsTagged(2));
504 CHECK_EQ(true, layout_descriptor->IsTagged(125)); 515 CHECK_EQ(true, layout_descriptor->IsTagged(125));
505 map->InitializeDescriptors(*descriptors, *layout_descriptor); 516 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
506 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
507 } 517 }
508 } 518 }
509 519
510 520
511 TEST(LayoutDescriptorCreateNewSlow) { 521 TEST(LayoutDescriptorCreateNewSlow) {
512 CcTest::InitializeVM(); 522 CcTest::InitializeVM();
513 Isolate* isolate = CcTest::i_isolate(); 523 Isolate* isolate = CcTest::i_isolate();
514 v8::HandleScope scope(CcTest::isolate()); 524 v8::HandleScope scope(CcTest::isolate());
515 525
516 Handle<LayoutDescriptor> layout_descriptor; 526 Handle<LayoutDescriptor> layout_descriptor;
517 const int kPropsCount = kSmiValueSize * 3; 527 const int kPropsCount = kSmiValueSize * 3;
518 TestPropertyKind props[kPropsCount]; 528 TestPropertyKind props[kPropsCount];
519 for (int i = 0; i < kPropsCount; i++) { 529 for (int i = 0; i < kPropsCount; i++) {
520 props[i] = static_cast<TestPropertyKind>(i % PROP_KIND_NUMBER); 530 props[i] = static_cast<TestPropertyKind>(i % PROP_KIND_NUMBER);
521 } 531 }
522 532
523 Handle<DescriptorArray> descriptors = 533 Handle<DescriptorArray> descriptors =
524 CreateDescriptorArray(isolate, props, kPropsCount); 534 CreateDescriptorArray(isolate, props, kPropsCount);
525 535
526 { 536 {
527 Handle<Map> map = Map::Create(isolate, 0); 537 Handle<Map> map = Map::Create(isolate, 0);
528 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); 538 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount);
529 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); 539 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor);
530 map->InitializeDescriptors(*descriptors, *layout_descriptor); 540 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
531 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
532 } 541 }
533 542
534 { 543 {
535 Handle<Map> map = Map::Create(isolate, 1); 544 Handle<Map> map = Map::Create(isolate, 1);
536 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); 545 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount);
537 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); 546 CHECK_EQ(LayoutDescriptor::FastPointerLayout(), *layout_descriptor);
538 map->InitializeDescriptors(*descriptors, *layout_descriptor); 547 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
539 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
540 } 548 }
541 549
542 { 550 {
543 Handle<Map> map = Map::Create(isolate, 2); 551 Handle<Map> map = Map::Create(isolate, 2);
544 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); 552 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount);
545 CHECK_NE(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); 553 CHECK_NE(LayoutDescriptor::FastPointerLayout(), *layout_descriptor);
546 CHECK(!layout_descriptor->IsSlowLayout()); 554 CHECK(!layout_descriptor->IsSlowLayout());
547 CHECK_EQ(true, layout_descriptor->IsTagged(0)); 555 CHECK_EQ(true, layout_descriptor->IsTagged(0));
548 CHECK_EQ(false, layout_descriptor->IsTagged(1)); 556 CHECK_EQ(false, layout_descriptor->IsTagged(1));
549 CHECK_EQ(true, layout_descriptor->IsTagged(2)); 557 CHECK_EQ(true, layout_descriptor->IsTagged(2));
550 CHECK_EQ(true, layout_descriptor->IsTagged(125)); 558 CHECK_EQ(true, layout_descriptor->IsTagged(125));
551 map->InitializeDescriptors(*descriptors, *layout_descriptor); 559 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
552 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
553 } 560 }
554 561
555 { 562 {
556 int inobject_properties = kPropsCount / 2; 563 int inobject_properties = kPropsCount / 2;
557 Handle<Map> map = Map::Create(isolate, inobject_properties); 564 Handle<Map> map = Map::Create(isolate, inobject_properties);
558 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount); 565 layout_descriptor = LayoutDescriptor::New(map, descriptors, kPropsCount);
559 CHECK_NE(LayoutDescriptor::FastPointerLayout(), *layout_descriptor); 566 CHECK_NE(LayoutDescriptor::FastPointerLayout(), *layout_descriptor);
560 CHECK(layout_descriptor->IsSlowLayout()); 567 CHECK(layout_descriptor->IsSlowLayout());
561 for (int i = 0; i < inobject_properties; i++) { 568 for (int i = 0; i < inobject_properties; i++) {
562 // PROP_DOUBLE has index 1 among DATA properties. 569 // PROP_DOUBLE has index 1 among DATA properties.
563 const bool tagged = (i % (PROP_KIND_NUMBER - 1)) != 1; 570 const bool tagged = (i % (PROP_KIND_NUMBER - 1)) != 1;
564 CHECK_EQ(tagged, layout_descriptor->IsTagged(i)); 571 CHECK_EQ(tagged, layout_descriptor->IsTagged(i));
565 } 572 }
566 // Every property after inobject_properties must be tagged. 573 // Every property after inobject_properties must be tagged.
567 for (int i = inobject_properties; i < kPropsCount; i++) { 574 for (int i = inobject_properties; i < kPropsCount; i++) {
568 CHECK_EQ(true, layout_descriptor->IsTagged(i)); 575 CHECK_EQ(true, layout_descriptor->IsTagged(i));
569 } 576 }
570 map->InitializeDescriptors(*descriptors, *layout_descriptor); 577 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
571 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
572 578
573 // Now test LayoutDescriptor::cast_gc_safe(). 579 // Now test LayoutDescriptor::cast_gc_safe().
574 Handle<LayoutDescriptor> layout_descriptor_copy = 580 Handle<LayoutDescriptor> layout_descriptor_copy =
575 LayoutDescriptor::New(map, descriptors, kPropsCount); 581 LayoutDescriptor::New(map, descriptors, kPropsCount);
576 582
577 LayoutDescriptor* layout_desc = *layout_descriptor; 583 LayoutDescriptor* layout_desc = *layout_descriptor;
578 CHECK_EQ(layout_desc, LayoutDescriptor::cast(layout_desc)); 584 CHECK_EQ(layout_desc, LayoutDescriptor::cast(layout_desc));
579 CHECK_EQ(layout_desc, LayoutDescriptor::cast_gc_safe(layout_desc)); 585 CHECK_EQ(layout_desc, LayoutDescriptor::cast_gc_safe(layout_desc));
580 CHECK(layout_descriptor->IsFixedTypedArrayBase()); 586 CHECK(layout_descriptor->IsFixedTypedArrayBase());
581 // Now make it look like a forwarding pointer to layout_descriptor_copy. 587 // Now make it look like a forwarding pointer to layout_descriptor_copy.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 bool is_inobject = field_index < map->inobject_properties(); 639 bool is_inobject = field_index < map->inobject_properties();
634 for (int bit = 0; bit < field_width_in_words; bit++) { 640 for (int bit = 0; bit < field_width_in_words; bit++) {
635 CHECK_EQ(is_inobject && (kind == PROP_DOUBLE), 641 CHECK_EQ(is_inobject && (kind == PROP_DOUBLE),
636 !layout_descriptor->IsTagged(field_index + bit)); 642 !layout_descriptor->IsTagged(field_index + bit));
637 } 643 }
638 CHECK(layout_descriptor->IsTagged(next_field_offset)); 644 CHECK(layout_descriptor->IsTagged(next_field_offset));
639 } 645 }
640 map->InitializeDescriptors(*descriptors, *layout_descriptor); 646 map->InitializeDescriptors(*descriptors, *layout_descriptor);
641 } 647 }
642 Handle<LayoutDescriptor> layout_descriptor(map->layout_descriptor(), isolate); 648 Handle<LayoutDescriptor> layout_descriptor(map->layout_descriptor(), isolate);
643 DCHECK(layout_descriptor->IsConsistentWithMap(*map)); 649 #ifdef VERIFY_HEAP
650 if (FLAG_verify_heap) {
651 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
652 }
653 #endif
644 return layout_descriptor; 654 return layout_descriptor;
645 } 655 }
646 656
647 657
648 TEST(LayoutDescriptorAppend) { 658 TEST(LayoutDescriptorAppend) {
649 CcTest::InitializeVM(); 659 CcTest::InitializeVM();
650 Isolate* isolate = CcTest::i_isolate(); 660 Isolate* isolate = CcTest::i_isolate();
651 v8::HandleScope scope(CcTest::isolate()); 661 v8::HandleScope scope(CcTest::isolate());
652 662
653 Handle<LayoutDescriptor> layout_descriptor; 663 Handle<LayoutDescriptor> layout_descriptor;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 int field_width_in_words = details.field_width_in_words(); 770 int field_width_in_words = details.field_width_in_words();
761 771
762 bool is_inobject = field_index < map->inobject_properties(); 772 bool is_inobject = field_index < map->inobject_properties();
763 for (int bit = 0; bit < field_width_in_words; bit++) { 773 for (int bit = 0; bit < field_width_in_words; bit++) {
764 CHECK_EQ(is_inobject && details.representation().IsDouble(), 774 CHECK_EQ(is_inobject && details.representation().IsDouble(),
765 !layout_desc->IsTagged(field_index + bit)); 775 !layout_desc->IsTagged(field_index + bit));
766 } 776 }
767 CHECK(layout_desc->IsTagged(field_index + field_width_in_words)); 777 CHECK(layout_desc->IsTagged(field_index + field_width_in_words));
768 } 778 }
769 } 779 }
770 DCHECK(map->layout_descriptor()->IsConsistentWithMap(*map)); 780 #ifdef VERIFY_HEAP
781 if (FLAG_verify_heap) {
782 DCHECK(map->layout_descriptor()->IsConsistentWithMap(*map));
783 }
784 #endif
771 } 785 }
772 786
773 Handle<LayoutDescriptor> layout_descriptor(map->GetLayoutDescriptor(), 787 Handle<LayoutDescriptor> layout_descriptor(map->GetLayoutDescriptor(),
774 isolate); 788 isolate);
775 DCHECK(layout_descriptor->IsConsistentWithMap(*map)); 789 #ifdef VERIFY_HEAP
790 if (FLAG_verify_heap) {
791 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
792 }
793 #endif
776 return layout_descriptor; 794 return layout_descriptor;
777 } 795 }
778 796
779 797
780 TEST(LayoutDescriptorAppendIfFastOrUseFull) { 798 TEST(LayoutDescriptorAppendIfFastOrUseFull) {
781 CcTest::InitializeVM(); 799 CcTest::InitializeVM();
782 Isolate* isolate = CcTest::i_isolate(); 800 Isolate* isolate = CcTest::i_isolate();
783 v8::HandleScope scope(CcTest::isolate()); 801 v8::HandleScope scope(CcTest::isolate());
784 802
785 Handle<LayoutDescriptor> layout_descriptor; 803 Handle<LayoutDescriptor> layout_descriptor;
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 988
971 989
972 static void TestLayoutDescriptorHelper(Isolate* isolate, 990 static void TestLayoutDescriptorHelper(Isolate* isolate,
973 int inobject_properties, 991 int inobject_properties,
974 Handle<DescriptorArray> descriptors, 992 Handle<DescriptorArray> descriptors,
975 int number_of_descriptors) { 993 int number_of_descriptors) {
976 Handle<Map> map = Map::Create(isolate, inobject_properties); 994 Handle<Map> map = Map::Create(isolate, inobject_properties);
977 995
978 Handle<LayoutDescriptor> layout_descriptor = LayoutDescriptor::New( 996 Handle<LayoutDescriptor> layout_descriptor = LayoutDescriptor::New(
979 map, descriptors, descriptors->number_of_descriptors()); 997 map, descriptors, descriptors->number_of_descriptors());
980 map->InitializeDescriptors(*descriptors, *layout_descriptor); 998 InitializeVerifiedMapDescriptors(*map, *descriptors, *layout_descriptor);
981 DCHECK(layout_descriptor->IsConsistentWithMap(*map));
982 999
983 LayoutDescriptorHelper helper(*map); 1000 LayoutDescriptorHelper helper(*map);
984 bool all_fields_tagged = true; 1001 bool all_fields_tagged = true;
985 1002
986 int instance_size = map->instance_size(); 1003 int instance_size = map->instance_size();
987 1004
988 int end_offset = instance_size * 2; 1005 int end_offset = instance_size * 2;
989 int first_non_tagged_field_offset = end_offset; 1006 int first_non_tagged_field_offset = end_offset;
990 for (int i = 0; i < number_of_descriptors; i++) { 1007 for (int i = 0; i < number_of_descriptors; i++) {
991 PropertyDetails details = descriptors->GetDetails(i); 1008 PropertyDetails details = descriptors->GetDetails(i);
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 Handle<String> name = MakeName("prop", i); 1144 Handle<String> name = MakeName("prop", i);
1128 map = Map::CopyWithField(map, name, any_type, NONE, Representation::Smi(), 1145 map = Map::CopyWithField(map, name, any_type, NONE, Representation::Smi(),
1129 INSERT_TRANSITION).ToHandleChecked(); 1146 INSERT_TRANSITION).ToHandleChecked();
1130 } 1147 }
1131 split_map = Map::CopyWithField(map, MakeString("dbl"), any_type, NONE, 1148 split_map = Map::CopyWithField(map, MakeString("dbl"), any_type, NONE,
1132 Representation::Double(), 1149 Representation::Double(),
1133 INSERT_TRANSITION).ToHandleChecked(); 1150 INSERT_TRANSITION).ToHandleChecked();
1134 } 1151 }
1135 Handle<LayoutDescriptor> split_layout_descriptor( 1152 Handle<LayoutDescriptor> split_layout_descriptor(
1136 split_map->layout_descriptor(), isolate); 1153 split_map->layout_descriptor(), isolate);
1137 DCHECK(split_layout_descriptor->IsConsistentWithMap(*split_map)); 1154 #ifdef VERIFY_HEAP
1155 if (FLAG_verify_heap) {
1156 DCHECK(split_layout_descriptor->IsConsistentWithMap(*split_map));
1157 }
1158 #endif
1138 CHECK(split_layout_descriptor->IsSlowLayout()); 1159 CHECK(split_layout_descriptor->IsSlowLayout());
1139 CHECK(split_map->owns_descriptors()); 1160 CHECK(split_map->owns_descriptors());
1140 1161
1141 Handle<Map> map1 = Map::CopyWithField(split_map, MakeString("foo"), any_type, 1162 Handle<Map> map1 = Map::CopyWithField(split_map, MakeString("foo"), any_type,
1142 NONE, Representation::Double(), 1163 NONE, Representation::Double(),
1143 INSERT_TRANSITION).ToHandleChecked(); 1164 INSERT_TRANSITION).ToHandleChecked();
1144 CHECK(!split_map->owns_descriptors()); 1165 CHECK(!split_map->owns_descriptors());
1145 CHECK_EQ(*split_layout_descriptor, split_map->layout_descriptor()); 1166 CHECK_EQ(*split_layout_descriptor, split_map->layout_descriptor());
1146 1167
1147 // Layout descriptors should be shared with |split_map|. 1168 // Layout descriptors should be shared with |split_map|.
1148 CHECK(map1->owns_descriptors()); 1169 CHECK(map1->owns_descriptors());
1149 CHECK_EQ(*split_layout_descriptor, map1->layout_descriptor()); 1170 CHECK_EQ(*split_layout_descriptor, map1->layout_descriptor());
1150 DCHECK(map1->layout_descriptor()->IsConsistentWithMap(*map1)); 1171 #ifdef VERIFY_HEAP
1172 if (FLAG_verify_heap) {
1173 DCHECK(map1->layout_descriptor()->IsConsistentWithMap(*map1));
1174 }
1175 #endif
1151 1176
1152 Handle<Map> map2 = Map::CopyWithField(split_map, MakeString("bar"), any_type, 1177 Handle<Map> map2 = Map::CopyWithField(split_map, MakeString("bar"), any_type,
1153 NONE, Representation::Tagged(), 1178 NONE, Representation::Tagged(),
1154 INSERT_TRANSITION).ToHandleChecked(); 1179 INSERT_TRANSITION).ToHandleChecked();
1155 1180
1156 // Layout descriptors should not be shared with |split_map|. 1181 // Layout descriptors should not be shared with |split_map|.
1157 CHECK(map2->owns_descriptors()); 1182 CHECK(map2->owns_descriptors());
1158 CHECK_NE(*split_layout_descriptor, map2->layout_descriptor()); 1183 CHECK_NE(*split_layout_descriptor, map2->layout_descriptor());
1159 DCHECK(map2->layout_descriptor()->IsConsistentWithMap(*map2)); 1184 #ifdef VERIFY_HEAP
1185 if (FLAG_verify_heap) {
1186 DCHECK(map2->layout_descriptor()->IsConsistentWithMap(*map2));
1187 }
1188 #endif
1160 } 1189 }
1161 1190
1162 1191
1163 TEST(StoreBufferScanOnScavenge) { 1192 TEST(StoreBufferScanOnScavenge) {
1164 CcTest::InitializeVM(); 1193 CcTest::InitializeVM();
1165 Isolate* isolate = CcTest::i_isolate(); 1194 Isolate* isolate = CcTest::i_isolate();
1166 Factory* factory = isolate->factory(); 1195 Factory* factory = isolate->factory();
1167 v8::HandleScope scope(CcTest::isolate()); 1196 v8::HandleScope scope(CcTest::isolate());
1168 1197
1169 CompileRun( 1198 CompileRun(
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
1302 Handle<JSObject> clone(JSObject::cast(clone_obj)); 1331 Handle<JSObject> clone(JSObject::cast(clone_obj));
1303 CHECK(heap->old_pointer_space()->Contains(clone->address())); 1332 CHECK(heap->old_pointer_space()->Contains(clone->address()));
1304 1333
1305 CcTest::heap()->CollectGarbage(NEW_SPACE, "boom"); 1334 CcTest::heap()->CollectGarbage(NEW_SPACE, "boom");
1306 1335
1307 // The value in cloned object should not be corrupted by GC. 1336 // The value in cloned object should not be corrupted by GC.
1308 CHECK_EQ(boom_value, clone->RawFastDoublePropertyAt(index)); 1337 CHECK_EQ(boom_value, clone->RawFastDoublePropertyAt(index));
1309 } 1338 }
1310 1339
1311 #endif 1340 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698