From c7f71798c74af9731bc4356df8b8f616c10db949 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 16 Jan 2013 11:00:56 +0100 Subject: [PATCH] Fix the remaining issues with Object.defineProperty/defineProperties Change-Id: I4c2a28ad49aa00888d79aee3512b1ba54c16fcbd Reviewed-by: Simon Hausmann --- qmljs_objects.cpp | 7 ++- qv4ecmaobjects.cpp | 13 +++--- tests/TestExpectations | 118 +------------------------------------------------ 3 files changed, 11 insertions(+), 127 deletions(-) diff --git a/qmljs_objects.cpp b/qmljs_objects.cpp index f9b4df0..749e883 100644 --- a/qmljs_objects.cpp +++ b/qmljs_objects.cpp @@ -600,10 +600,9 @@ bool Object::__defineOwnProperty__(ExecutionContext *ctx, PropertyDescriptor *cu } else { // clause 10 assert(current->isAccessor() && desc->isAccessor()); if (!current->isConfigurable()) { - if ((!current->get && (quintptr)desc->get > 0x1) || - (current->get && current->get != desc->get) || - (!current->set && (quintptr)desc->set > 0x1) || - (current->set && current->set != desc->set)) + if (desc->get && !(current->get == desc->get || (!current->get && (quintptr)desc->get == 0x1))) + goto reject; + if (desc->set && !(current->set == desc->set || (!current->set && (quintptr)desc->set == 0x1))) goto reject; } } diff --git a/qv4ecmaobjects.cpp b/qv4ecmaobjects.cpp index 5d743db..6fac204 100644 --- a/qv4ecmaobjects.cpp +++ b/qv4ecmaobjects.cpp @@ -640,10 +640,8 @@ Value ObjectPrototype::method_defineProperty(ExecutionContext *ctx) PropertyDescriptor pd; toPropertyDescriptor(ctx, attributes, &pd); - bool strict = ctx->strictMode; - ctx->strictMode = true; - O.objectValue()->__defineOwnProperty__(ctx, name, &pd); - ctx->strictMode = strict; + if (!O.objectValue()->__defineOwnProperty__(ctx, name, &pd)) + __qmljs_throw_type_error(ctx); return O; } @@ -665,10 +663,13 @@ Value ObjectPrototype::method_defineProperties(ExecutionContext *ctx) break; PropertyDescriptor n; toPropertyDescriptor(ctx, o->getValue(ctx, pd), &n); + bool ok; if (name) - O.objectValue()->__defineOwnProperty__(ctx, name, &n); + ok = O.objectValue()->__defineOwnProperty__(ctx, name, &n); else - O.objectValue()->__defineOwnProperty__(ctx, index, &n); + ok = O.objectValue()->__defineOwnProperty__(ctx, index, &n); + if (!ok) + __qmljs_throw_type_error(ctx); } return O; diff --git a/tests/TestExpectations b/tests/TestExpectations index c8dedea..01b1d87 100644 --- a/tests/TestExpectations +++ b/tests/TestExpectations @@ -852,128 +852,12 @@ S15.1.3.2_A5.3 failing 15.2.3.7-5-b-27 failing 15.2.3.7-5-b-52 failing 15.2.3.7-5-b-80 failing -15.2.3.7-6-a-1 failing -15.2.3.7-6-a-10 failing 15.2.3.7-6-a-110 failing -15.2.3.7-6-a-112 failing -15.2.3.7-6-a-113 failing -15.2.3.7-6-a-116 failing -15.2.3.7-6-a-117 failing -15.2.3.7-6-a-118 failing -15.2.3.7-6-a-119 failing -15.2.3.7-6-a-12 failing -15.2.3.7-6-a-13 failing -15.2.3.7-6-a-14 failing -15.2.3.7-6-a-15 failing -15.2.3.7-6-a-158 failing -15.2.3.7-6-a-16 failing -15.2.3.7-6-a-160 failing -15.2.3.7-6-a-164 failing -15.2.3.7-6-a-165 failing -15.2.3.7-6-a-166 failing -15.2.3.7-6-a-168 failing -15.2.3.7-6-a-169 failing -15.2.3.7-6-a-170 failing -15.2.3.7-6-a-172 failing -15.2.3.7-6-a-173 failing -15.2.3.7-6-a-175 failing -15.2.3.7-6-a-176 failing -15.2.3.7-6-a-18 failing -15.2.3.7-6-a-184 failing -15.2.3.7-6-a-185 failing -15.2.3.7-6-a-186 failing -15.2.3.7-6-a-188 failing -15.2.3.7-6-a-189 failing -15.2.3.7-6-a-19 failing -15.2.3.7-6-a-190 failing -15.2.3.7-6-a-192 failing -15.2.3.7-6-a-193 failing -15.2.3.7-6-a-194 failing 15.2.3.7-6-a-20 failing -15.2.3.7-6-a-21 failing -15.2.3.7-6-a-213 failing -15.2.3.7-6-a-214 failing -15.2.3.7-6-a-22 failing -15.2.3.7-6-a-227 failing -15.2.3.7-6-a-228 failing -15.2.3.7-6-a-229 failing -15.2.3.7-6-a-230 failing -15.2.3.7-6-a-233 failing -15.2.3.7-6-a-234 failing -15.2.3.7-6-a-235 failing -15.2.3.7-6-a-236 failing -15.2.3.7-6-a-237 failing -15.2.3.7-6-a-238 failing -15.2.3.7-6-a-239 failing -15.2.3.7-6-a-240 failing -15.2.3.7-6-a-241 failing -15.2.3.7-6-a-242 failing -15.2.3.7-6-a-244 failing -15.2.3.7-6-a-245 failing -15.2.3.7-6-a-25 failing -15.2.3.7-6-a-270 failing -15.2.3.7-6-a-271 failing -15.2.3.7-6-a-272 failing -15.2.3.7-6-a-273 failing -15.2.3.7-6-a-274 failing -15.2.3.7-6-a-275 failing -15.2.3.7-6-a-276 failing -15.2.3.7-6-a-277 failing 15.2.3.7-6-a-280 failing -15.2.3.7-6-a-282 failing -15.2.3.7-6-a-283 failing -15.2.3.7-6-a-284 failing -15.2.3.7-6-a-285 failing 15.2.3.7-6-a-286 failing -15.2.3.7-6-a-287 failing 15.2.3.7-6-a-288 failing 15.2.3.7-6-a-289 failing -15.2.3.7-6-a-294 failing -15.2.3.7-6-a-295 failing -15.2.3.7-6-a-296 failing -15.2.3.7-6-a-297 failing -15.2.3.7-6-a-298 failing -15.2.3.7-6-a-299 failing -15.2.3.7-6-a-3 failing -15.2.3.7-6-a-300 failing -15.2.3.7-6-a-301 failing -15.2.3.7-6-a-306 failing -15.2.3.7-6-a-307 failing -15.2.3.7-6-a-308 failing -15.2.3.7-6-a-309 failing -15.2.3.7-6-a-310 failing -15.2.3.7-6-a-311 failing -15.2.3.7-6-a-312 failing -15.2.3.7-6-a-313 failing -15.2.3.7-6-a-4 failing -15.2.3.7-6-a-45 failing -15.2.3.7-6-a-46 failing -15.2.3.7-6-a-5 failing -15.2.3.7-6-a-65 failing -15.2.3.7-6-a-66-1 failing -15.2.3.7-6-a-66 failing -15.2.3.7-6-a-67 failing -15.2.3.7-6-a-68 failing -15.2.3.7-6-a-7 failing -15.2.3.7-6-a-71 failing -15.2.3.7-6-a-72 failing -15.2.3.7-6-a-76 failing -15.2.3.7-6-a-77 failing -15.2.3.7-6-a-79 failing -15.2.3.7-6-a-8 failing -15.2.3.7-6-a-81 failing -15.2.3.7-6-a-83 failing -15.2.3.7-6-a-85 failing -15.2.3.7-6-a-86-1 failing -15.2.3.7-6-a-87 failing -15.2.3.7-6-a-88 failing -15.2.3.7-6-a-9 failing -15.2.3.7-6-a-91 failing -15.2.3.7-6-a-92 failing -15.2.3.7-6-a-93-1 failing -15.2.3.7-6-a-93-2 failing -15.2.3.7-6-a-93-3 failing -15.2.3.7-6-a-93-4 failing 15.2.3.9-2-a-12 failing 15.2.4.2-1-1 failing 15.2.4.2-1-2 failing @@ -2947,4 +2831,4 @@ S15.4.4.13_A1_T2 failing 15.4.4.19-8-c-i-6 failing 15.4.4.20-9-c-i-6 failing 15.4.4.21-8-b-iii-1-6 failing -15.4.4.22-8-b-iii-1-6 failing +15.4.4.22-8-b-iii-1-6 failing \ No newline at end of file -- 2.7.4