From b505b2f0d681d060f7d151d41dc274e391b2f54d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zsolt=20Borb=C3=A9ly?= Date: Wed, 24 Jun 2015 11:01:12 +0200 Subject: [PATCH] Fix the Object.getPrototypeOf function. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Related issue: #208 JerryScript-DCO-1.0-Signed-off-by: Zsolt Borbély zsborbely.u-szeged@partner.samsung.com --- .../ecma/builtin-objects/ecma-builtin-object.cpp | 12 +++++++++--- tests/jerry/object-create.js | 3 +-- tests/jerry/object-getprototypeof.js | 12 +++++++++++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-object.cpp b/jerry-core/ecma/builtin-objects/ecma-builtin-object.cpp index 30c34a897b..f3829ac050 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-object.cpp +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-object.cpp @@ -128,11 +128,17 @@ ecma_builtin_object_object_get_prototype_of (ecma_value_t this_arg __attr_unused { /* 2. */ ecma_object_t *obj_p = ecma_get_object_from_value (arg); - ecma_object_t *prototype_p = ecma_get_object_prototype (obj_p); - ecma_ref_object (prototype_p); - ret_value = ecma_make_normal_completion_value (ecma_make_object_value (prototype_p)); + if (prototype_p) + { + ret_value = ecma_make_normal_completion_value (ecma_make_object_value (prototype_p)); + ecma_ref_object (prototype_p); + } + else + { + ret_value = ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_NULL); + } } return ret_value; diff --git a/tests/jerry/object-create.js b/tests/jerry/object-create.js index fc7a496d4a..a98fc6a08f 100644 --- a/tests/jerry/object-create.js +++ b/tests/jerry/object-create.js @@ -128,8 +128,7 @@ try { // Create an object with null as prototype var obj = Object.create(null) assert (typeof (obj) === "object"); -// FIXME: enable this assertion after the #208 is fixed. -// assert (Object.getPrototypeOf (obj) === null); +assert (Object.getPrototypeOf (obj) === null); try { Object.create() diff --git a/tests/jerry/object-getprototypeof.js b/tests/jerry/object-getprototypeof.js index c36e0822c5..50d03b85c0 100644 --- a/tests/jerry/object-getprototypeof.js +++ b/tests/jerry/object-getprototypeof.js @@ -35,11 +35,21 @@ try { assert (e instanceof TypeError); } +try { + var y = Object.getPrototypeOf(null); + assert (false); +} catch (e) { + assert (e instanceof TypeError); +} + var obj = { x : "foo" }; -assert (Object.getPrototypeOf(obj) === Object.prototype) +assert (Object.getPrototypeOf(obj) === Object.prototype); var constructor = function () {}; constructor.prototype = obj; var d_obj = new constructor(); assert (Object.getPrototypeOf(d_obj) === obj); + +obj = Object.create(null); +assert (Object.getPrototypeOf(obj) === null);