| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 | 2 |
| 3 // Test constant pool array code. | 3 // Test constant pool array code. |
| 4 | 4 |
| 5 #include "v8.h" | 5 #include "v8.h" |
| 6 | 6 |
| 7 #include "factory.h" | 7 #include "factory.h" |
| 8 #include "objects.h" | 8 #include "objects.h" |
| 9 #include "cctest.h" | 9 #include "cctest.h" |
| 10 | 10 |
| 11 using namespace v8::internal; | 11 using namespace v8::internal; |
| 12 | 12 |
| 13 | 13 |
| 14 Code* DummyCode(LocalContext* context) { |
| 15 CompileRun("function foo() {};"); |
| 16 i::Handle<i::JSFunction> fun = v8::Utils::OpenHandle( |
| 17 *v8::Local<v8::Function>::Cast( |
| 18 (*context)->Global()->Get(v8_str("foo")))); |
| 19 return fun->code(); |
| 20 } |
| 21 |
| 22 |
| 14 TEST(ConstantPool) { | 23 TEST(ConstantPool) { |
| 15 LocalContext context; | 24 LocalContext context; |
| 16 Isolate* isolate = CcTest::i_isolate(); | 25 Isolate* isolate = CcTest::i_isolate(); |
| 17 Heap* heap = isolate->heap(); | 26 Heap* heap = isolate->heap(); |
| 18 Factory* factory = isolate->factory(); | 27 Factory* factory = isolate->factory(); |
| 19 v8::HandleScope scope(context->GetIsolate()); | 28 v8::HandleScope scope(context->GetIsolate()); |
| 20 | 29 |
| 21 // Check construction. | 30 // Check construction. |
| 22 Handle<ConstantPoolArray> array = factory->NewConstantPoolArray(3, 2, 1); | 31 Handle<ConstantPoolArray> array = factory->NewConstantPoolArray(3, 1, 2, 1); |
| 23 CHECK_EQ(array->count_of_int64_entries(), 3); | 32 CHECK_EQ(array->count_of_int64_entries(), 3); |
| 24 CHECK_EQ(array->count_of_ptr_entries(), 2); | 33 CHECK_EQ(array->count_of_code_ptr_entries(), 1); |
| 34 CHECK_EQ(array->count_of_heap_ptr_entries(), 2); |
| 25 CHECK_EQ(array->count_of_int32_entries(), 1); | 35 CHECK_EQ(array->count_of_int32_entries(), 1); |
| 26 CHECK_EQ(array->length(), 6); | 36 CHECK_EQ(array->length(), 7); |
| 27 CHECK_EQ(array->first_int64_index(), 0); | 37 CHECK_EQ(array->first_int64_index(), 0); |
| 28 CHECK_EQ(array->first_ptr_index(), 3); | 38 CHECK_EQ(array->first_code_ptr_index(), 3); |
| 29 CHECK_EQ(array->first_int32_index(), 5); | 39 CHECK_EQ(array->first_heap_ptr_index(), 4); |
| 40 CHECK_EQ(array->first_int32_index(), 6); |
| 30 | 41 |
| 31 // Check getters and setters. | 42 // Check getters and setters. |
| 32 int64_t big_number = V8_2PART_UINT64_C(0x12345678, 9ABCDEF0); | 43 int64_t big_number = V8_2PART_UINT64_C(0x12345678, 9ABCDEF0); |
| 33 Handle<Object> object = factory->NewHeapNumber(4.0); | 44 Handle<Object> object = factory->NewHeapNumber(4.0); |
| 45 Code* code = DummyCode(&context); |
| 34 array->set(0, big_number); | 46 array->set(0, big_number); |
| 35 array->set(1, 0.5); | 47 array->set(1, 0.5); |
| 36 array->set(3, *object); | 48 array->set(2, 3e-24); |
| 37 array->set(5, 50); | 49 array->set(3, code->entry()); |
| 50 array->set(4, code); |
| 51 array->set(5, *object); |
| 52 array->set(6, 50); |
| 38 CHECK_EQ(array->get_int64_entry(0), big_number); | 53 CHECK_EQ(array->get_int64_entry(0), big_number); |
| 39 CHECK_EQ(array->get_int64_entry_as_double(1), 0.5); | 54 CHECK_EQ(array->get_int64_entry_as_double(1), 0.5); |
| 40 CHECK_EQ(array->get_ptr_entry(3), *object); | 55 CHECK_EQ(array->get_int64_entry_as_double(2), 3e-24); |
| 41 CHECK_EQ(array->get_int32_entry(5), 50); | 56 CHECK_EQ(array->get_code_ptr_entry(3), code->entry()); |
| 57 CHECK_EQ(array->get_heap_ptr_entry(4), code); |
| 58 CHECK_EQ(array->get_heap_ptr_entry(5), *object); |
| 59 CHECK_EQ(array->get_int32_entry(6), 50); |
| 42 | 60 |
| 43 // Check pointers are updated on GC. | 61 // Check pointers are updated on GC. |
| 44 Object* old_ptr = array->get_ptr_entry(3); | 62 Object* old_ptr = array->get_heap_ptr_entry(5); |
| 45 CHECK_EQ(*object, old_ptr); | 63 CHECK_EQ(*object, old_ptr); |
| 46 heap->CollectGarbage(NEW_SPACE); | 64 heap->CollectGarbage(NEW_SPACE); |
| 47 Object* new_ptr = array->get_ptr_entry(3); | 65 Object* new_ptr = array->get_heap_ptr_entry(5); |
| 48 CHECK_NE(*object, old_ptr); | 66 CHECK_NE(*object, old_ptr); |
| 49 CHECK_EQ(*object, new_ptr); | 67 CHECK_EQ(*object, new_ptr); |
| 50 } | 68 } |
| OLD | NEW |