| 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..0cd662c5f7c4a642ec1ad474885a0b62af6c81a2 100644
|
| --- a/test/cctest/test-code-stub-assembler.cc
|
| +++ b/test/cctest/test-code-stub-assembler.cc
|
| @@ -1509,5 +1509,63 @@ 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) \
|
| + CHECK_EQ(result->map(), map_handle); \
|
| + CHECK_EQ(result->properties(), properties_handle); \
|
| + CHECK_EQ(result->elements(), elements_handle); \
|
| + isolate->heap()->Verify();
|
| +
|
| + {
|
| + 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);
|
| + }
|
| + }
|
| +
|
| + {
|
| + // 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());
|
| + }
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace v8
|
|
|