| 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 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1053 CHECK(field_index.is_inobject() && field_index.is_double()); | 1053 CHECK(field_index.is_inobject() && field_index.is_double()); |
| 1054 CHECK_EQ(FLAG_unbox_double_fields, map->IsUnboxedDoubleField(field_index)); | 1054 CHECK_EQ(FLAG_unbox_double_fields, map->IsUnboxedDoubleField(field_index)); |
| 1055 CHECK_EQ(42.5, GetDoubleFieldValue(*obj, field_index)); | 1055 CHECK_EQ(42.5, GetDoubleFieldValue(*obj, field_index)); |
| 1056 } | 1056 } |
| 1057 CHECK(isolate->heap()->new_space()->Contains(*obj)); | 1057 CHECK(isolate->heap()->new_space()->Contains(*obj)); |
| 1058 | 1058 |
| 1059 // Do scavenge so that |obj| is moved to survivor space. | 1059 // Do scavenge so that |obj| is moved to survivor space. |
| 1060 CcTest::heap()->CollectGarbage(i::NEW_SPACE); | 1060 CcTest::heap()->CollectGarbage(i::NEW_SPACE); |
| 1061 | 1061 |
| 1062 // Create temp object in the new space. | 1062 // Create temp object in the new space. |
| 1063 Handle<JSArray> temp = factory->NewJSArray(FAST_ELEMENTS); | 1063 Handle<JSArray> temp = factory->NewJSArray(0, FAST_ELEMENTS); |
| 1064 CHECK(isolate->heap()->new_space()->Contains(*temp)); | 1064 CHECK(isolate->heap()->new_space()->Contains(*temp)); |
| 1065 | 1065 |
| 1066 // Construct a double value that looks like a pointer to the new space object | 1066 // Construct a double value that looks like a pointer to the new space object |
| 1067 // and store it into the obj. | 1067 // and store it into the obj. |
| 1068 Address fake_object = reinterpret_cast<Address>(*temp) + kPointerSize; | 1068 Address fake_object = reinterpret_cast<Address>(*temp) + kPointerSize; |
| 1069 double boom_value = bit_cast<double>(fake_object); | 1069 double boom_value = bit_cast<double>(fake_object); |
| 1070 | 1070 |
| 1071 FieldIndex field_index = FieldIndex::ForDescriptor(obj->map(), 0); | 1071 FieldIndex field_index = FieldIndex::ForDescriptor(obj->map(), 0); |
| 1072 Handle<HeapNumber> boom_number = factory->NewHeapNumber(boom_value, MUTABLE); | 1072 Handle<HeapNumber> boom_number = factory->NewHeapNumber(boom_value, MUTABLE); |
| 1073 obj->FastPropertyAtPut(field_index, *boom_number); | 1073 obj->FastPropertyAtPut(field_index, *boom_number); |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1392 } | 1392 } |
| 1393 CHECK(isolate->heap()->new_space()->Contains(*obj)); | 1393 CHECK(isolate->heap()->new_space()->Contains(*obj)); |
| 1394 | 1394 |
| 1395 // Trigger GCs so that the newly allocated object moves to old gen. | 1395 // Trigger GCs so that the newly allocated object moves to old gen. |
| 1396 CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in survivor space now | 1396 CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in survivor space now |
| 1397 CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in old gen now | 1397 CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in old gen now |
| 1398 | 1398 |
| 1399 CHECK(isolate->heap()->old_space()->Contains(*obj)); | 1399 CHECK(isolate->heap()->old_space()->Contains(*obj)); |
| 1400 | 1400 |
| 1401 // Create temp object in the new space. | 1401 // Create temp object in the new space. |
| 1402 Handle<JSArray> temp = factory->NewJSArray(FAST_ELEMENTS); | 1402 Handle<JSArray> temp = factory->NewJSArray(0, FAST_ELEMENTS); |
| 1403 CHECK(isolate->heap()->new_space()->Contains(*temp)); | 1403 CHECK(isolate->heap()->new_space()->Contains(*temp)); |
| 1404 | 1404 |
| 1405 // Construct a double value that looks like a pointer to the new space object | 1405 // Construct a double value that looks like a pointer to the new space object |
| 1406 // and store it into the obj. | 1406 // and store it into the obj. |
| 1407 Address fake_object = reinterpret_cast<Address>(*temp) + kPointerSize; | 1407 Address fake_object = reinterpret_cast<Address>(*temp) + kPointerSize; |
| 1408 double boom_value = bit_cast<double>(fake_object); | 1408 double boom_value = bit_cast<double>(fake_object); |
| 1409 | 1409 |
| 1410 FieldIndex field_index = FieldIndex::ForDescriptor(obj->map(), 0); | 1410 FieldIndex field_index = FieldIndex::ForDescriptor(obj->map(), 0); |
| 1411 Handle<HeapNumber> boom_number = factory->NewHeapNumber(boom_value, MUTABLE); | 1411 Handle<HeapNumber> boom_number = factory->NewHeapNumber(boom_value, MUTABLE); |
| 1412 obj->FastPropertyAtPut(field_index, *boom_number); | 1412 obj->FastPropertyAtPut(field_index, *boom_number); |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1622 | 1622 |
| 1623 // TODO(ishell): add respective tests for property kind reconfiguring from | 1623 // TODO(ishell): add respective tests for property kind reconfiguring from |
| 1624 // accessor field to double, once accessor fields are supported by | 1624 // accessor field to double, once accessor fields are supported by |
| 1625 // Map::ReconfigureProperty(). | 1625 // Map::ReconfigureProperty(). |
| 1626 | 1626 |
| 1627 | 1627 |
| 1628 // TODO(ishell): add respective tests for fast property removal case once | 1628 // TODO(ishell): add respective tests for fast property removal case once |
| 1629 // Map::ReconfigureProperty() supports that. | 1629 // Map::ReconfigureProperty() supports that. |
| 1630 | 1630 |
| 1631 #endif | 1631 #endif |
| OLD | NEW |