From: Lars Knoll Date: Fri, 12 Apr 2013 12:36:41 +0000 (+0200) Subject: Simplify logic for put and putIndexed X-Git-Tag: upstream/5.2.1~669^2~659^2~23 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b85758207a906f2b0dfc1cbb7f66878bf53f86e8;p=platform%2Fupstream%2Fqtdeclarative.git Simplify logic for put and putIndexed Change-Id: Ia67dc06f505fdb064a22920a9786708aa6d83e6e Reviewed-by: Simon Hausmann --- diff --git a/src/v4/qv4object.cpp b/src/v4/qv4object.cpp index 45ce45e5..0937a98 100644 --- a/src/v4/qv4object.cpp +++ b/src/v4/qv4object.cpp @@ -510,31 +510,21 @@ void Object::internalPut(ExecutionContext *ctx, String *name, const Value &value if (!extensible) goto reject; } else { - PropertyAttributes attrs; - if (Property *p = prototype->__getPropertyDescriptor__(ctx, name, &attrs)) { + // clause 4 + if ((pd = prototype->__getPropertyDescriptor__(ctx, name, &attrs))) { if (attrs.isAccessor()) { - if (p->setter()) - goto cont; + if (!pd->setter()) + goto reject; + } else if (!extensible || !attrs.isWritable()) { goto reject; } - if (!extensible) - goto reject; - if (!attrs.isWritable()) - goto reject; - } else { - if (!extensible) - goto reject; + } else if (!extensible) { + goto reject; } } cont: - - // clause 4 - // ### should be able to remove these two lines (see call 15 lines above) - if (!pd && prototype) - pd = prototype->__getPropertyDescriptor__(ctx, name, &attrs); - // Clause 5 if (pd && attrs.isAccessor()) { assert(pd->setter() != 0); @@ -593,30 +583,21 @@ void Object::internalPutIndexed(ExecutionContext *ctx, uint index, const Value & if (!extensible) goto reject; } else { - PropertyAttributes attrs; - if (Property *p = prototype->__getPropertyDescriptor__(ctx, index, &attrs)) { + // clause 4 + if ((pd = prototype->__getPropertyDescriptor__(ctx, index, &attrs))) { if (attrs.isAccessor()) { - if (p->setter()) - goto cont; + if (!pd->setter()) + goto reject; + } else if (!extensible || !attrs.isWritable()) { goto reject; } - if (!extensible) - goto reject; - if (!attrs.isWritable()) - goto reject; - } else { - if (!extensible) - goto reject; + } else if (!extensible) { + goto reject; } } cont: - // clause 4 - // ### remove and replace with 15 lines above... - if (!pd && prototype) - pd = prototype->__getPropertyDescriptor__(ctx, index, &attrs); - // Clause 5 if (pd && attrs.isAccessor()) { assert(pd->setter() != 0);