| Index: test/cctest/test-heap.cc
|
| ===================================================================
|
| --- test/cctest/test-heap.cc (revision 5696)
|
| +++ test/cctest/test-heap.cc (working copy)
|
| @@ -58,7 +58,7 @@
|
|
|
|
|
| static void CheckNumber(double value, const char* string) {
|
| - Object* obj = Heap::NumberFromDouble(value);
|
| + Object* obj = Heap::NumberFromDouble(value)->ToObjectChecked();
|
| CHECK(obj->IsNumber());
|
| bool exc;
|
| Object* print_string = *Execution::ToString(Handle<Object>(obj), &exc);
|
| @@ -76,9 +76,10 @@
|
|
|
| CodeDesc desc;
|
| assm.GetCode(&desc);
|
| - Object* code = Heap::CreateCode(desc,
|
| - Code::ComputeFlags(Code::STUB),
|
| - Handle<Object>(Heap::undefined_value()));
|
| + Object* code = Heap::CreateCode(
|
| + desc,
|
| + Code::ComputeFlags(Code::STUB),
|
| + Handle<Object>(Heap::undefined_value()))->ToObjectChecked();
|
| CHECK(code->IsCode());
|
|
|
| HeapObject* obj = HeapObject::cast(code);
|
| @@ -89,9 +90,10 @@
|
| CHECK_EQ(code, found);
|
| }
|
|
|
| - Object* copy = Heap::CreateCode(desc,
|
| - Code::ComputeFlags(Code::STUB),
|
| - Handle<Object>(Heap::undefined_value()));
|
| + Object* copy = Heap::CreateCode(
|
| + desc,
|
| + Code::ComputeFlags(Code::STUB),
|
| + Handle<Object>(Heap::undefined_value()))->ToObjectChecked();
|
| CHECK(copy->IsCode());
|
| HeapObject* obj_copy = HeapObject::cast(copy);
|
| Object* not_right = Heap::FindCodeObject(obj_copy->address() +
|
| @@ -104,40 +106,42 @@
|
| InitializeVM();
|
|
|
| v8::HandleScope sc;
|
| - Object* value = Heap::NumberFromDouble(1.000123);
|
| + Object* value = Heap::NumberFromDouble(1.000123)->ToObjectChecked();
|
| CHECK(value->IsHeapNumber());
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(1.000123, value->Number());
|
|
|
| - value = Heap::NumberFromDouble(1.0);
|
| + value = Heap::NumberFromDouble(1.0)->ToObjectChecked();
|
| CHECK(value->IsSmi());
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(1.0, value->Number());
|
|
|
| - value = Heap::NumberFromInt32(1024);
|
| + value = Heap::NumberFromInt32(1024)->ToObjectChecked();
|
| CHECK(value->IsSmi());
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(1024.0, value->Number());
|
|
|
| - value = Heap::NumberFromInt32(Smi::kMinValue);
|
| + value = Heap::NumberFromInt32(Smi::kMinValue)->ToObjectChecked();
|
| CHECK(value->IsSmi());
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(Smi::kMinValue, Smi::cast(value)->value());
|
|
|
| - value = Heap::NumberFromInt32(Smi::kMaxValue);
|
| + value = Heap::NumberFromInt32(Smi::kMaxValue)->ToObjectChecked();
|
| CHECK(value->IsSmi());
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(Smi::kMaxValue, Smi::cast(value)->value());
|
|
|
| #ifndef V8_TARGET_ARCH_X64
|
| // TODO(lrn): We need a NumberFromIntptr function in order to test this.
|
| - value = Heap::NumberFromInt32(Smi::kMinValue - 1);
|
| + value = Heap::NumberFromInt32(Smi::kMinValue - 1)->ToObjectChecked();
|
| CHECK(value->IsHeapNumber());
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(static_cast<double>(Smi::kMinValue - 1), value->Number());
|
| #endif
|
|
|
| - value = Heap::NumberFromUint32(static_cast<uint32_t>(Smi::kMaxValue) + 1);
|
| + MaybeObject* maybe_value =
|
| + Heap::NumberFromUint32(static_cast<uint32_t>(Smi::kMaxValue) + 1);
|
| + value = maybe_value->ToObjectChecked();
|
| CHECK(value->IsHeapNumber());
|
| CHECK(value->IsNumber());
|
| CHECK_EQ(static_cast<double>(static_cast<uint32_t>(Smi::kMaxValue) + 1),
|
| @@ -208,11 +212,13 @@
|
| Handle<Map> initial_map =
|
| Factory::NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
|
| function->set_initial_map(*initial_map);
|
| - Top::context()->global()->SetProperty(*name, *function, NONE);
|
| + Top::context()->global()->SetProperty(*name,
|
| + *function,
|
| + NONE)->ToObjectChecked();
|
| // Allocate an object. Unrooted after leaving the scope.
|
| Handle<JSObject> obj = Factory::NewJSObject(function);
|
| - obj->SetProperty(*prop_name, Smi::FromInt(23), NONE);
|
| - obj->SetProperty(*prop_namex, Smi::FromInt(24), NONE);
|
| + obj->SetProperty(*prop_name, Smi::FromInt(23), NONE)->ToObjectChecked();
|
| + obj->SetProperty(*prop_namex, Smi::FromInt(24), NONE)->ToObjectChecked();
|
|
|
| CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name));
|
| CHECK_EQ(Smi::FromInt(24), obj->GetProperty(*prop_namex));
|
| @@ -223,7 +229,8 @@
|
| // Function should be alive.
|
| CHECK(Top::context()->global()->HasLocalProperty(*name));
|
| // Check function is retained.
|
| - Object* func_value = Top::context()->global()->GetProperty(*name);
|
| + Object* func_value =
|
| + Top::context()->global()->GetProperty(*name)->ToObjectChecked();
|
| CHECK(func_value->IsJSFunction());
|
| Handle<JSFunction> function(JSFunction::cast(func_value));
|
|
|
| @@ -231,18 +238,22 @@
|
| HandleScope inner_scope;
|
| // Allocate another object, make it reachable from global.
|
| Handle<JSObject> obj = Factory::NewJSObject(function);
|
| - Top::context()->global()->SetProperty(*obj_name, *obj, NONE);
|
| - obj->SetProperty(*prop_name, Smi::FromInt(23), NONE);
|
| + Top::context()->global()->SetProperty(*obj_name,
|
| + *obj,
|
| + NONE)->ToObjectChecked();
|
| + obj->SetProperty(*prop_name, Smi::FromInt(23), NONE)->ToObjectChecked();
|
| }
|
|
|
| // After gc, it should survive.
|
| Heap::CollectGarbage(NEW_SPACE);
|
|
|
| CHECK(Top::context()->global()->HasLocalProperty(*obj_name));
|
| - CHECK(Top::context()->global()->GetProperty(*obj_name)->IsJSObject());
|
| - JSObject* obj =
|
| - JSObject::cast(Top::context()->global()->GetProperty(*obj_name));
|
| - CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name));
|
| + CHECK(Top::context()->global()->GetProperty(*obj_name)->ToObjectChecked()->
|
| + IsJSObject());
|
| + Object* obj =
|
| + Top::context()->global()->GetProperty(*obj_name)->ToObjectChecked();
|
| + JSObject* js_obj = JSObject::cast(obj);
|
| + CHECK_EQ(Smi::FromInt(23), js_obj->GetProperty(*prop_name));
|
| }
|
|
|
|
|
| @@ -494,12 +505,14 @@
|
|
|
| static void CheckSymbols(const char** strings) {
|
| for (const char* string = *strings; *strings != 0; string = *strings++) {
|
| - Object* a = Heap::LookupAsciiSymbol(string);
|
| + Object* a;
|
| + MaybeObject* maybe_a = Heap::LookupAsciiSymbol(string);
|
| // LookupAsciiSymbol may return a failure if a GC is needed.
|
| - if (a->IsFailure()) continue;
|
| + if (!maybe_a->ToObject(&a)) continue;
|
| CHECK(a->IsSymbol());
|
| - Object* b = Heap::LookupAsciiSymbol(string);
|
| - if (b->IsFailure()) continue;
|
| + Object* b;
|
| + MaybeObject* maybe_b = Heap::LookupAsciiSymbol(string);
|
| + if (!maybe_maybe_b->ToObject(&b)) continue;
|
| CHECK_EQ(b, a);
|
| CHECK(String::cast(b)->IsEqualTo(CStrVector(string)));
|
| }
|
| @@ -527,10 +540,12 @@
|
|
|
| Handle<String> prop_name = Factory::LookupAsciiSymbol("theSlot");
|
| Handle<JSObject> obj = Factory::NewJSObject(function);
|
| - obj->SetProperty(*prop_name, Smi::FromInt(23), NONE);
|
| + obj->SetProperty(*prop_name, Smi::FromInt(23), NONE)->ToObjectChecked();
|
| CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name));
|
| // Check that we can add properties to function objects.
|
| - function->SetProperty(*prop_name, Smi::FromInt(24), NONE);
|
| + function->SetProperty(*prop_name,
|
| + Smi::FromInt(24),
|
| + NONE)->ToObjectChecked();
|
| CHECK_EQ(Smi::FromInt(24), function->GetProperty(*prop_name));
|
| }
|
|
|
| @@ -540,8 +555,9 @@
|
|
|
| v8::HandleScope sc;
|
| String* object_symbol = String::cast(Heap::Object_symbol());
|
| - JSFunction* object_function =
|
| - JSFunction::cast(Top::context()->global()->GetProperty(object_symbol));
|
| + Object* raw_object =
|
| + Top::context()->global()->GetProperty(object_symbol)->ToObjectChecked();
|
| + JSFunction* object_function = JSFunction::cast(raw_object);
|
| Handle<JSFunction> constructor(object_function);
|
| Handle<JSObject> obj = Factory::NewJSObject(constructor);
|
| Handle<String> first = Factory::LookupAsciiSymbol("first");
|
| @@ -551,7 +567,7 @@
|
| CHECK(!obj->HasLocalProperty(*first));
|
|
|
| // add first
|
| - obj->SetProperty(*first, Smi::FromInt(1), NONE);
|
| + obj->SetProperty(*first, Smi::FromInt(1), NONE)->ToObjectChecked();
|
| CHECK(obj->HasLocalProperty(*first));
|
|
|
| // delete first
|
| @@ -559,8 +575,8 @@
|
| CHECK(!obj->HasLocalProperty(*first));
|
|
|
| // add first and then second
|
| - obj->SetProperty(*first, Smi::FromInt(1), NONE);
|
| - obj->SetProperty(*second, Smi::FromInt(2), NONE);
|
| + obj->SetProperty(*first, Smi::FromInt(1), NONE)->ToObjectChecked();
|
| + obj->SetProperty(*second, Smi::FromInt(2), NONE)->ToObjectChecked();
|
| CHECK(obj->HasLocalProperty(*first));
|
| CHECK(obj->HasLocalProperty(*second));
|
|
|
| @@ -572,8 +588,8 @@
|
| CHECK(!obj->HasLocalProperty(*second));
|
|
|
| // add first and then second
|
| - obj->SetProperty(*first, Smi::FromInt(1), NONE);
|
| - obj->SetProperty(*second, Smi::FromInt(2), NONE);
|
| + obj->SetProperty(*first, Smi::FromInt(1), NONE)->ToObjectChecked();
|
| + obj->SetProperty(*second, Smi::FromInt(2), NONE)->ToObjectChecked();
|
| CHECK(obj->HasLocalProperty(*first));
|
| CHECK(obj->HasLocalProperty(*second));
|
|
|
| @@ -587,14 +603,14 @@
|
| // check string and symbol match
|
| static const char* string1 = "fisk";
|
| Handle<String> s1 = Factory::NewStringFromAscii(CStrVector(string1));
|
| - obj->SetProperty(*s1, Smi::FromInt(1), NONE);
|
| + obj->SetProperty(*s1, Smi::FromInt(1), NONE)->ToObjectChecked();
|
| Handle<String> s1_symbol = Factory::LookupAsciiSymbol(string1);
|
| CHECK(obj->HasLocalProperty(*s1_symbol));
|
|
|
| // check symbol and string match
|
| static const char* string2 = "fugl";
|
| Handle<String> s2_symbol = Factory::LookupAsciiSymbol(string2);
|
| - obj->SetProperty(*s2_symbol, Smi::FromInt(1), NONE);
|
| + obj->SetProperty(*s2_symbol, Smi::FromInt(1), NONE)->ToObjectChecked();
|
| Handle<String> s2 = Factory::NewStringFromAscii(CStrVector(string2));
|
| CHECK(obj->HasLocalProperty(*s2));
|
| }
|
| @@ -615,7 +631,7 @@
|
| Handle<JSObject> obj = Factory::NewJSObject(function);
|
|
|
| // Set a propery
|
| - obj->SetProperty(*prop_name, Smi::FromInt(23), NONE);
|
| + obj->SetProperty(*prop_name, Smi::FromInt(23), NONE)->ToObjectChecked();
|
| CHECK_EQ(Smi::FromInt(23), obj->GetProperty(*prop_name));
|
|
|
| // Check the map has changed
|
| @@ -628,33 +644,31 @@
|
|
|
| v8::HandleScope sc;
|
| Handle<String> name = Factory::LookupAsciiSymbol("Array");
|
| + Object* raw_object =
|
| + Top::context()->global()->GetProperty(*name)->ToObjectChecked();
|
| Handle<JSFunction> function = Handle<JSFunction>(
|
| - JSFunction::cast(Top::context()->global()->GetProperty(*name)));
|
| + JSFunction::cast(raw_object));
|
|
|
| // Allocate the object.
|
| Handle<JSObject> object = Factory::NewJSObject(function);
|
| Handle<JSArray> array = Handle<JSArray>::cast(object);
|
| - Object* ok = array->Initialize(0);
|
| // We just initialized the VM, no heap allocation failure yet.
|
| - CHECK(!ok->IsFailure());
|
| + Object* ok = array->Initialize(0)->ToObjectChecked();
|
|
|
| // Set array length to 0.
|
| - ok = array->SetElementsLength(Smi::FromInt(0));
|
| - CHECK(!ok->IsFailure());
|
| + ok = array->SetElementsLength(Smi::FromInt(0))->ToObjectChecked();
|
| CHECK_EQ(Smi::FromInt(0), array->length());
|
| CHECK(array->HasFastElements()); // Must be in fast mode.
|
|
|
| // array[length] = name.
|
| - ok = array->SetElement(0, *name);
|
| - CHECK(!ok->IsFailure());
|
| + ok = array->SetElement(0, *name)->ToObjectChecked();
|
| CHECK_EQ(Smi::FromInt(1), array->length());
|
| CHECK_EQ(array->GetElement(0), *name);
|
|
|
| // Set array length with larger than smi value.
|
| Handle<Object> length =
|
| Factory::NewNumberFromUint(static_cast<uint32_t>(Smi::kMaxValue) + 1);
|
| - ok = array->SetElementsLength(*length);
|
| - CHECK(!ok->IsFailure());
|
| + ok = array->SetElementsLength(*length)->ToObjectChecked();
|
|
|
| uint32_t int_length = 0;
|
| CHECK(length->ToArrayIndex(&int_length));
|
| @@ -662,8 +676,7 @@
|
| CHECK(array->HasDictionaryElements()); // Must be in slow mode.
|
|
|
| // array[length] = name.
|
| - ok = array->SetElement(int_length, *name);
|
| - CHECK(!ok->IsFailure());
|
| + ok = array->SetElement(int_length, *name)->ToObjectChecked();
|
| uint32_t new_int_length = 0;
|
| CHECK(array->length()->ToArrayIndex(&new_int_length));
|
| CHECK_EQ(static_cast<double>(int_length), new_int_length - 1);
|
| @@ -677,21 +690,20 @@
|
|
|
| v8::HandleScope sc;
|
| String* object_symbol = String::cast(Heap::Object_symbol());
|
| - JSFunction* object_function =
|
| - JSFunction::cast(Top::context()->global()->GetProperty(object_symbol));
|
| + Object* raw_object =
|
| + Top::context()->global()->GetProperty(object_symbol)->ToObjectChecked();
|
| + JSFunction* object_function = JSFunction::cast(raw_object);
|
| Handle<JSFunction> constructor(object_function);
|
| Handle<JSObject> obj = Factory::NewJSObject(constructor);
|
| Handle<String> first = Factory::LookupAsciiSymbol("first");
|
| Handle<String> second = Factory::LookupAsciiSymbol("second");
|
|
|
| - obj->SetProperty(*first, Smi::FromInt(1), NONE);
|
| - obj->SetProperty(*second, Smi::FromInt(2), NONE);
|
| + obj->SetProperty(*first, Smi::FromInt(1), NONE)->ToObjectChecked();
|
| + obj->SetProperty(*second, Smi::FromInt(2), NONE)->ToObjectChecked();
|
|
|
| - Object* ok = obj->SetElement(0, *first);
|
| - CHECK(!ok->IsFailure());
|
| + Object* ok = obj->SetElement(0, *first)->ToObjectChecked();
|
|
|
| - ok = obj->SetElement(1, *second);
|
| - CHECK(!ok->IsFailure());
|
| + ok = obj->SetElement(1, *second)->ToObjectChecked();
|
|
|
| // Make the clone.
|
| Handle<JSObject> clone = Copy(obj);
|
| @@ -704,13 +716,11 @@
|
| CHECK_EQ(obj->GetProperty(*second), clone->GetProperty(*second));
|
|
|
| // Flip the values.
|
| - clone->SetProperty(*first, Smi::FromInt(2), NONE);
|
| - clone->SetProperty(*second, Smi::FromInt(1), NONE);
|
| + clone->SetProperty(*first, Smi::FromInt(2), NONE)->ToObjectChecked();
|
| + clone->SetProperty(*second, Smi::FromInt(1), NONE)->ToObjectChecked();
|
|
|
| - ok = clone->SetElement(0, *second);
|
| - CHECK(!ok->IsFailure());
|
| - ok = clone->SetElement(1, *first);
|
| - CHECK(!ok->IsFailure());
|
| + ok = clone->SetElement(0, *second)->ToObjectChecked();
|
| + ok = clone->SetElement(1, *first)->ToObjectChecked();
|
|
|
| CHECK_EQ(obj->GetElement(1), clone->GetElement(0));
|
| CHECK_EQ(obj->GetElement(0), clone->GetElement(1));
|
| @@ -836,7 +846,7 @@
|
| kPointerSize;
|
| CHECK_EQ(bytes_to_allocate, FixedArray::SizeFor(n_elements));
|
| FixedArray* array = FixedArray::cast(
|
| - Heap::AllocateFixedArray(n_elements));
|
| + Heap::AllocateFixedArray(n_elements)->ToObjectChecked());
|
|
|
| int index = n_elements - 1;
|
| CHECK_EQ(flags_ptr,
|
| @@ -908,8 +918,8 @@
|
| Address* limit_addr = new_space->allocation_limit_address();
|
| while ((*limit_addr - *top_addr) > allocation_amount) {
|
| CHECK(!Heap::always_allocate());
|
| - Object* array = Heap::AllocateFixedArray(allocation_len);
|
| - CHECK(!array->IsFailure());
|
| + Object* array =
|
| + Heap::AllocateFixedArray(allocation_len)->ToObjectChecked();
|
| CHECK(new_space->Contains(array));
|
| }
|
|
|
| @@ -919,12 +929,11 @@
|
| CHECK(fixed_array_len < FixedArray::kMaxLength);
|
|
|
| CHECK(!Heap::always_allocate());
|
| - Object* array = Heap::AllocateFixedArray(fixed_array_len);
|
| - CHECK(!array->IsFailure());
|
| + Object* array =
|
| + Heap::AllocateFixedArray(fixed_array_len)->ToObjectChecked();
|
| CHECK(new_space->Contains(array));
|
|
|
| - Object* object = Heap::AllocateJSObjectFromMap(*my_map);
|
| - CHECK(!object->IsFailure());
|
| + Object* object = Heap::AllocateJSObjectFromMap(*my_map)->ToObjectChecked();
|
| CHECK(new_space->Contains(object));
|
| JSObject* jsobject = JSObject::cast(object);
|
| CHECK_EQ(0, FixedArray::cast(jsobject->elements())->length());
|
| @@ -938,8 +947,7 @@
|
| // in old pointer space.
|
| Address old_pointer_space_top = Heap::old_pointer_space()->top();
|
| AlwaysAllocateScope aa_scope;
|
| - Object* clone_obj = Heap::CopyJSObject(jsobject);
|
| - CHECK(!object->IsFailure());
|
| + Object* clone_obj = Heap::CopyJSObject(jsobject)->ToObjectChecked();
|
| JSObject* clone = JSObject::cast(clone_obj);
|
| if (clone->address() != old_pointer_space_top) {
|
| // Alas, got allocated from free list, we cannot do checks.
|
| @@ -973,7 +981,8 @@
|
| CompileRun(source);
|
|
|
| // Check function is compiled.
|
| - Object* func_value = Top::context()->global()->GetProperty(*foo_name);
|
| + Object* func_value =
|
| + Top::context()->global()->GetProperty(*foo_name)->ToObjectChecked();
|
| CHECK(func_value->IsJSFunction());
|
| Handle<JSFunction> function(JSFunction::cast(func_value));
|
| CHECK(function->shared()->is_compiled());
|
|
|