| 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 | 
|---|