Chromium Code Reviews| Index: test/cctest/test-code-stub-assembler.cc |
| diff --git a/test/cctest/test-code-stub-assembler.cc b/test/cctest/test-code-stub-assembler.cc |
| index 0d0b5c5c498eb0478178d0c509c66eef91fd3b72..1e0c2e4e3ae042d4d774416a77a7616bd826433e 100644 |
| --- a/test/cctest/test-code-stub-assembler.cc |
| +++ b/test/cctest/test-code-stub-assembler.cc |
| @@ -1509,5 +1509,69 @@ TEST(GotoIfExceptionMultiple) { |
| CHECK(constructor->SameValue(*isolate->type_error_function())); |
| } |
| +TEST(AllocateJSObjectFromMap) { |
| + Isolate* isolate(CcTest::InitIsolateOnce()); |
| + Factory* factory = isolate->factory(); |
| + |
| + const int kNumParams = 3; |
| + CodeStubAssemblerTester m(isolate, kNumParams); |
| + |
| + Handle<Symbol> not_found_symbol = factory->NewSymbol(); |
| + Handle<Symbol> bailout_symbol = factory->NewSymbol(); |
| + { |
| + Node* map = m.Parameter(0); |
| + Node* properties = m.Parameter(1); |
| + Node* elements = m.Parameter(2); |
| + |
| + Node* result = m.AllocateJSObjectFromMap(map, properties, elements); |
| + |
| + m.Return(result); |
| + } |
| + |
| + Handle<Code> code = m.GenerateCode(); |
| + FunctionTester ft(code, kNumParams); |
| + |
| + Handle<Map> maps[] = { |
| + isolate->object_with_null_prototype_map(), |
| + handle(isolate->object_function()->initial_map(), isolate), |
| + handle(isolate->array_function()->initial_map(), isolate), |
| + }; |
| + |
| +#define VERIFY(result, map_handle, properties_handle, elements_handle) \ |
|
Igor Sheludko
2016/10/18 12:33:22
s/_handle/_value/
|
| + CHECK_EQ(result->map(), map_handle); \ |
| + CHECK_EQ(result->properties(), properties_handle); \ |
| + CHECK_EQ(result->elements(), elements_handle); |
| + |
| + { |
| + Handle<Object> empty_fixed_array = factory->empty_fixed_array(); |
| + for (int i = 0; i < arraysize(maps); i++) { |
| + Handle<Map> map = maps[i]; |
| + Handle<JSObject> result = Handle<JSObject>::cast( |
| + ft.Call(map, empty_fixed_array, empty_fixed_array).ToHandleChecked()); |
| + VERIFY(result, *map, *empty_fixed_array, *empty_fixed_array); |
| +#ifdef VERIFY_HEAP |
| + isolate->heap()->Verify(); |
| +#endif |
| + } |
| + } |
| + |
| + { |
| + // TODO(cbruni): handle in-object properties |
| + Handle<JSObject> object = Handle<JSObject>::cast( |
| + v8::Utils::OpenHandle(*CompileRun("var object = {a:1,b:2, 1:1, 2:2}; " |
| + "object"))); |
| + JSObject::NormalizeProperties(object, KEEP_INOBJECT_PROPERTIES, 0, |
| + "Normalize"); |
| + Handle<JSObject> result = Handle<JSObject>::cast( |
| + ft.Call(handle(object->map()), handle(object->properties()), |
| + handle(object->elements())) |
| + .ToHandleChecked()); |
| + VERIFY(result, object->map(), object->properties(), object->elements()); |
| +#ifdef VERIFY_HEAP |
| + isolate->heap()->Verify(); |
| +#endif |
| + } |
| +} |
| + |
| } // namespace internal |
| } // namespace v8 |